jmeter之参数化

JMeter—-正则表达式&JSON Path Extractor

不知道你们在使用jmeter的时候有没有遇到过类似于我这样的问题,就是对于json格式的返回值要取其中某个key的value值,如果用正则表达式取的话就往往会取到空值。或者会把所有的匹配的key写出来。因此为了方便提取可以选择使用JSON Extractor进行提取

connect

例如:

请求的接口返回值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
"code":200,
"data":
{
"list":
[
{
"id":136,
"insertTime":"2018-08-13 10:46:23",
"item":
{
},
"num":1,
"priceType":1,
"skuId":43,
"uid":"745112018080615551",
"updateTime":"2018-08-13 10:46:23"
},
{
"id":101,
"insertTime":"2018-08-07 17:27:55",
"item":
{
"canRefund":0,
"courseId":2,
"courseName":"18328343333 计组",
"icon":"test/pic/1796308711224902736.jpg",
"orgId":1,
"orgName":"18328341111 的学校",
"prices":
[
{
"currency":1,
"gmtCreate":"2018-08-03 14:08:21",
"gmtUpdate":"2018-08-03 14:08:21",
"id":3,
"itemId":2,
"marketPrice":100.20,
"orginPrice":200.20
},

我需要取里面的id值作为参数传递到下一个接口。如图:

connect

Variable names : 名称

JSONPath Expression:JSON表达式

Match Numbers:匹配哪个,可为空即默认第一个

Default Value:未取到值的时候默认值
使用$.data.id 去提取id的值时,发现获取到的数据为空
原来这个responses 的data为数组,故应为$.data.list[0].id 提取第list数组中第1个id值


跨线程组传递变

使用场景:
我们在一个线程组中的一个返回参数只需要获取一次,但是这个返回值需要在其他的线程组中调用。

解决办法:

添加一个后置处理器——Beanshell Prerocessor

1、首先需要在需要获取的参数线程组中添加正则表达式/JSON Extranctor

connect

2、当前线程组中继续添加后置处理器——Beanshell Prerocessor

connect

3、Parameters:引用json表达式提取的变量teacherId

4、Script:具体beanshell语法大家可去查看相关资料,这里很简单,一条语句就搞定。
意思是把获取的变量 ${teacherId}设置为全局变量,并以新的名字newtoken来进行引用。
5、在引用的地方引用全局变量:teacherId

connect

引用方式是${__P(teacherId,)}注意花括号中是两个下划线,newtoken后还跟一个逗号,不要写漏了。

1
2
3
4
5
{
"teacherId":"${__P(teacherId,)}",
"name":"${__P(teachername,)}"

}

6、执行查看结果:

connect

热评文章