背景
有一批数据量约3万的图片,需要通过调用获取图片接口,筛选出已过期的图片,并将筛选出的图片标识imageKey保存到本地,响应状态码非200表示图片过期。为提高效率,想通过JMeter来实现批量调用,接口请求参数图片标识imageKey从本地csv文件读取。考虑到并发调用获取数据的正确性,请求参数值通过正则表达式提取器提取,最后使用BeanShell后置处理程序将符合条件的imageKey保存到本地。
操作步骤
1.添加一个CSV 数据文件设置元件
将3万图片对应的imageKey存储到本地csv文件,接口调用时,从本地读取请求参数值。
CSV文件配置如下:

2.添加一个HTTP请求录入接口请求信息
请求参数值从csv文件读取,配置如下:

3.添加一个JSON提取器,提取响应状态码
接口响应体信息如下:
{
"code": 200,
"data": {
"imageBase64": "lskdjfksdjflksjdfkjsdlkfjslkfjsdlkjflskdjflksjfk"
},
"message": "success"
}
JSON提取器配置如下:

4.添加一个正则表达式提取器,提取请求参数imageKey对应值
正则表达式提取器配置如下:

5.添加一个调试取样器,查看提取结果
通过下图可以看到响应体中的状态码code和请求体中的imageKey均成功提取到

6.添加一个BeanShell后置处理程序,编写脚本

脚本如下:
import java.net.URLDecoder;
import org.json.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
String statusCode=vars.get("code"); //获取JSON提取器提取到的code参数值
int code= Integer.parseInt(statusCode); //jmeter内部变量都是String类型,使用前需要强转
String key=vars.get("key");//获取正则表达式提取器提取到的imageKey参数值
FileWriter fstream =null;
BufferedWriter out =null;
if(code !=200){ //判断状态码不为200时,将对应key存储到csv文件
try {
fstream = new FileWriter("F:\\imageKey.csv",true); //写入csv文件,路径下无文件时自动创建
out = new BufferedWriter(fstream);
out.write(key+"\n"); //写入的数据
} catch (IOException e) {
e.printStackTrace();
}
finally{
try {
if(out!=null){
out.close(); //关闭资源
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(fstream!=null){
fstream.close(); //关闭资源
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
7.执行脚本,查看保存到csv文件的数据

8.在线程组中设置相应的线程数
通过前面1-7步操作调通了脚本,就可以设置线程组批量跑这三万数据啦,线程组设置如下:

6547

被折叠的 条评论
为什么被折叠?



