《JMeter CSV Data Set 参数化》

《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 参考文档

阅读 — · 全站 —
🎸 我的歌单 0 首