一些 Jmeter 属性 替换 (${__P(...)}) 在远程测试中不起作用
some Jmeter property substitution (${__P(...)}) not working in remote test
更新:我附上了测试脚本。两个未被接受的替换位于 CSV-DATASOURCE(文件名)和主线程组(线程数)中:test plan file
这让我们快要发疯了。使用 Jmeter 3.3 r1808647。 属性 替换似乎完全失败,但仅当测试是 运行 远程时。
我尝试了很多不同的方法,最新的方法是这样的:
- 在 setUp 线程组中,我使用 Config element/User 定义变量定义了一些用户变量。文字值有效,但 ${__P(globalPropName)} 在本地测试中被正确替换,并且在远程测试中仍然是字符串 ${__P(globalPropName)} 。这在使用调试采样器时很明显。
- 但是在同一个调试采样器的结果中,属性 存在并且具有有效值,所以这不是 -J/-G 问题。
- 由于变量替换不起作用,我也不能使用默认值。
我试过在某些项目中直接使用替换,例如线程数,但是由于没有替换,整个事情都不起作用。
有趣的是,像 ${varname} 这样的简单变量替换就可以了。任何发烧友都没有。就好像在远程 运行 中,字符串解析器被故意简化了。
有什么解决办法吗?
确保你通过 -G command-line argument 从大师那里传递你的 globalPropName
属性,例如:
jmeter -GglobalPropName=foo
确保配置远程从站以写入如下日志文件:
jmeter -s -j slave.log
- 确保在从机上安装 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 特定库在两种情况下都加载得很好。你觉得怎么样,我应该报告这个错误吗?
更新:我附上了测试脚本。两个未被接受的替换位于 CSV-DATASOURCE(文件名)和主线程组(线程数)中:test plan file
这让我们快要发疯了。使用 Jmeter 3.3 r1808647。 属性 替换似乎完全失败,但仅当测试是 运行 远程时。
我尝试了很多不同的方法,最新的方法是这样的:
- 在 setUp 线程组中,我使用 Config element/User 定义变量定义了一些用户变量。文字值有效,但 ${__P(globalPropName)} 在本地测试中被正确替换,并且在远程测试中仍然是字符串 ${__P(globalPropName)} 。这在使用调试采样器时很明显。
- 但是在同一个调试采样器的结果中,属性 存在并且具有有效值,所以这不是 -J/-G 问题。
- 由于变量替换不起作用,我也不能使用默认值。
我试过在某些项目中直接使用替换,例如线程数,但是由于没有替换,整个事情都不起作用。
有趣的是,像 ${varname} 这样的简单变量替换就可以了。任何发烧友都没有。就好像在远程 运行 中,字符串解析器被故意简化了。
有什么解决办法吗?
确保你通过 -G command-line argument 从大师那里传递你的
globalPropName
属性,例如:jmeter -GglobalPropName=foo
确保配置远程从站以写入如下日志文件:
jmeter -s -j slave.log
- 确保在从机上安装 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 特定库在两种情况下都加载得很好。你觉得怎么样,我应该报告这个错误吗?