一、简介
这篇文章,主要介绍在测试接口过程中,怎么从多层返回结果中提取指定字段,并存储到文件中,主要使用到“JSON提取器”、和“BeanShell 后置处理程序”。
二、准备测试接口
这里为方便记录,自己使用flask起了个服务,写了个http get接口;,然后使用jmeter对这个接口发请求,提取出想要的字段,进行下一步处理。
flask服务参考第2.5章节:【python】flask-Web 应用程序框架
三、需求
需求:取出请求返回体中data数组中所有的id和telephone写入text文件中留用。
{
"code":"0",
"data":[
{
"address":"\u5317\u4eac\u5e02\u6d77\u6dc0\u533a",
"id":1,
"password":"123456",
"role":0,
"sex":0,
"telephone":"10086",
"username":"\u5c0f\u660e"
},
{
"address":"\u5e7f\u5dde\u5e02\u5929\u6cb3\u533a",
"id":2,
"password":"abc",
"role":1,
"sex":0,
"telephone":"10010",
"username":"\u674e\u534e"
},
{
"address":"\u6df1\u5733\u5e02\u5357\u5c71\u533a",
"id":3,
"password":"666666",
"role":0,
"sex":1,
"telephone":"10000",
"username":"\u5927\u767d"
}
],
"msg":"\u64cd\u4f5c\u6210\u529f"
}
四、jmeter使用
3.1、新增“线程组”,这里命名为flask应用
3.2、在“flask应用”下面新增“HTTP请求”
3.3、在“HTTP请求”下新增“JSON提取器”
-
Variable names:保存的变量名,后面使用${Variable names}引用 -
JSON Path expressions:调试通过的json path表达式 -
Match Numbers:匹配数字(0代表随机,1代表第一个,-1代表所有) -
Default Values:找不到时默认值,一般设置为NOT FOUND -
Compute concatenation var(suffix_ALL):是否统计所有,即将匹配到的所有值保存,名为“变量名_ALL”
怎么在BeanShell只用提取器中的变量?
执行后,从查看结果树中调试器结果可以看出来
JMeterVariables:
JMeterThread.last_sample_ok=true
JMeterThread.pack=org.apache.jmeter.threads.SamplePackage@2575fa
START.HMS=105801
START.MS=1647658681441
START.YMD=20220319
TESTSTART.MS=1647675388832
__jm__flask应用__idx=0
__jmeter.U_T__=flask应用 1-1
__jmv_SAME_USER=true
id_1=1
id_2=2
id_3=3
id_ALL=1,2,3
id_matchNr=3
- ${id_1} 代表取id数组的第一个值;
- ${id_2} 代表取id数组的第二个值;
同理继续下去: - ${id_n} n表示数组长度;
- ${id_matchNr} 代表id数组长度;
- id_ALL 代表id数组元素使用逗号拼接后的值,一般在“BeanShell 后置处理程序”中使用vars.get(“id_ALL”)方式获取;
如果id需要传递到下一个请求中使用,一般搭配“foreach控制器”来遍历; 如果是遍历值后需要写入文件,可能需要搭配“BeanShell 后置处理程序”来遍历(参考下一章节);
3.3、在“HTTP请求” 下新增 “BeanShell 后置处理程序”
脚本如下
import java.util.Date;
import java.text.SimpleDateFormat;
import java.lang.*;
import java.util.Locale;
import java.text.DecimalFormat;
import java.text.*;
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");//设置日期格式
String date = df.format(new Date());// new Date()为获取当前系统时间
log.info("+++++++++++++++++++++++++++++++++++");
log.info("开始111");
//vars.get:获取 jmeter
//定义保留两位小数(四舍五入),小数点前为4位数,不够则用0填充
String pattern = ".0000";
//应用格式化模式
DecimalFormat defaultFormat = new DecimalFormat();
defaultFormat.applyPattern(pattern);
//获取id数组的元素
System.out.println(${id_1});
System.out.println(${id_2});
System.out.println(vars.get("id_ALL"));
System.out.println(vars.get("id_" + 2));
//获取数组长度
int num = ${id_matchNr};
System.out.println(${id_matchNr});
System.out.println("===0444444444======");
String id_v;
String id_f;
//遍历数组元素
for(int i=1;i<=num;i++)
{
System.out.println(vars.get("id_" + i));
System.out.println(vars.get("role_" + i));
id_v = vars.get("id_"+i).toString();
System.out.println(id_v);
d=Double.parseDouble(s);
String result = defaultFormat.format(salary);
System.out.println(result);
}
3.4、在“flask应用”下添加“察看结果树”
3.4、在“flask应用”下添加“调试取样器”
目的:用例查看Json提取器提取到的值
执行请求后,可以在“察看结果树”查看
相关博文:
【性能测试】JMeter性能测试(一)-入门篇.
|