关联是一个非常有用的东西,在LR中可以自动关联和手动关联,还可以一边录制一边关联。在
Jmeter中虽然没有关联的功能函数,但是我们也有办法实现关联的功能。下面要介绍的就是在Jmeter中如何实现关联的功能。
紧接着上一篇讲到的通过省份获取该省份下支持天气预报的城市名称,现在要做的就是通过系统返回的城市名称再去请求该城市的天气预报,其中城市名称就是我们需要关联的数据。
实现步骤:
1、在通过省份获取城市的请求后面添加一个正则表达式提取器,并作为该请求的子
测试元件。
2、通过查看getSupportCity请求的返回值,可以查到我们要的数据都是保存在<string>的节点中,需要通过正则表达式获取其中的值。
正则表达式提取器中的设置如下:
引用名称:getCity
正则表达式:<string>(.*?)((.*?))<\/string>
模板:$1$
匹配数字:2
缺省值:(空)
3、添加一个如果(if)控制器,判断返回的值是否正确,
条件:"${getCity}"=="深圳" (必须要有双引号)
注意:这个我获取的是广东省的城市数据,且在返回的数据中深圳位于第二个<string>节点中,也即上面的匹配数字为什么输入2的原因,当然你可以根据实际情况替换。
4、在添加一个webService (SOAP)Request取样器,位置在if控制器的子元件位置,如果控制器执行为true这执行该取样器。webService的配置参考上一篇文章,这里需要注意的就是要选择getWeatherByCityName方法且在Soap/XML-RPC data中输入如下信息 <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getWeatherbyCityName xmlns="http://WebXml.com.cn/">
<theCityName>${getCity}</theCityName>
</getWeatherbyCityName>
</soap:Body>
</soap:Envelope>
5、在if控制器下再添加一个“保存响应到文件”的测试元件保存返回值,用于验证是否正确。
6、OK。现在运行试下,看是否能得到结果。如果一切正确,在“保存响应到文件”中的数据文件中应该能够得到深圳地区的天气预报信息。
-------------------------华丽的分隔线-------------------------
关于正则表达式的几点说明:
以下面为例:
引用名称:getCity
正则表达式:<string>(.*?) ((.*?))<\/string>
模板:$1$
匹配数字:2
缺省值:(空)
1、引用名称可以随便填,但是最好有实际意义,这个多说。必填
2、正则表达式,唯一的需要指出的就是一个()组合中匹配的数据就是一个模板,例如上面我们用了两个正则表达式组合,就会产生两个模板,分别匹配的是城市名称和城市编号。正则表达式不需要写在"/"和"/"之间,除非需要匹配它。必填
3、模板,就是正则表达式中匹配出来的数据,$1$表示采用第一个模板数据,即城市名称,需要说明的是多个模板可以同时使用,例如:$1$$2$,表示的是获取模板1和2中的第二次匹配中的数据,获取的值就是“深圳59493”。必填
4、匹配数字,表示要获取某一个模板中第几次匹配到的数据,例如:深圳就是第一模板中第二次匹配中的数据,如果为负数这表示全部,于foreach控制器协同
工作(看下一遍继续介绍)。如果为0这表示随即取值。。
必填5、缺省值,顾名思义就是没有匹配中时采用的数据。选填