首页 > 其他分享 >浅谈后置处理器之XPath2 Extractor

浅谈后置处理器之XPath2 Extractor

时间:2024-07-18 11:55:57浏览次数:9  
标签:XPath Extractor 浅谈 value element 设置 XPath2

浅谈后置处理器之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,请遵循以下步骤:

  1. 打开JMeter测试计划,在需要处理响应数据的取样器(如HTTP请求)之后,右击选择“添加” > “后置处理器” > “XPath2 Extractor”。
  2. 配置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():选取所有元素的文本内容。<br/> ● //*[contains(text(), ‘searchText’)]:查找包含特定文本的所有元素。

应用案例

首先我们使用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

相关文章

  • 浅谈Visual Studio 2022
    VisualStudio2022(VS2022)提供了众多强大的功能和改进,旨在提高开发者的效率和体验。以下是一些关键功能的概述:1264位支持:VS2022的64位版本不再受内存限制困扰,主devenv.exe进程不再局限于4GB,允许用户打开、编辑、运行和调试最大和最复杂的解决方案。内存和性能改进:核心调试器......
  • 浅谈Octave的使用(从下载到基础语言编译)第一部分
     介绍出发点 很多关注机器学习(看过吴恩达大神的视频),还有因为一些原因没有办法使用Matlab(可能是由于权限或是资金问题)的小伙伴们可能都或多或少地听说过Octave这一款软件,但又没用真正地下载和使用这一款免费的开源软件,基于这样一个现状,我想跟大家聊聊Octave这一软件的使用......
  • 【转载】浅谈 pb_ds 库及其在OI其他算竞中的应用
    【原链接】这篇太叼了!pb_ds,比STL更强大的模板库。upd.on10.27更新了优先队列的常数分析,增加了“万能头文件”的内容。前言之前看到过一篇关于pb_ds写得很好的文章,但现在找不到了;OI-wiki上的内容的不太完整。那不如自己动手,丰衣足食。当然,pb_ds库中有很多东西算......
  • 浅谈时间复杂度
    时间复杂度定义衡量一个算法的快慢,一定要考虑数据规模的大小。所谓数据规模,一般指输入的数字个数、输入中给出的图的点数与边数等等。一般来说,数据规模越大,算法的用时就越长。而在算法竞赛中,我们衡量一个算法的效率时,最重要的不是看它在某个数据规模下的用时,而是看它的用时随数......
  • 浅谈AI是在帮助开发者还是取代他们?
    在软件开发领域,生成式人工智能(AIGC)确实正在改变开发者的工作方式,但它的作用更多是辅助而非替代。以下是对这一问题的详细分析:AI作为开发者的助手代码生成:AI工具如GitHub的Copilot可以根据上下文自动生成代码片段,极大地提高了编码效率。这并不意味着AI可以完全取代开发者,因......
  • 浅谈图论
    图的基本概念多个点连成的线就构成了图图的种类(加权)有向图   (加权)无向图度无向图中有几条边连接该节点,该节点就有几度有向图中,每个节点有出度和入度出度:从该节点出发的边的个数入度:指向该节点边的个数 连通性连通图无向图中,任何两个节点都是可以到达的,我们称......
  • 浅谈Scaling Law
    浅谈ScalingLaw背景介绍在机器学习和深度学习领域,ScalingLaw(扩展定律)描述了模型性能(如准确率、损失等)如何随着模型规模(参数数量)、数据量和计算资源(如计算时间、显存等)的变化而变化。这些定律有助于研究人员和工程师理解如何有效地扩展模型以获得更好的性能。在深度学......
  • 连载|浅谈红队中的外网信息收集(一)
    前言最近在对以往所学习的有关红队的知识点进行梳理总结,这里主要参考了ATT&CK矩阵模型,不过对其进行了简化,同时加入了一些国内特有的情况放了进去。大体上会按照外网信息收集、打点、权限维持、提权、内网信息收集、横向移动、痕迹清理这样的顺序展开。本文来源无问社区,更......
  • 浅谈React
    forwardRef和useImperativeHandle的联动使用importReact,{useImperativeHandle,useRef}from"react"import{forwardRef}from"react"constCustomInput=forwardRef((props,ref)=>{constinputRef=useRef<HTMLInputElement>(......
  • 浅谈接口自动化测试
    接口测试大家一定不陌生了,对QA来说也是一项比较基础的技能,并且在现代软件开发中,持续集成已经成为一种不可或缺的实践,所以很多项目中都会做UI自动化、接口自动化的持续集成。在实际工作中,个人感觉接口自动化测试比UI自动化测试性价比要高得多的多,首先接口测试在整个流程......