通过命令行参数传递时,jmeter $ {__ threadNum}不呈现

时间:2018-07-17 21:38:38

标签: jmeter performance-testing load-testing jmeter-4.0

我正在设置jmeter负载测试,每个模拟用户将提交对自己独特内容源的引用。因此,在每次测试的开始,我将创建一个新的文件夹结构,其中的路径包括对每个模拟用户的数字引用。

该数字计划与jmeter ${__threadNum}的值相对应。

测试运行后,每个模拟用户都会向API端点发送一个POST请求,该请求的主体将包含指向任何给定用户目录中每个文件的绝对路径。

示例: 如果测试模拟两个用户,我将创建以下文件夹结构:

/storage
  /testfiles_user1
    test_file_1
    test_file_2
  /testfiles_user2
    test_file_1
    test_file_2

然后,对于每个用户,POST请求的请求正文中将包含以下JSON

对于user1:

{
  "files": [
             "/storage/testfiles_user1/test_file_1",
             "/storage/testfiles_user1/test_file_2"
           ]
}

对于user2:

{
  "files": [
             "/storage/testfiles_user2/test_file_1",
             "/storage/testfiles_user2/test_file_2"
           ]
}

这是我的问题。

当我以以下方式在HTTP请求正文中对此路径进行硬编码时,调用${__threadNum}

{
  "files": [
             "/storage/testfiles_user${__threadNum}/test_file_1",
             "/storage/testfiles_user${__threadNum}/test_file_2"
           ]
}

然后一切都按预期工作=>使用${__threadNum}变量值更新路径,产生以下两个JSON

对于user1:

{
  "files": [
             "/storage/testfiles_user1/test_file_1",
             "/storage/testfiles_user1/test_file_2"
           ]
}

对于user2:

{
  "files": [
             "/storage/testfiles_user2/test_file_1",
             "/storage/testfiles_user2/test_file_2"
           ]
}

但是,当我尝试将HTTP请求正文JSON作为命令行参数传递时,${__threadNum}在路径中呈现为普通文本,而jmeter却不将其视为变量,从而产生以下两个{{1} }: 对于用户1:

JSON

对于user2:

{
  "files": [
             "/storage/testfiles_user${__threadNum}/test_file_1",
             "/storage/testfiles_user${__threadNum}/test_file_2"
           ]
}

您对如何解决此问题有任何建议吗?谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

为了解析文件中或通过命令行参数传递的JMeter变量,您需要将调用包装到__eval() function

例如,如果您以前有${__P(foo,)},则需要将其替换为${__eval(${__P(foo,)})}-这样将调用嵌套的__threadNum() function

演示:

JMeter Combine JMeter Variables

更多信息:Here’s What to Do to Combine Multiple JMeter Variables