JMeter实现保存GET请求参数值到本地

背景

有一批数据量约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步操作调通了脚本,就可以设置线程组批量跑这三万数据啦,线程组设置如下:

### 如何使用 JMeter 对带有列表参数的 Java 接口进行压测 #### 准备工作 为了确保能够成功执行带列表参数的压力测试,在开始之前需确认已安装好 JMeter 并配置环境变量以便命令行启动工具[^1]。 #### 创建 HTTP 请求采样器 在 JMeter 中创建一个新的线程组,用于定义虚拟用户的数量和其他设置。接着添加一个 `HTTP 请求` 采样器来指定目标 URL 和请求方式(GET 或 POST),对于 `/goods/to_list` 接口来说,假设这是一个 GET 方法并且接受查询字符串形式传递的商品 ID 列表作为参数,则可以在 Path 字段输入完整的 API 路径,并通过 Parameters 部分添加名为 ids 的键值对,其中 Value 可以是一个逗号分隔的整数值序列表示商品 IDs。 ```plaintext Path: /goods/to_list?ids=${idList} ``` 如果接口期望的是 JSON 格式的 body 参数而不是 URL 查询串,那么应该选择 POST 方式发送请求,并切换到 Body Data 选项卡内编写类似下面这样的有效载荷: ```json { "ids": ${idListJson} } ``` 这里 `${idList}` 和 `${idListJson}` 是两个自定义变量名,稍后会介绍如何动态生成这些值。 #### 使用 CSV 数据集配置元件提供参数化支持 为了让每次迭代都能获取不同的 id 值组合,可利用内置组件——CSV Data Set Config 来读取外部文件中的数据源。新建此元件并将它放置在线程组之下但位于 HTTP 请求之上位置。编辑其属性面板里的 Filename 属性指向本地磁盘上的 .csv 文件路径;Variable Names (comma-delimited) 设置成与上述提到过的变量名称相匹配即可,比如 `idList,idListJson`。 .csv 文件的内容格式如下所示: | idList | idListJson | |--------|------------| | 1,2,3 | [1,2,3] | | 4,5,6 | [4,5,6] | 这样每当循环一次时就会自动替换模板里对应的占位符为实际的数据条目。 #### 执行测试计划并分析结果 最后保存整个项目结构之后就可以点击绿色播放按钮运行测试方案了。观察监听器窗口内的图表展示性能指标变化趋势以及错误率情况等信息帮助定位潜在瓶颈所在之处。 #### 处理大规模并发场景下的挑战 针对更高强度的要求下开展分布式压测活动,即借助多台物理服务器共同承担施加给被测系统的流量负荷。这涉及到主控端与从属节点之间的协调配合机制设计方面的工作内容[^2]。 #### 解决常见问题 有时可能会遇到远端主机返回空白响应体的问题,这时应当核查各参与方之间网络连接状况良好与否的同时还要留意查看是否遗漏了解除某些默认安全策略限制的操作步骤,例如修改 jmeter.properties 文件中关于模式的相关设定项[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值