在 ToB 系统的业务场景中,经常有厂家需要将原始 JSON 数据,用于请求体传参,或者响应体对比等业务场景。对应 Metersphere 中接口自动化,CSV 数据驱动数据包含 JSON 结构内容,用于接口测试时,请求体引用和响应体对比。
测试步骤分析:
- 创建场景,导入包含 JSON 数据的 CSV(包含 header 和若干行预期结果)
- 获取JSON数据后,正常引用变量测试或断言
注: 如果 JSON 数据非独立存在文件 JSON 数据量较大,不方便结构化到 CSV 文件时,建议 CSV文件中 json_file 一栏可填写为文件名称,然后通过脚本解析得到 JSON 文件内容
如果 JSON 数据 JSON 数据量较小,方便结构化到 CSV 文件时,建议直接将 JSON 数据放到 CSV 中对应位置
使用场景:
通过CSV批量设置多笔报文的输出结果,然后读入多笔报文去调 API,之后通过断言来比对每笔报文的预期和实际结果,实现批量比对的功能
JSON 数据量较小,方便结构化到 CSV 文件时,直接将 JSON 数据放到 CSV 中对应位置,后引用使用
导入 CSV 到场景变量中,设置是否允许带引号为 True
请求体引用 JSON 数据,进行接口请求
JSON 数据非独立存在文件 JSON 数据量较大,不方便结构化到 CSV 文件时,CSV 文件中 json_file 一栏可填写为文件名称,然后通过脚本解析得到 JSON 文件内容
可在 CSV 文件中添加一列,指定该条数据要读取的 JSON 文件
将 JSON 文件上传到服务器 /opt/metersphere/data/json 目录下
可在请求的前置脚本中写入读取 JSON 文件的 Python 脚本,并将读取到的内容存储为 body
在请求体里可直接引用 ${body} 即可
点击运行正常发出请求,在请求内容处能看到发送的参数为 JSON 文件内容。
Python 读取 JSON 文件代码如下
import sys
import io
#注意:此路径容器内部的映射路径,为固定值
sys.path.append("/opt/metersphere/data/python/lib/python2.7/site-packages")
file = "/opt/metersphere/data/json/{}".format("${json_file}")
log.info("===111==="+file);
with io.open(file,'r',encoding='utf-8') as f:
body = f.read()
vars.put("body",body);
Beanshell 读取 JSON 文件代码参考如下
String fileName = "/opt/metersphere/data/json/15.json";
BufferedReader buffer = new BufferedReader(new FileReader(fileName));
long length = 0;
String lines ="";
String line = "";
while ((line = buffer.readLine()) != null) {
length += 1;
lines+=line + "\n";
}
log.info("打印文件行数"+length);
log.info("打印文件内容"+lines);
读取 JSON文件最快的方式是使用 JMeter 函数 FileToString,用法为 $
函数使用示例见下图: