奔波儿灞爱霸波尔奔

奔波儿灞爱霸波尔奔

浅谈后置处理器之XPath提取器

XPath Extractor是一个非常实用的逻辑处理器,它允许用户从服务器响应中提取数据,这些数据通常是HTML、XML或任何基于XML的语言格式。XPath(XML Path Language)是一种在XML文档中查找信息的语言,通过使用 XPath,我们可以定位到XML文档中的某个特定元素或属性。在性能测试和功能测试场景中,XPath Extractor常用于提取动态值,如会话令牌、ID或其他需要在后续请求中复用的数据。

XPath Extractor简介

XPath Extractor位于JMeter的“后处理器”类别下,其主要用途是从响应数据中提取文本内容,并将其存储为变量以供后续请求使用。这在模拟用户与网站或Web服务交互时特别有用,特别是在需要处理那些每次请求都会变化的参数时。

配置XPath Extractor

要在JMeter测试计划中使用XPath Extractor,遵循以下步骤:

  1. 添加XPath Extractor:
    ○ 右键点击你想要从中提取数据的HTTP请求。
    ○ 选择“添加” > “后置处理器” > “XPath 提取器”。
  2. 配置设置:
    XML Parsing Options:
    Use Tidy (tolerant parser):当需要处理的页面是HTML格式时,必须选中该选项;如果是XML或XHTML格式(例如RSS返回),则取消选中
    ○ Quiet:显示需要的HTML页面
    ○ 报告异常:显示响应报错
    ○ 显示警告:显示警告
    Use Namespaces:如果启用该选项,后续的XML解析器将使用命名空间来分辨
    ○ Validate XML:根据页面元素模式进行检查解析
    ○ Ignore Whitespace:忽略空白内容
    ○ Fetch external DTDs:如果选中该项,外部将使用DTD规则来获取页面内容
    引用名称:变量名称
    XPath Query:输入你的XPath表达式。这是关键部分,用于定位并提取数据。
    匹配数字(0代表随机):匹配内容多少,-1表示全部,0表示随机
    缺少值: 如果XPath查询没有匹配到任何内容,将使用此默认值。

应用实例

首先我们使用SpringBoot框架编写一段测试代码接口

//xml
@GetMapping(value = "/xml",produces = "application/xml")
    public String Returnxml() {
        return "<list>\n" +
                "\t<note>\n" +
                "\t\t<to>George</to>\n" +
                "\t\t<from>John</from>\n" +
                "\t\t<heading>Reminder</heading>\n" +
                "\t\t<body>Don't forget the meeting!</body>\n" +
                "\t</note>\n" +
                "\t<note>\n" +
                "\t\t<to>Sam</to>\n" +
                "\t\t<from>Roy</from>\n" +
                "\t\t<heading>content</heading>\n" +
                "\t\t<body>Don't forget the buy toys for me!</body>\n" +
                "\t</note>\n" +
                "\t\t<note>\n" +
                "\t\t<to>Joe</to>\n" +
                "\t\t<from>Suzy</from>\n" +
                "\t\t<heading>title</heading>\n" +
                "\t\t<body></body>\n" +
                "\t</note>\n" +
                "</list>";
    }
//html
@GetMapping(value = "/html",produces = "application/html")
    public String Returnhtml() {
        return "<!DOCTYPE html>\n" +
                "<html lang=\"en\">\n" +
                "<head>\n" +
                "    <meta charset=\"UTF-8\">\n" +
                "    <title>简单表单提交界面</title>\n" +
                "</head>\n" +
                "<body>\n" +
                "    <h1>欢迎来到我们的简易表单</h1>\n" +
                "    <form action=\"/submit_form\" method=\"post\">\n" +
                "        <label for=\"name\">姓名:</label>\n" +
                "        <input type=\"text\" id=\"name\" name=\"name\"><br><br>\n" +
                "        <label for=\"email\">电子邮件:</label>\n" +
                "        <input type=\"email\" id=\"email\" name=\"email\"><br><br>\n" +
                "        <label for=\"message\">消息:</label>\n" +
                "        <textarea id=\"message\" name=\"message\"></textarea><br><br>\n" +
                "        <input type=\"submit\" value=\"提交\">\n" +
                "    </form>\n" +
                "</body>\n" +
                "</html>";
    }

我们编写如下脚本:
浅谈后置处理器之XPath提取器-LMLPHP
线程组:保持默认
HTTP信息头管理器:名称设置为accept,值为application/xml
HTTP请求:协议设置为http,服务器名称或IP设置为127.0.0.1,端口设置为8091,方法设置为GET,路径设置为/xml,内容编码为utf-8

情况1:常用XML数据获取

XPath提取器:勾选Return entire XPath fragment instead of text content?引用名称设置为value,根据样例我们获取xml接口中的body信息,所以XPath query设置为list/note/body,匹配数字设置为-1,缺省值设置为NotFound
运行脚本,查看结果树中调试取样器中响应数据的Response Body内容

情况2:常用html数据获取

HTTP信息头管理器:名称设置为accept,值为application/html
HTTP请求:协议设置为http,服务器名称或IP设置为127.0.0.1,端口设置为8091,方法设置为GET,路径设置为/html,内容编码为utf-8
XPath提取器:勾选User Tidy(tolerant parser),引用名称设置为value,根据样例我们获取html接口中的body下的h1信息,所以XPath query设置为html/body/h1,匹配数字设置为-1,缺省值设置为NotFound
运行脚本,查看结果树中调试取样器中响应数据的Response Body内容

XPath查询技巧

● 学习XPath基础:熟悉XPath的基本语法,包括节点选择、属性访问和路径表达式。
● 使用调试工具:利用浏览器的开发者工具或在线XPath测试工具来验证你的XPath表达式是否正确。
● 注意命名空间:如果响应XML包含命名空间声明,可能需要在XPath前加上相应的namespace-uri。
● 提取多个值:默认情况下,XPath Extractor只提取第一个匹配项。若需提取所有匹配项,可以使用XPath Extractor的兄弟组件“XPath2 Extractor”,它支持更高级的XPath 2.0功能。

应用场景示例

● 会话管理:提取登录请求返回的会话ID,用于后续请求的认证。
● 动态参数传递:从响应中提取动态生成的表单字段值,确保表单提交的有效性。
● 数据驱动测试:从XML/HTML数据源中提取测试数据,实现测试用例的数据驱动。

总结

XPath Extractor是JMeter中一个强大且灵活的组件,它极大地扩展了测试脚本处理复杂响应数据的能力。通过熟练掌握XPath语法和正确配置XPath Extractor,你可以构建更加真实、动态和健壮的性能测试场景。

07-18 13:15