一、简介二、准备测试接口三、需求四、jmeter使用
3.1、新增“线程组”,这里命名为flask应用3.2、在“flask应用”下面新增“HTTP请求”3.3、在“HTTP请求”下新增“JSON提取器”3.3、在“HTTP请求” 下新增 “BeanShell 后置处理程序”3.4、在“flask应用”下添加“察看结果树”3.4、在“flask应用”下添加“调试取样器”
一、简介这篇文章,主要介绍在测试接口过程中,怎么从多层返回结果中提取指定字段,并存储到文件中,主要使用到“JSON提取器”、和“BeanShell 后置处理程序”。
二、准备测试接口这里为方便记录,自己使用flask起了个服务,写了个http get接口;,然后使用jmeter对这个接口发请求,提取出想要的字段,进行下一步处理。
flask服务参考第2.5章节:【python】flask-Web 应用程序框架
三、需求需求:取出请求返回体中data数组中所有的id和telephone写入text文件中留用。
{
"code":"0",
"data":[
{
"address":"u5317u4eacu5e02u6d77u6dc0u533a",
"id":1,
"password":"123456",
"role":0,
"sex":0,
"telephone":"10086",
"username":"u5c0fu660e"
},
{
"address":"u5e7fu5ddeu5e02u5929u6cb3u533a",
"id":2,
"password":"abc",
"role":1,
"sex":0,
"telephone":"10010",
"username":"u674eu534e"
},
{
"address":"u6df1u5733u5e02u5357u5c71u533a",
"id":3,
"password":"666666",
"role":0,
"sex":1,
"telephone":"10000",
"username":"u5927u767d"
}
],
"msg":"u64cdu4f5cu6210u529f"
}
四、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 后置处理程序”来遍历(参考下一章节);
脚本如下
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性能测试(一)-入门篇.



