MeterSphere 开源持续测试平台的 “接口测试” 模块具有灵活的接口场景编排设计,模块覆盖了多种接口协议,可自由组合接口自动化测试场景,为接口测试带来方便快捷的体验。
其中,逻辑组件可以支持等待、循环、条件、事务这四种类型的控制器。测试人员在进行接口测试场景设计时,可以使用循环控制器控制多次执行接口测试操作,以减少重复性步骤。本文将为您讲解在 MeterSphere 平台中使用循环控制器进行次数循环、While 循环以及 ForEach 循环的具体操作方法。
一、前置操作
此场景适用于进行次数循环和 While 循环。
新增场景变量,类型选择 “CSV” 选项,上传对应的 CSV 文件,点击 “预览” 选项卡(场景中若想使用 CSV 数据,可直接使用 ${id} 即可获取字段 ID 的数据,每次只能获取一条);
新建自定义脚本,选择 “python” 类型脚本,写入代码来读取 CSV 数据的行数,再将其存储为 “num” 变量,以便后续接口引用。
二、循环控制器
2.1 次数循环
进行次数循环时,循环次数应写明具体数值,此处可引用上一步骤 “自定义脚本” 中存储的 CSV 行数变量;
执行后,响应内容处可看到循环的次数与 CSV 文件里的行数一致。
2.2 While 循环
进行 Whlie 循环时,While 循环条件可引用场景准备步骤 “自定义脚本” 中存储的 CSV 行数变量,让其大于 0 进入循环控制器中;
然后在循环控制器中的前/后置脚本对该变量减 1 后,重新赋值存储;
执行后,响应内容处同样可看到循环的次数与 CSV 文件里的行数一致。
2.3 ForEach 循环
因 ForEach 循环对上述场景不适用,所以重新新建场景进行演示。
2.3.1 设置场景变量为列表
① 新建场景变量,类型为 “列表”,值为多个值;
② 使用 ForEach 循环遍历列表 ID,打印每个 ID 的值;
③ 执行后可看到响应内容处,循环的次数与列表 ID 的长度一样,且 ID 值也一个个遍历出来了。
2.3.2 JSONPath 提取值为列表
① 通过 JSONPath 提取返回值,勾选 “匹配多条” 选项,得到一个 groupId 数组;
② 遍历上个接口提取到的 groupId 数组,并进行打印变量值;
③ 执行后的响应内容处,可看到循环数与 groudId 数组长度一致,且将数组每个值都打印出来了。
以上便是 MeterSphere 接口测试模块可使用循环控制器进行的三种循环的具体操作介绍,供大家参考使用。
获取 CSV 行数的 Python 代码如下:
import sys
sys.path.append("/opt/metersphere/data/python/lib/python2.7/site-packages")
filename=r'/opt/metersphere/data/body/7d1c07da-d11_11.csv'
total = sum(1 for line in open(filename))-1
log.info('-------'+str(total));
vars.putObject("num",total)
循环控制器里请求前后置脚本,改变 num 值大小的 Python 代码如下:
n = vars.getObject("num");
num_ = n - 1
log.info("---222----"+str(num_));
vars.putObject("num",num_);
获取 CSV 行数的 BeanShell 代码如下:
import java.io.BufferedReader;
import java.io.FileReader;
BufferedReader br=new BufferedReader(new FileReader("/opt/metersphere/data/body/e7228944-541_name.csv"));
String tmpStr="";
int rowCount=0;
while(tmeStr=br.readLine()!=null){
rowCount++;
}
int num = rowCount-1;
vars.putObject("num",num);
log.info("CSV文件数据的行数:"+num);