这似乎不是我独有的情况,但我无法在任何地方找到答案。
我正在尝试构建可以在GUI和命令行中执行的Jmeter脚本。命令行需要将值传递到测试用例中,但同样的测试用例也需要通过GUI执行。我最初有用于GUI和命令行的单独脚本,但是只需更改几个参数就可以重复使用相同的测试用例。
例如, GUI 测试用例的Web服务器名称设置为:
<!-- ${ENV} set in User Defined Variables -->
<stringProp name="HTTPSampler.domain">${ENV}</stringProp>
命令行测试用例使用以下参数:
<!-- Define via command line w/ -JCMDDEV -->
<stringProp name="HTTPSampler.domain">${__P(CMDENV)}</stringProp>
两者都可以达到目的,但是我希望将测试结合起来以便更容易维护,并且能够通过GUI或命令行运行它们。
我通过了一个障碍,它通过将用户定义变量$ {ENV}设置为以下来组合要使用的GUI变量以及命令行的属性:
Name Value
----- --------
ENV ${__P(ENV,dev.address.com)}
我现在能够通过GUI和命令行运行相同的测试用例(使用-JENV定义新环境)
我不确定我是否过度思考这个问题,但我希望能够在属性默认值中添加一个变量,以避免错别字等,同时将其交给其他人。我尝试了一些似乎不起作用的变体:
Name Value
----- --------
ENV ${__P(ENV,${__V(DEV)})}
DEV dev.address.com
这给了我以下要求:
POST http://DEV/servlet
而不是:
POST http://dev.address.com/servlet
我也尝试过使用:
${__P(ENV,${DEV})}
${__property(ENV,,${__V(DEV)})}
${__property(ENV,,${DEV})}
我正在研究Jmeter nested variables,但它没有提供任何有效的解决方案。
所以对于我的主要问题,我可以使用变量作为属性默认值。如果是这样,我将如何实现?
答案 0 :(得分:1)
我找到了解决这个问题的方法。这不是我想要的,但它现在可以正常工作。
我真的希望将所有内容保存在人们不得不进行编辑的地方,但我能够通过将${__P(ENV,${DEV})}
添加到 HTTP请求默认值Web服务器名称来使用户定义变量工作而不是将其预先定义为变量。
现在有两个可能需要使用GUI执行进行编辑的配置元素,但我认为从长远来看它应该会更好。
答案 1 :(得分:0)
是的,似乎作者是对的-似乎无法在同一变量范围内的JMeter中评估嵌套变量。 我创建了一个不同的“用户定义的变量”集,并在其中添加了“ defaultValue”-之后该选项起作用:
${__P(myProperty, ${defaultValue})}