Jmeter之Bean shell使用(五)
1、在Test Plan中定义如下三个变量:
2、Bean Shell可脚本如下:
a、bean shell可以接受传入参数,如下图:${u1} ${u2} ${u3}
b、参数可以通过bsh.args[]按顺序提取
c、bean shell提供了一个内置变量Parameters,来保存参数的集合
3、运行结果:
下图中1输入的这两句设置:
ResponseCode = 500;
ResponseMessage = "This is a test";
下图中2输入的这两句设置:
log.info(Parameters);
log.info(Label);
十、提取json数据
需求:提取sample返回json数据中所有name字段值,返回的json格式如下:
{“body”:{“apps”:[{“name”:”111”},{“name”:”222”}]}}
jmeter中添加后置处理器BeanShell PostProcessor
说明:脚本中的导入的json包需要自己去网络下载后放到\lib\ext,请悉知
import org.json.*; String response_data = prev.getResponseDataAsString(); JSONObject data_obj = new JSONObject(response_data); String apps_str = data_obj.get("body").get("apps").toString(); JSONArray apps_array = new JSONArray(apps_str); String[] result = new String[apps_array.length()]; for(int i=0;i<apps_array.length();i++){ JSONObject app_obj = new JSONObject(apps_array.get(i).toString()); String name = app_obj.get("name").toString(); result[i] = name; } vars.put("result", Arrays.toString(result));
断言
import txtWrite.*; String response_data = prev.getResponseDataAsString(); String assert_data="科目${num}"; TxtWrite writeData=new TxtWrite(); if(response_data.indexOf(assert_data)!=-1)//请求的response中有包含自定义字符,则断言结果为false { Failure=false; String message="${__time(yyyy-MM-dd HH:mm:ss,)} 新建科目【"+assert_data+"】成功"; FailureMessage=message; writeData.contentToTxt("D:/xykyInterfaceAutoTest.log",message); }else { Failure=true; String message="${__time(yyyy-MM-dd HH:mm:ss,)} 新建科目【"+assert_data+"】失败----------"; String response="本次请求response数据:"+prev.getResponseDataAsString()+"----------"; String need_assert="需要断言的数据:"+assert_data; FailureMessage=message+response+need_assert; writeData.contentToTxt("D:/xykyInterfaceAutoTest.log",message+response+need_assert); }