Jmeter学习笔记4——异步测试(循环控制器+正则表达式+BeanShell)

时间:2024-05-31 09:39:16

1.背景

下单之后,订单不会立即生成,会进行排队;在经过一系列处理之后,才生成订单进行支付;

所以除去下单接口,每隔一段时间会调用一个查询状态的接口。

直到查询状态接口状态满足,就会停止调用。

2.设计

While Controller循环控制器+Bean Shell 后置处理器+正则表达式

用正则表达式获取关联的数据,和状态;当状态满足,更新循环的条件。

3.实现

1)正则表达式

截取部分下单接口返回信息,如下:

Jmeter学习笔记4——异步测试(循环控制器+正则表达式+BeanShell)

需要获取Code用来判断该接口是否下单成功;

同时需要获取订单ID:preOrderId 作为关联数据传到订单查询接口

添加正则表达式提取器

Jmeter学习笔记4——异步测试(循环控制器+正则表达式+BeanShell)

填写内容

Jmeter学习笔记4——异步测试(循环控制器+正则表达式+BeanShell)

正则表达式 “prdOrderid”:"(.+?)“ 提取  “prdOrderid”:"和"之间的内容。

模板:$1$表示提取第一次出现的内容

匹配数字: 0表示随机取值, 1代表全部取值

缺省值:匹配不到数据时,参数默认值;我这里设定-1,是因为后面的判断要用到这个参数,也可以不填写。不填写时,如果取不到值,就是空。

2)循环控制器

Jmeter学习笔记4——异步测试(循环控制器+正则表达式+BeanShell)

在控制器下添加接口

设置循环控制器条件

Jmeter学习笔记4——异步测试(循环控制器+正则表达式+BeanShell) ${__javaScript("${flag}"=="0" && "${code}"=="200" && "${preOrderId}"!="-1")}

调用了${__javaScript()}函数,可以使用函数助手,也可以自己写。这个函数是用来执行判断语句并且返回值。在这里返回结果为true 或者 false;

判断语句:"${flag}"=="0" && "${code}"=="200" && "${preOrderId}"!="-1"

flag为定义的用户变量,默认为0;在测试计划页面,可以添加

code为读取的下单接口状态,当为200时,表示下单成功

preOrderId为查询订单ID,为-1时表示为空

查询下单接口通过判断状态来确定是否下单成功

Jmeter学习笔记4——异步测试(循环控制器+正则表达式+BeanShell)

使用正则表达式获取 status信息

3)添加BeanShell 后置处理器

Jmeter学习笔记4——异步测试(循环控制器+正则表达式+BeanShell)

编写对应脚本

Jmeter学习笔记4——异步测试(循环控制器+正则表达式+BeanShell)

获取正则表达式存取的变量:${变量名}

log.info(输出内容):将信息打印到运行日志中

vars 用户变量存储的map

vars.put("变量名",”变量值“) 变量名不存在为添加变量;变量名存在,为修改变量

vars.get("变量名") 获取变量值

这里是当状态为成功时,修改flag为1,while controller 的判断循环条件是flag==0;所以当状态为成功时,不再执行循环。