高级性能测试系列《14.响应的提取--json提取器:一个json提取器写多个提取式、正则提取器:万能正则式怎么用?》

2022-06-21 15:37:55 浏览数 (1)

目录

  • 一、响应的提取--json提取器(下)
    • 1.有多个的话,怎么获取某一个呢
    • 2.get请求参数的类型没有json格式
    • 3.json中的key-value键值对顺序是无序的
    • 4.重点:一个json提取器写多个提取式
  • 二、性能测试中,关联的时候会用得上:响应的提取
  • 三、正则提取器
    • 1.万能正则式:.*?
    • 2.写正则提取式
    • 3.配置正则表达式提取器并运行
    • 4.Jmeter正则表达式

一、响应的提取--json提取器(下)

1.有多个的话,怎么获取某一个呢?

可以使用列表,也可以使用索引的方式去提取。

比如,它给你提取出5个,要返回第三个位置的值:填写3

要把5个都拿到:填写-1

填写-1

运行结果

0是随机取了一个。-1是取所有的值。

运行结果

matchNr=6代表总共匹配到6个。matchNr可以作为一个变量名称直接用。

2.get请求参数的类型没有json格式

没写消息头,运行成功,是因为get请求参数的类型没有json格式,约定俗成的不用这种方式。

url后面是parameterjson本身传也是字符串,但是url后携带参数有长度限制,超了就传不了了,一般不用。)

运行结果

3.json中的key-value键值对顺序是无序的

如果设置的是2,只想取第二个位置的值。返回的结果值是田园时蔬。但是能保证每次返回的都是田园时蔬吗?

运行结果

不能。因为json中的key-value键值对顺序是无序的。

有可能这个大括号里面的整个内容在前面,那个大括号里面的整个内容在后面

比如这个大括号里面的内容:"id":1,"typeId":1,"typeDesc":"早晨快餐"id、typeId、typeDesc这三个的顺序也是无序的。

但是肯定的是"id":1,"typeId":1,"typeDesc":"早晨快餐"这三个key和value的值是一一对应的

4.重点:一个json提取器写多个提取式。

$..

再写一个json提取器。从性能的角度来说,多一个元件会多消耗一些资源。

一个json提取器写多个提取式。

1)用英文的分号;

例如..typeDesc;..typeId。

没填写Default Values,运行后就报错了

在一个json提取器中,要提取出多个值的时候,一定要填写Default Values,否则会报错,报错提示:数组越界了。

填写了Default Values,当提取不到结果的时候,就会返回默认值。

自己定义个Default Values值,这个是随便定义的默认值,例如 td;tid

配置json提取器

运行结果

2)多个之间用逗号会报错

多个之间是用的英文分号,用英文逗号不行。

运行后报错

运行后报错

要提取几个值,这些地方就要对应的填写。

运行结果

二、性能测试中,关联的时候会用得上:响应的提取。

比如,在注册接口提取出来了jqid

登录的接口用到从注册接口提取出来的值:jqid,作为传入参数:

三、正则提取器

session不会在响应信息里面,所以就不能用json提取器,用正则提取器。

正则提取式: 左边界(正则式)右边界

1.万能正则式:.*?

万能正则式,能万能到什么程度呢?

换行符(n) 之外的,都可以匹配。

万能正则式把不想要的东西也匹配出来了,也就是说不精确

2.写正则提取式

添加后置处理器--->正则表达式提取器。在察看结果树中选择RegExp Tester,然后写正则提取式:

mobile":"(.*?)",点击Test。

找左边界的时候要找能看的出来的特征,例如:mobile":"

只要是在它右边的,都算是右边界。但是只取最小右边界:

因为json中的key-value键值对顺序是无序的。

万一这个mobile的顺序显示在了最后面的这个位置,最后的这个位置,后面除了,没有逗号了。

是一个列表里面再嵌套了一个列表,无需关注这个。

3.配置正则表达式提取器并运行。

模板的固定写法:数字

正则表达式提取器

从数字1开始,数字1代表取第一个(),数字2代表取第二个()。

因为只有一个(),所以取第一个()。

运行结果

4.Jmeter正则表达式

常用正则式:
  • 左右边界值,中间匹配内容用()代表用户括号内正则式匹配。
  • .匹配除换行符以外的所有字符。
  • *匹配0次或多次。
  • 匹配1次或多次。
  • ?匹配0次或1次。
  • .* .
  • d ld [0-9]
  • lwlw 英文字母或数字的字符串。

重点关注我圈出来的部分

重点关注我圈出来的部分

先用万能正则式,不行的话再改改。

脚本链接:

链接:https://pan.baidu.com/s/18-nY9hcjuqT4AIBLkRkPQg?pwd=1234 提取码:1234

0 人点赞