参考:JMeter 压力测试使用函数和 CSV 文件参数化 json 数据http://blog.csdn.net/defonds/article/details/40824011


结合自己的实践经验重新整理如下:

说明:笔者使用的是Jmeter 3.0,本文主要是介绍如何使用JMeter的提交 json,以及将其参数化。示例的http请求只是用于验证提交json是否成功,是否成功参数化,并不是真实有效的请求。

1、先准备一个csv文件,我这里只是简单地写了一个,两列数据,并将文件放到E盘的根目录中,

然后在Jmeter中添加一个CSV Data Set Config (在配置元件中),将文件的绝对路径+文件名称+后缀填入,所以我填入E:\1233.csv到“Filename”中,并为csv文件的列定义一个变量名,我这里定义为Num、Letter,注意变量名之间使用英文状态下的逗号进行隔开。

wKioL1f9D6eAdhyKAAHby2_DGAE600.png


2、

(1)添加http sampler,并设置为post请求,

(2)打开Body Data页,设置Json格式,并参数化,使用 ${变量名}。

(3)参数化时,可以直接设置

{

"number":"${Num}",

"letter":"${Letter}"

}

也可以加上一些常量进行组合,如

{

"number":"我是数字${Num}",

"letter":"我是字母${Letter}"

}

wKiom1f9D3bRz6_xAAEa4L8Bdaw512.png


3、设置线程组的并发数量等参数,

(1)我刚刚准备的文件一共14条数据,我这里设置一共发送16次请求,

(2)添加“察看结果树”(在监听器里),然后点击运行按钮,查看请求信息,

wKiom1f9D1HjLMfyAAEGR4fV2n0381.png


4、通过结果树,我们发现Jmeter发送的postData已经成功读取csv文件的数据,并成功参数化。


5、在本次测试中发现,当请求数大于数据源数量时,Jmeter会自动循环读取数据,本次测试的第15请求就是读取的第一行的数据。

wKioL1f9DuHibPvcAACJLP3vnng606.png


这是因为在csv配置中,设置了 recycle on EOF 为true;stop thread on EOF为false,

当Jmeter读完了一轮数据时,还有线程待运行,那么线程会循环读取csv的数据。

EOF:end of file;

wKiom1gC9E_ASW_-AACC2ja8428200.png


其他问题

1、步骤中还可“为该采样器添加 HTTP 信息管理器”,此功能是为了通过服务器的Json类型合法性校验。
        操作步骤如下:鼠标右击该采样器,右键菜单选择 "添加" -> 配置元件 -> HTTP 信息头管理器,然后信息头添加一条名称为Content-Type,值为 application/json即可:

wKioL1f9DrqxuLFnAADOGRiK_Ng436.png