JMeter传参问题记录
场景说明:
最新的附件预览服务需要切换使用onlyoffice,由此需要验证其性能。这里主要包括上传附件和预览附件两个操作。
其中对于接口传参碰到的主要问题就是接口传参的问题,上传附件的响应结果是一个数组,格式如下
["a11942d1382c4606843e50bf28b75241","application/pdf","2.19MB","51Testing_ceshitiandi46.pdf","D:/rcm-dev/file/816fa0eb89dc43d4ab81273347bc5cd2/2023-04-26/a7668d5daef743308c670e05c0e6a302","2"]
这里需要拿到附件上传后生成的附件ida11942d1382c4606843e50bf28b75241
,针对此种数组格式的响应结果,这里先使用正则表达式拿到整个数组,在JMeter中线程组中添加正则表达式提取器如下设置:
引用名称:id
正则表达式:(.+)
模板:\(1\)
匹配数字:0
缺失值:
然后在预览接口中,添加BeanShell前置处理器对数组进行处理,只获取list[0]的值即可,具体代码如下:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath;
import java.util.List;
//设置文件编码
prev.setDataEncoding("UTF-8");
try {
// 将提取到的hierarchy字符串存到变量data中
String data = vars.get("id");
log.info("-----------------------------" + data);
// 将数组字符串转成数组(注意:如果返回的是字典格式,此处则使用JSONObject来声明变量,同时转化的函数要使用JSON.parseObject,即JSONObject data_arr = JSON.parseObject(data))
JSONArray data_arr = JSON.parseArray(data);
log.info("-----------------------------" +data_arr );
log.info("---------------第一个元素:--------------" +data_arr.get(0));
vars.put("item_type", data_arr.get(0));
}
catch (Throwable ex) {
log.error("Beanshell failure: ", ex);
throw ex;
}
然后在预览接口中使用变量item_type
达到预览不同附件的目的。
接下来就是使用线程组进行压力测试,这里官网推荐用Ultimate Thread Group代替。所以这里安装完成对应的插件后使用Ultimate Thread Group完成对应的测试工作。
Ultimate Thread Group线程组的说明:
Start Threads Count:当前行启动的线程总数
Initial Delay/sec:延时启动当前行的线程,单位:秒
Startup Time/sec:启动当前行所有线程达峰值所需时间,单位:秒
Hold Load For/sec:当前行线程达到峰值后的稳定加载时间,单位:秒
Shutdown Time:停止当前行所有线程所需时间,单位:秒
到此,设置对应的线程信息后坐等分析结果了。jmx文件地址:链接:https://pan.baidu.com/s/1dbLPnggmwHUCWTJQY-fTRQ?pwd=4bop
提取码:4bop