《JMeter CSV Data Set 参数化》
1 简介
压测时常需要用不同的参数组合构造请求,JMeter 的 CSV Data Set Config 可以把 CSV 文件中的每一行注入到请求参数里,实现批量、参数化压测。
2 配置 CSV Data Set
创建 Test Plan -> Thread Group,在线程组中添加 Add -> Config Element -> CSV Data Set Config:
| 配置项 | 说明 |
|---|---|
Filename |
CSV 文件路径。文件与 bin/ 同目录时可直接写文件名,否则写完整路径 |
Variable Names |
变量名,对应 CSV 中的列(等价于 Excel 列名) |
Delimiter |
分隔符,默认逗号 ,,若为 tab 则选 tab |
Recycle on EOF |
读完后是否循环 |
Stop thread on EOF |
读完后是否停止线程 |
示例 data.csv:
hello.com,1b35f71ab0398653f812eex1
jack.com,2b35f71ab0398653f8f2eex8
在 CSV Data Set Config 中声明变量 zone, zone_id,分别对应两列。
3 在请求中使用变量
在 HTTP 请求体中,用 ${变量名} 引用:
{
"zone": "${zone}",
"user_qps": 15,
"enable": true,
"operator_id": "5b7120acfa02dcd85d993",
"zone_id": "${zone_id}",
"x_zone_id": "842139f406bcf897edc4b5cdf03718e7"
}
注意:POST 请求中如果需要在 JSON 字符串内做变量替换,变量必须用双引号包裹,形如
"${zone}",否则无法被 JMeter 解析替换。
4 批量向 MySQL 写入场景
用 JMeter 调接口批量写库时,并发不宜过高,否则可能导致数据库错误。例如要写 1000 条数据:
- 并发数
ThreadGroup.num_threads设为 50 - 循环次数
LoopController.loops设为 20(50 * 20 = 1000)
.jmx 中关键节点示意:
<ThreadGroup testname="btol" enabled="true">
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" testclass="LoopController">
<stringProp name="LoopController.loops">20</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">50</stringProp>
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
</ThreadGroup>
HTTPSampler 核心配置:
<stringProp name="HTTPSampler.domain">example.com</stringProp>
<stringProp name="HTTPSampler.port">8089</stringProp>
<stringProp name="HTTPSampler.protocol">http</stringProp>
<stringProp name="HTTPSampler.path">/v1/btol</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
CSV Data Set Config 引用 CSV:
<stringProp name="delimiter">,</stringProp>
<stringProp name="filename">/path/to/data.csv</stringProp>
<boolProp name="recycle">true</boolProp>
<boolProp name="stopThread">false</boolProp>
<stringProp name="variableNames">zone,example</stringProp>
5 参考文档
阅读 —
·
全站 —