上一篇:Jmeter系列之参数化,主要介绍JMeter的三种参数化方式:用户参数、CSV Data Set Config、 CSV函数助手。
以下主要介绍接口依赖的三种处理方式:JSON Extractor、正则表达式、边界提取器(Boundary Extractor)。
在接口自动化中,需要将多个流程串联起来才能将程序整个流程测试通过,会出现后一个接口的请求要用到前面接口的返回值。比如调用商品列表接口请求需要先登录,这时就需要先登录后,获取登录结果中的token,商品列表接口请求时携带token即可。
JSON Extractor后置处理器用在返回格式为json的HTTP请求中,用来获取返回的json中的某个值,并保存成变量供后面的请求进行调用或断言等。
2、Json Extractor界面说明
①HTTP请求,右键,依次选择Add--》Post-Processors--》JSON Extractor。
②创建的 JSON Extractor页面如下:
Name:json后置表达式的名称,标识作用,建议使用有意义的名字;
Names of created variables:保存的变量名,后面使用${Variable names}引用;
JSON Path expressions:json path表达式;
Match No:匹配数字(0代表随机,1代表第一个,-1代表所有);
Compute concatenation var(suffix_ALL):是否统计所有,即将匹配到的所有值都保存,名为“变量名_ALL”,使用场景需要获取的值有多个,后面需要对这一组数据进行操作;
Default Values:找不到时默认值,比如设置为null。
JsonPath语法:
JsonPath | 说明 |
$ |
文档根元素 |
@ |
当前元素 |
. 或[] |
匹配下级元素 |
.. |
递归匹配所有子元素 |
* |
通配符,匹配下级元素 |
[] |
下标运算符,根据索引获取元素,JsonPath索引从0开始 |
[,] |
连接操作符,将多个结果拼接成数组返回,可以使用索引或别名 |
[start:end:step] |
数据切片操作 |
?() |
过滤表达式 |
以上的语法规范,细心的小伙伴可能会发现语法中 ..
表示递归匹配所有子元素,简单粗暴,用..
获取所有匹配的子元素,通过索引拿到想要的值,以下以实战进行演练。
3、实战小例子
①创建线程组、http请求。其中http请求配置如下:
②运行结果如下:
{
"msg": "OK",
"code": 0,
"data": {
"token_info": {
"token_type": "Bearer",
"expires_in": "2020-06-09 12:40:27",
"token": "eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjExNTE1LCJleHAiOjE1OTE2Nzc2Mjd9.u8XfG1vzNmFkkNweiZ2N3hKrzZbIIiI2zb6Z44RAHw7XVrQwoFYTw4vOAL1vK4dquh62atZZoIdmYGjOI-FuRQ"
}
}
}
③HTTP请求右键,新建JSON Extractor,配置如下:
④创建Debug Sampler及察看结果树,运行之后,在Debug Sampler查看token是否提取成功。
1、使用场景
从请求的响应结果中取到需要的内容,作为下一个接口的入参从而实现关联。比如登录后,用正则表达式获取token
,其他接口携带token请求。
2、正则表达式提取器界面说明
①HTTP请求右键,依次点击添加--》后置处理器--》正则表达式提取器。
②创建的正则表达式提取器页面如下:
APPly to:
Main sample and sub-samples: 作用于主节点的取样器及对应子节点的取样器;
Main sample only:仅作用于主节点的取样器;
Sub-samples only: 仅作用于子节点的取样器;
JMeter Variable Name to use: 作用于jmeter变量(输入框内可输入jmeter的变量名称),从指定变量值中提取需要的值。
要检查的响应字段:
主体:响应报文的主体,最常用;
Body(unescaped):主体,是替换了所有的html转义符的响应主体内容,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用;
Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能;
信息头:响应信息头;
Request Headers:请求信息头;
URL:请求url;
响应代码: 响应状态码,比如200、404等;
响应信息: 响应信息。
引用名称:
提取结果之后的变量名称,即下个请求需要引用的值,后面引用方式是${变量名}
。
正则表达式:
使用正则表达式解析响应结果,()
括号表示提取字符串中的部分值,前后是提取的边界内容。一般通用的正则表达式(.+?)
。
模板:
如果正则表达式有多个提取结果,则结果是数组形式。若只有一组表达式,则使用$1$
,两组正则匹配使用$1$$2$
,以此类推。
匹配数字:
正则表达式匹配数据的结果可以看做一个数组:-1
表示全部,0
表示随机,1
表示第一个,2
表示第二个,依次类推。
缺省值:
如果参数没有取到值,那默认给个值,比如null
。
3、实战小例子
①创建一个线程组。
②创建一个HTTP请求,用来发送登录请求,登录接口请求参数配置如下。
③HTTP请求,右键,创建一个正则表达式提取器,登录接口返回结果如下:
{
"data": {
"mobile": "12345678",
"id": 500,
"rid": 0,
"email": "[email protected]",
"username": "admin",
"token": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE1OTA5MDY3MzAsImV4cCI6MTU5MDk5MzEzMH0.M3CWrgsDUMvnhkprQMBJ1wWY5OKO-mKiOD4EJ2YV4zc"
},
"meta": {
"msg": "登录成功",
"status": 200
}
}
正则表达式提取token,配置如下:
④创建一个察看结果树,运行后,接口返回如下:
三、Boundary Extractor
1、使用场景
边界提取器(Boundary Extractor
),不需要写复杂的正则表达式,只要填写左右边界即可。
2、边界提取器界面说明
①HTTP请求右键,依次选择Add--》Post Processors--》Boundary Extractor。
②边界提取(Boundary Extractor)界面如下:
APPly to:
Main sample and sub-samples: 作用于主节点的取样器及对应子节点的取样器;
Main sample only:仅作用于主节点的取样器;
Sub-samples only: 仅作用于子节点的取样器;
JMeter Variable Name to use: 作用于jmeter变量(输入框内可输入jmeter的变量名称),从指定变量值中提取需要的值。
要检查的响应字段:
Body:响应报文的主体,最常用;
Body(unescaped):主体,是替换了所有的html转义符的响应主体内容,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用;
Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能;
Response Headers:响应信息头;
Request Headers:请求信息头;
URL:请求url;
Response Code: 响应状态码,比如200、404等;
Response Message: 响应信息。
引用名称:
提取结果之后的变量名称,即下个请求需要引用的值,后面引用方式是${变量名}
。
左边界:
要提取字符的左边。
右边界:
要提取字符的右边。
匹配数字(0代表随机):
-1
匹配所有,0
随机,1
代表匹配第一个,以此类推,n
取匹配的第n个。
缺省值:
如果没有取到值,那默认给个值,比如null
。
3、实战小例子
①创建http请求,配置如下:
②创建察看结果树,运行结果如下:
{
"msg": "OK",
"code": 0,
"data": {
"token_info": {
"token_type": "Bearer",
"expires_in": "2020-06-09 12:40:27",
"token": "eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjExNTE1LCJleHAiOjE1OTE2Nzc2Mjd9.u8XfG1vzNmFkkNweiZ2N3hKrzZbIIiI2zb6Z44RAHw7XVrQwoFYTw4vOAL1vK4dquh62atZZoIdmYGjOI-FuRQ"
}
}
}
③http请求,右键,新建边界提取器(Boundary Extractor),配置如下:
④创建Debug Sampler,运行之后,查看token是否正确获取。
今日问题:在接口自动化测试中,你用什么方式处理接口依赖?
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
① 2000多本软件测试电子书(主流和经典的书籍应该都有了)
② 软件测试/自动化测试标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python编程语言、API接口自动化测试、web自动化测试、App自动化测试(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)
可以自助拿走,群号953306497(备注“csdn111”)群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。