Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JMeter-易于更改的配置选项_Jmeter - Fatal编程技术网

JMeter-易于更改的配置选项

JMeter-易于更改的配置选项,jmeter,Jmeter,我正在使用JMeter对SOAP Web服务进行负载测试。Web服务存在于很多地方,比如我的本地主机、开发设备、集成设备、生产设备等等 我正在使用WebService(SOAP)请求采样器,并设置了“IP服务器名”、“路径”和“SOAP操作”参数,如下所示: Server Name of IP: ${SERVER} Path: ${PATH}/service SOAPAction: http://${SERVER}${PATH}service#action 当使用“用户定义变量”配置元素时,这

我正在使用JMeter对SOAP Web服务进行负载测试。Web服务存在于很多地方,比如我的本地主机、开发设备、集成设备、生产设备等等

我正在使用WebService(SOAP)请求采样器,并设置了“IP服务器名”、“路径”和“SOAP操作”参数,如下所示:

Server Name of IP: ${SERVER}
Path: ${PATH}/service
SOAPAction: http://${SERVER}${PATH}service#action
当使用“用户定义变量”配置元素时,这可以正常工作。我只需将服务器和路径更改为我试图点击的特定位置。然而,这是一个更痛苦的屁股,然后我想处理。我希望(并尝试)在我的线程组中添加多个If逻辑控制器,检查${MODE}(另一个UDV),并相应地采取行动,设置我的服务器和路径。所以,我有点像

"${MODE}" == "dev"
"${MODE}" == "local"
"${MODE}" == "production"
每个If控制器上有一个,然后我有一个子UDV元素设置适当的服务器和路径。始终使用上一个UDV的值(按照线程组中出现的顺序),尽管我假设If控制器返回false将阻止对UDV进行评估。但是,我在文档中看到,在任何线程启动之前,所有UDV都会被评估,而不管其位置如何。因此,我尝试改用用户参数,但是我的SOAP采样器中${SERVER}和${PATH}的值没有被替换,我正在向http://${SERVER}${PATH}发出请求,这是不好的

有什么优雅的方法来处理这个问题吗?目前,每当我需要更改正在访问的服务器时,我只是复制一个粘贴服务器和路径值的命令。我知道我也可以有多个测试计划,每个服务器都有一个测试计划,但我经常更新结构,包括添加新测试、禁用现有测试和更改SOAP请求的某些部分,因此拥有一堆测试计划似乎不是一个好的解决方案


有什么帮助吗

我们使用BeanShell采样器和测试计划中定义的变量解决了这个问题

您可以为整个测试计划定义变量,而不是使用“用户定义变量”元素。只需单击树的根元素并添加一个名为“mode”的变量,其内容为“dev”、“local”或“production”

在测试用例中,添加采样器“BeanShell采样器”,并添加以下代码:

if ("dev".equals(vars.get("mode"))) {
 vars.put("server","x.y.z");
}
if ("local".equals(vars.get("mode"))) {
 vars.put("server","127.0.0.1");
}
if ("production".equals(vars.get("mode"))) {
 vars.put("server","10.0.0.10");
}
然后,您可以定义所需的所有变量,如果需要,还可以添加其他环境

但你也可以更进一步:
创建一个简单的控制器,并把你的豆壳采样器放在那里。在所有线程组中,您现在可以使用模块控制器访问此简单控制器。在这种情况下,您只需为整个测试计划定义一次环境选择器。

我个人发现,拥有多个UDV模块要容易得多,所有模块都位于顶层

我把它们都禁用了,除了我想用的那个


我知道做同样的事情有很多方法;-)

+1。谢谢我将探讨这一解决方案。但是,我确实让它正常工作了,我只需要在线程组之外定义服务器和路径变量,然后用If Controller->User参数覆盖它们。如果有多个UDV(以您的环境命名)并禁用除您需要的UDV之外的所有UDV呢?