需求

对于使用 jmeter 进行接口测试来说,使用 GUI 方式只能是手工测试,而无法与 Jenkins 等集成为自动化测试。 例如:我们要对于用户登录接口进行测试,可能部署环境有 2 个,测试环境和预发环境。假设测试环境域名 host=test.localhost.com,预发环境域名 host=pre.localhost.com 那么测试的接口地址,就不可能是静态固定的。因此,我们需要将接口地址转化为这样的形式https://${host}/login。这样,使用 CI 集成测试的时候,可以通过命令行将 host 传递过来,那么不同环境下就可以重用已经编写好的 jmeter 的 jmx 脚本,提升工作效率。

命令行传参

jmeter 命令行传参(变量),有 2 种形式。

  • 使用 -J 选项,用于本地运行 jmeter 时传递参数
  • 使用 -G 选项,用于分布式运行 jmeter 是传递参数
jmeter.sh -n -t test.jmx -J变量名=变量值

如何配置 jmeter 的 jmx 脚本

直接执行jmeter.sh进入 jmeter 的图形界面。

添加用户定义的变量

在测试计划中右键添加【用户定义的变量】,如下图所示: 添加用户定义的变量 我们定义的变量host=${__P(host)},其中的__P 函数用于定义属性及默认值,如有默认值,则__P 的第 2 个参数设置默认值。 注意:如果你定义的变量默认值是空的字符串,那么千万不要${__P(host,"")},因为这样定义出来的默认值是""(即两个双引号),而不是一个空的字符串。 当然你如果一定要定义的话,可以这样${__P(host,)}就行了。

添加察看结果树

在测试计划中右键添加【察看结果树】,如下图所示: 添加察看结果树 可以将结果写入到文件当中,文件的路径可以使用变量。

保存后,即可在命令行传入参数

执行

此时按照上面的需求,测试环境下,我们执行本地 jmeter 测试的命令行如下:

jmeter.sh -n -t test.jmx -Jhost=test.localhost.com -l test.txt -e -o ./test

对于预发环境,则本地执行命令行变更为:

jmeter.sh -n -t test.jmx -Jhost=pre.localhost.com -l pre.txt -e -o ./pre

即可。

技巧

jmeter 图形界面中的很多可以填写的文本框或文件选择框,基本上都可以使用变量。 例如加载 csv 文件的路径,或结果树输出文件等。 例如:

/response/${db}_cart_result.csv

其中${db}是用户自定义的变量