关键词:接口关联
一、接口自动化实现
http://www.manongjc.com/article/111660.html
二、Jmeter实现
在压力测试的时候,经常要将几个流程串联起来才能将程序测试通过。如:用户首先要登录,获得登录的凭证(tokenId),之后请求其他的资源的时候需要带上这个凭证,才能识别你是否是合法的用户。
jmeter关联可以通过二种方式来获取返回结果中指定的值。他们分别是正则表达式提取器、json path extractor.
(1)正则表达式提取器
创建一个线程租----》创建一个获取凭证的请求----》创建后置处理器(右击该采样器打开右键菜单 -> 添加 -> 后置处理器 -> 正则表达式提取器)
若获取的返回值未匹配到,可以把正则表达式两边匹配的数据扩大点。
引用名称:下个请求将要引用到的变量名;
正则表达式:
():括起来的部分就是要提取的。
.:匹配除换行外的任何字符串。
+:代表+号前面的字符必须至少出现一次(一次或多次)。
?:代表?前面的字符最多可以出现一次,在找到第一个匹配项后停止(0次或1次)。
*:代表号前面的字符可以不出现,也可以出现一次或者多次(0次、1次或者多次)
(.*):贪婪模式,匹配尽可能多的字符
(.*?)或(.+?):匹配尽可能少的字符,一旦匹配到第一个就不往下走了。
模板:若想提取多个值的话,比如是a和b这两个值,则可以写成:$1$$2$。无论要提取多少个值,引用名称就是一个的,比如名称为id,${id_go}:获取整个字符串ab,${id_g1}:获取的是a,${id_g2}:获取的是b。
匹配数字:表示如何取值。0 代表随机取值,1 代表全部取值。这里只有一个,填 1 即可;
缺省值:表示参数没有取到值的话,默认给它的值。一般不填。
这个请求返回的数据如下:
{"message":"success","statusCode":200,"registerDay":"20","tokenId":"bf1017bc1bb495ae31764b306a3422885f5"}
我们现在要获取的是上面这个json字符串中tokenId的值,即 bf1017bc1bb495ae31764b306a3422885f5。
添加下一个请求,在这个请求中,我们要将上面的tokenId作为一个参数一并发送。
添加一个http请求(线程组右键——》添加——》Sampler——》HTTP请求)
执行后,即可通过”查看结果树“查询
(2)json path extractor
jmeter通过安装json path extractor插件来处理json串,提取json串中的字段值。插件的下载地址:https://jmeter-plugins.org/?search=jpgc-json,下载完成,解压后,把jar文件放到Jmeter安装目录下的lib/ext下面即可。特别说明:jmeter 2.xx左右的版本尝试过无法使用该插件,在jmeter 3.xx左右的版本装完插件后能正常使用。
需要在请求下创建后置处理器-jp@gc-JSON Path Extractor,具体的实例如下所示:
Variable names : 变量名称
JSONPath Expression:JSON表达式
Match Numbers:匹配哪个,可为空即默认第一个
Default Value:未取到值的时候默认值
比如某一请求的返回值为:
{"statusCode":200,"data":{"userId":"4a2cbe616eb74f0d99190af072c8dea6","token":"37e7a9e198186f5a443e50e6138a5bd20bd"}}
这里因为返回的是json数据,$.data.token,获取token的值。但是有碰到一个坑
另外一个接口请求返回值为:
{"statusCode":200,"data":[{"code":"407949","id":"aa477ad2085d492a99b877d14343d68d","name":"90一中4545"}]}
同样,使用$.data.id去提取id的值时,发现获取到的数据为空。原来这个responses 的data为数组,故应为 $.data[0].id 提取第1个值
关于json path相关插件的方法和使用,推荐可以看这篇博客: http://www.jianshu.com/p/56a607fc0d8f
故:需要知道上一接口返回所需参数的数据类型
参考:
https://blog.csdn.net/tomoya_chen/article/details/80626212
https://blog.csdn.net/github_27109687/article/details/71968662
网友评论