详细工作原理
HTTP方法(必需)
URI(URI) 现在,我们可以直接与URI和正则表达式URI模式进行匹配。 最终,我们将支持RFC 6570 URI模板。 我们规范化URI路径,以便URL编码的内容与URL未编码的内容(例如 你好,世界 到 你好%20world )
查询参数 我们规范化查询参数值,以便URL编码的内容与URL未编码的内容(例如 message=你好世界 到 消息=hello%20world )
请求头 我们将标头规范化,并将相同标头的所有形式视为相等。 例如,以下两组标题是相等的: -
列表(H1=“value1”,content_length=123,X_CuStOm_hEAder=“foo”) -
列表(h1=“value1”,“Content-Length”=123,“x-cuSTOM-HeAder”=“foo”)
-
请求正文
图书馆 ( 网络模拟程序 )
网络模拟程序 :: 使可能 ( )
特征
在低HTTP客户端库级别上暂存HTTP请求 设置和验证对HTTP请求的期望 基于方法、URI、标头和正文匹配请求 支持 测试那个 通过 录像机 可用于测试或测试上下文之外
启用网络模拟
网络模拟程序 :: 使可能 ( )
#>CrulAdapter已启用!
#>HttrAdapter已启用!
测试框架内部
图书馆 ( 原油 )
图书馆 ( 测试那个 )
#做一个树桩
stub_request(存根请求) ( “获得” , " https://httpbin.org/get " ) %>%
返回(_R) ( 身体 = “成功!” ,状态 = 200 )
#><webmockr存根>
#>方法:get
#>uri: https://httpbin.org/get
#>具有:
#>查询:
#>主体:
#>请求标头(_H):
#>返回(_R):
#>-状态:200
#>身体:成功!
#>响应标题(_headers):
#>应该超时:FALSE
#>应该提升:错误
#检查它是否在存根注册表中
存根注册表 ( )
#><webmockr存根注册表>
#>已注册存根
#>获得: https://httpbin.org/get |to_return:身体“成功!”状态为200
#提出请求
z(z) <- 原油 :: Http客户端 $ 新的 ( 网址 = " https://httpbin.org " ) $ 得到 ( “获得” )
#运行测试(未返回任何内容表示已通过)
预期_is ( z(z) , “HttpResponse” )
预期相等(_E) ( z(z) $ 状态代码 , 200 )
预期相等(_E) ( z(z) $ 解析 ( “UTF-8” ) , “成功!” )
测试框架外部
仅基于uri并具有默认响应的Stubed请求
stub请求 ( “获得” , " https://httpbin.org/get " )
#><webmockr存根>
#>方法:get
#>uri: https://httpbin.org/get
#>具有:
#>查询:
#>主体:
#>请求标头(_H):
#>返回(_R):
x个 <- Http客户端 $ 新的 ( 网址 = " https://httpbin.org " )
x个 $ 得到 ( “获取” )
#><严重反应>
#>网址: https://httpbin.org/get
#>请求标头(_H):
#>用户代理:libcurl/7.79.1 r-curl/5.0.0 crul/1.3
#>接受编码:gzip,deflate
#>接受:application/json、text/xml、application.xml、*/*
#>响应标题(_headers):
#>状态:200
stub_request(存根请求) ( “获得” , " https://httpbin.org/get " ) %>%
宽度(_T) (
查询 = 列表 ( 你好 = “世界” ) ) %>%
转向(_R) ( 地位 = 418 )
#><webmockr存根>
#>方法:get
#>uri: https://httpbin.org/get
#>具有:
#>查询:hello=world
#>主体:
#>请求标头(_H):
#>返回(_R):
#>-状态:418
#>主体:
#>响应标题(_headers):
#>should_timeout:假
#>应该提升:错误
x个 $ 得到 ( “获取” ,查询 = 列表 ( 你好 = “世界” ) )
#><严重反应>
#>网址: https://httpbin.org/get
#>请求标头(_H):
#>用户代理:libcurl/7.79.1 r-curl/5.0.0 crul/1.3
#>接受编码:gzip,deflate
#>接受:application/json、text/xml、application.xml、*/*
#>响应标题(_headers):
#>状态:418
基于方法、uri和查询参数的Stubing请求
stub_request(存根请求) ( “获得” , " https://httpbin.org/get " ) %>%
宽度(_T) ( 查询 = 列表 ( 你好 = “世界” ) ,
标题 = 列表 ( '用户代理' = 'libcurl/7.51.0 r-curl/2.6 crul/0.3.6' ,
'接受编码' = “gzip,deflate” ) )
#><webmockr存根>
#>方法:get
#>uri: https://httpbin.org/get
#>具有:
#>查询:hello=world
#>主体:
#>request_headers:User-Agent=libcurl/7.51.0 r-cur。。。, 接受编码=gzip,deflate
#>返回(_R):
存根注册表 ( )
#><webmockr存根注册表>
#>已注册存根
#>获得: https://httpbin.org/get
#>获得: https://httpbin.org/get?hello=world |to_return:状态418
#>获得: https://httpbin.org/get?hello=world 带有标题{“User-Agent”:“libcurl/7.51.0 r-curl/2.6 crul/0.3.6”,“Accept-Encoding”:“gzip,deflate”}
暂存请求并设置超时期望
stub_request(存根请求) ( “发布” , " https://httpbin.org/帖子 " ) %>% to_timeout(超时) ( )
#><webmockr存根>
#>方法:后期
#>uri: https://httpbin.org/帖子
#>具有:
#>查询:
#>主体:
#>请求标头(_H):
#>返回(_R):
#>-状态:
#>主体:
#>响应标题(_headers):
#>应该超时:真
#>应该提升:错误
x个 <- Http客户端 $ 新的 ( 网址 = " https://httpbin.org " )
x个 $ 邮递 ( “发布” )
#>错误:请求超时(HTTP 408)。
#>-客户端在服务器准备等待的时间内未生成请求。 客户可以在以后任何时候重复请求而不进行修改。
Stubing请求并设置HTTP错误预期
图书馆 ( 失礼 )
stub_request(存根请求) ( “获得” , " https://httpbin.org/get?a=b " ) %>% 提升(_R) ( HTTPBad请求 )
#><webmockr存根>
#>方法:获取
#>uri: https://httpbin.org/get?a=b
#>具有:
#>查询:
#>主体:
#>请求标头(_H):
#>返回(_R):
#>-状态:
#>主体:
#>响应标题(_headers):
#>should_timeout:假
#>应提出:HTTPBad请求
x个 <- Http客户端 $ 新的 ( 网址 = " 网址:https://httpbin.org " )
x个 $ 得到 ( “获取” ,查询 = 列表 ( 一 = “b” ) )
#>错误:错误的请求(HTTP 400)。
#>-由于语法错误,服务器无法理解请求。 客户不应在没有修改的情况下重复请求。
高温气冷堆集成
#找不到存根
GET(获取) ( " https://httpbin.org/get " )
#>错误:已禁用真实HTTP连接。
#>未注册的请求:
#>GET(获取) https://httpbin.org/get 带有标题{Accept:application/json、text/xml、application.xml、*/*}
#>
#>您可以使用以下代码段存根此请求:
#>
#>stub_request('get',uri=' https://httpbin.org/get ') %>%
#>宽度(_T)(
#>headers=list('Accept'='application/json,text/xml,application.xml,*/*')
#> )
#> ============================================================
stub_request(存根请求) ( “获取” ,uri = ' https://httpbin.org/get ' ) %>%
宽度(_T) (
标题 = 列表 ( “接受” = '应用程序/json,文本/xml,应用程序/xml,*/*' )
) %>%
返回(_R) ( 地位 = 418 ,车身 = “我是茶壶!!!” ,标题 = 列表 ( 国际货币联盟 = “茶壶” ) )
#><webmockr存根>
#>方法:get
#>uri: https://httpbin.org/get
#>具有:
#>查询:
#>主体:
#>request_headers:Accept=application/json,te。。。
#>返回(_R):
#>-状态:418
#>身体:我是茶壶!!!
#>response_headers:im_a=茶壶
#>should_timeout:假
#>应该提升:错误
( 物件 <- GET(获取) ( " https://httpbin.org/get " ) )
物件 $ 状态代码
#> [1] 418
物件 $ 标题
#>$im_a美元
#>[1]“茶壶”
写入磁盘
##制作临时文件
如果 <- 临时文件 ( 文件文本 = “.json” )
##向文件中写入内容
猫 ( “{\”hello\“:\”world\“}\n” ,文件 = 如果 )
读行 ( 如果 )
#>[1]“{\”hello\“:\”world\“}”
##制作存根
看不见的 ( stub_request(存根请求) ( “获得” , " https://httpbin.org/get " ) %>%
返回(_R) ( 身体 = 文件 ( 如果 ) ) )
##提出请求
外面的 <- Http客户端 $ 新的 ( " https://httpbin.org/get " ) $ 得到 ( 磁盘 = 如果 )
读行 ( 文件 ( 如果 ) )
#>[1]“{\”hello\“:\”world\“}”
克 <- 临时文件 ( 文件文本 = “.json” )
##制作存根
看不见的 ( stub_request(存根请求) ( “获得” , " https://httpbin.org/get " ) %>%
返回(_R) ( 身体 = 模拟文件(_F) ( 克 , “{\”hello\“:\”mars\“}\n” ) ) )
##提出请求
外面的 <- 原油 :: Http客户端 $ 新的 ( " https://httpbin.org/get " ) $ 得到 ( 磁盘 = 克 )
读行 ( 外面的 $ 内容 )
#>[1]“{\”hello\“:\”world\“}”
连续多次请求
网络模拟程序 :: 使可能 ( )
图书馆 ( 原油 )
图书馆 ( 失礼 )
z(z) <- stub_request(存根请求) ( “获得” , " https://httpbin.org/get " )
返回(_R) ( z(z) ,状态 = 200 ,车身 = “foobar” ,标题 = 列表 ( 一 = 5 ) )
返回(_R) ( z(z) ,状态 = 200 ,车身 = “熊” ,标题 = 列表 ( b条 = 6 ) )
提升(_R) ( z(z) , HTTPBad请求 )
z(z)
反对的论点 <- 原油 :: Http客户端 $ 新的 ( 网址 = " 网址:https://httpbin.org " )
#第一个返回()
第一 <- 反对的论点 $ 得到 ( “获得” )
第一
第一 $ 解析 ( “UTF-8” )
#第二个返回()
第二 <- 反对的论点 $ 得到 ( “获得” )
第二
第二 $ 解析 ( “UTF-8” )
#第三个to_return()-按规定失败
第三的 <- 反对的论点 $ 得到 ( “获得” )