浅谈后置处理器之XPath2 Extractor
相比于XPath Extractor,XPath2 Extractor 支持更广泛的XPath 2.0标准,提供了更丰富和灵活的查询能力。本文档将详细介绍如何在JMeter测试计划中配置并使用XPath2 Extractor来提取数据。
XPath2 Extractor 简介
XPath2 Extractor 作为JMeter测试计划中的一个后置处理器,其主要功能是在HTTP请求或其他类型的取样器执行后,解析响应数据并根据提供的XPath 2.0表达式提取所需内容。提取的数据可以存储为变量,供后续的请求或断言使用。
配置XPath2 Extractor
要在JMeter中添加XPath2 Extractor,请遵循以下步骤:
- 打开JMeter测试计划,在需要处理响应数据的取样器(如HTTP请求)之后,右击选择“添加” > “后置处理器” > “XPath2 Extractor”。
- 配置XPath2 Extractor参数:
○ 引用名称:定义一个变量名,用于存储提取到的值。后续可以通过 ${variableName} 引用这个值。
○ XPath Query:输入你的XPath 2.0表达式,用于定位并提取响应数据中的特定部分。确保表达式正确且符合XPath 2.0规范。
○ 缺省值(Default Value):如果XPath表达式没有匹配到任何内容时,你可以指定一个默认值。
○ Namespaces aliases list (prefix=full namespace, 1 per line):命名空间别名列表,能让使用命名空间比使用旧的XPath提取器更方便,可参考如下内容:
https://blog.csdn.net/yi412/article/details/70158876由于XPath2对于表达式的要求比较严格,对于带命名空间的XML(包括默认的命名空间),使用不带命名空间前缀的表达式是查询不到结果的
○ Return entire XPath fragment instead of text content?:返回文本内容的整个XPath片段
XPath 2.0 快速入门
XPath 2.0相比XPath 1.0引入了许多新特性,包括序列类型、函数和运算符的扩展等。一些基础的XPath表达式示例包括:
● /html/body/div[1]/p:选取HTML文档中第一个
元素。
● //title/text():选取所有
应用案例
首先我们使用SpringBoot框架编写一段测试接口代码,代码如下
@GetMapping(value = "/xml",produces = "application/xml")
public String Returnxml() {
return "<ns:root xmlns:ns=\"http://www.example.com/ns\">\n" +
" <ns:element>\n" +
" <ns:name>John</ns:name>\n" +
" <ns:name>Joe</ns:name>\n" +
" <ns:name>Jack</ns:name>\n" +
" </ns:element>\n" +
"</ns:root>";
}
@GetMapping(value = "/xmlSearch",produces = "application/xml")
public String ReturnxmlSearch() {
return "<root>\n" +
" <element>searchText01</element>\n" +
" <element>searchText02</element>\n" +
" <element>otherText</element>\n" +
"</root>";
}
我们编写脚本如下
线程组:保持默认
HTTP信息头管理器:名称设置为accept,值为application/xml
HTTP请求:协议设置为http,服务器名称或IP设置为127.0.0.1,端口设置为8091,方法设置为GET,路径设置为/xml,内容编码为utf-8
情况1:命名空间中数据获取
XPath2 Extractor:引用名称设置为value,根据样例我们获取xml接口中的name信息,所以XPath query设置为//ns:name/text(),匹配数字设置为-1,缺省值设置为NotFound,Namespaces aliases list中根据提示信息prefix=full namespace, 1 per line,我们将样例中的内容此处填写为ns=http://www.example.com/ns
运行脚本,查看结果树中调试取样器中响应数据的Response Body内容
value=John
value_1=John
value_2=Joe
value_3=Jack
value_matchNr=3
情况2:命名空间中第N个数据获取
上述情况1我们可以看到通过上述方式我们获取了3个内容,但是如果实际业务测试中我只需要某个内容呢,比如上述我只需要获取Joe,我们可以通过上述修改XPath2 Extractor中的XPath query设置为//ns:name[2]/text()即可。
再次运行脚本,查看结果树中调试取样器中响应数据的Response Body内容
value=Joe
value_1=Joe
value_matchNr=1
情况3:搜索内容
HTTP请求:协议设置为http,服务器名称或IP设置为127.0.0.1,端口设置为8091,方法设置为GET,路径设置为/xmlSearch,内容编码为utf-8
XPath2 Extractor:引用名称设置为value,根据样例我们获取xmlSearch接口中的element信息并且对他进行搜索,所以XPath query设置为//element[contains(text(), ‘searchText’)],匹配数字设置为-1,缺省值设置为NotFound
运行脚本,查看结果树中调试取样器中响应数据的Response Body内容
value=< element>searchText01< /element>
value_1=< element>searchText01< /element>
value_2=< element>searchText02< /element>
value_matchNr=2
总结
XPath2 Extractor 是进行复杂数据提取任务时不可或缺的工具,特别是在处理结构化数据时。掌握其使用方法能够显著提升测试脚本的灵活性和效率。请确保在实际应用中根据具体需求调整配置选项,并不断测试以验证提取逻辑的准确性。
标签:XPath,Extractor,浅谈,value,element,设置,XPath2 From: https://blog.csdn.net/u012151594/article/details/140519207