我正在使用 JMeter 对 SOAP Web 服务进行负载测试。Web 服务存在于很多地方,比如我的本地主机、开发框、集成框、生产框等。
我正在使用 WebService(SOAP) 请求采样器,并设置了“IP 的服务器名称”、“路径”和“SOAP 操作”参数,如下所示:
Server Name of IP: ${SERVER}
Path: ${PATH}/service
SOAPAction: http://${SERVER}${PATH}service#action
这在使用“用户定义的变量”配置元素时效果很好。我只是将 SERVER 和 PATH 更改为特定于我要命中的位置的任何内容。然而,这比我想处理的更让人头疼。我希望做(并尝试过)的是在我的线程组中添加多个 If Logic Controller 并检查 ${MODE} (另一个 UDV)并采取相应措施,设置我的 SERVER 和 PATH。所以,我有类似的东西
"${MODE}" == "dev"
"${MODE}" == "local"
"${MODE}" == "production"
每个 If Controller 一个,然后我有一个子 UDV 元素设置适当的 SERVER 和 PATH。尽管我假设如果控制器返回 false 将使 UDV 无法被评估,但始终使用来自最后一个 UDV 的值(按我的线程组中出现的顺序)。但是,我在文档中看到,在启动任何线程之前,无论位置如何,都会评估所有 UDV。因此,我尝试改用用户参数,但我的 SOAP 采样器中 ${SERVER} 和 ${PATH} 的值没有被替换,我正在向 http://${SERVER}${PATH} 发出请求,即不好。
有什么优雅的方法来处理这个吗?目前,每次我需要更改正在访问的服务器时,我只是复制粘贴 SERVER 和 PATH 的值。我知道我也可以有多个测试计划,一个用于我要加载测试的每台服务器,但我经常更新结构,包括添加新测试、禁用现有测试和更改 SOAP 请求的某些部分,因此有一堆它们似乎不是一个好的解决方案。
有什么帮助吗?