一些 Jmeter 属性 替换 (${__P(...)}) 在远程测试中不起作用

some Jmeter property substitution (${__P(...)}) not working in remote test

更新:我附上了测试脚本。两个未被接受的替换位于 CSV-DATASOURCE(文件名)和主线程组(线程数)中:test plan file

这让我们快要发疯了。使用 Jmeter 3.3 r1808647。 属性 替换似乎完全失败,但仅当测试是 运行 远程时。

我尝试了很多不同的方法,最新的方法是这样的:

  1. 在 setUp 线程组中,我使用 Config element/User 定义变量定义了一些用户变量。文字值有效,但 ${__P(globalPropName)} 在本地测试中被正确替换,并且在远程测试中仍然是字符串 ${__P(globalPropName)} 。这在使用调试采样器时很明显。
  2. 但是在同一个调试采样器的结果中,属性 存在并且具有有效值,所以这不是 -J/-G 问题。
  3. 由于变量替换不起作用,我也不能使用默认值。

我试过在某些项目中直接使用替换,例如线程数,但是由于没有替换,整个事情都不起作用。

有趣的是,像 ${varname} 这样的简单变量替换就可以了。任何发烧友都没有。就好像在远程 运行 中,字符串解析器被故意简化了。

有什么解决办法吗?

  1. 确保你通过 -G command-line argument 从大师那里传递你的 globalPropName 属性,例如:

    jmeter -GglobalPropName=foo
    
  2. 确保配置远程从站以写入如下日志文件:

    jmeter -s -j slave.log
    
  3. 确保在从机上安装 JMeter 的 "lib/ext" 文件夹下有 ApacheJMeter_functions.jar。如果您的测试在本地运行良好,我建议您通过网络将您的 "working" JMeter 实例复制到从属主机。

我可以声明我无法使用相同的 JMeter 版本重现您的问题,请尝试如下所述的相同测试计划和命令,如果有效 - 相应地修改您的设置

参考文献:

因此远程服务器的启动方式看起来像是配置错误。

批处理文件(我们在这里讨论Windows)就像

"C:\apache-jmeter-3.3\bin\jmeter.bat" -s -Dserver_port=1098 -j "C:\ows\jmeter-service-ows.log" -d "C:\ows"

...因为所有杂项文件(源 CSV、结果文件、日志)都应位于 C:\ows 中。但事实证明,Jmeter 对其库感到困惑。

当批处理文件如下所示时:

"C:\apache-jmeter-3.3\bin\jmeter.bat" -s -Dserver_port=1098 -j "C:\ows\jmeter-service-ows.log" -d "C:\apache-jmeter-3.3"

...测试运行良好,所有替换都有效。

我已经检查了关于 Jmeter 无法在 CompoundVariable class 中找到任何函数的日志和警告,在第一种情况下他们找到了 none,在第二种情况下他们找到了'他们都是。

我实际上怀疑是一个错误,因为此测试使用了一个额外的外部库 (gson),它位于与丢失的罪魁祸首相同的文件夹中(jmeter.functions 或类似的 stg),并且 that 特定库在两种情况下都加载得很好。你觉得怎么样,我应该报告这个错误吗?