浅谈提取器中的要检查的响应字段

浅谈提取器中的要检查的响应字段

在Apache JMeter中,“提取器”(通常指的是正则表达式提取器、JSON路径提取器或CSS/JQuery提取器等)是用来从服务器响应中提取信息的重要组件。这些信息可以是cookies、session IDs、特定的文本或者任何你需要在后续请求中复用的数据。"要检查的响应字段"是配置这些提取器时的关键设置,它们决定了JMeter如何处理和解析响应数据。

要检查的响应字段

在设置正则表达式提取器时,“要检查的响应字段”是一个关键配置项,它指定了你想要从中提取数据的响应部分。JMeter提供了以下几个选项:

  1. 主体:从HTTP响应的主体内容中提取数据。对于大多数情况,比如提取网页中的某个值或者API响应中的数据,都会选择此选项。
  2. Body(unescaped):。所有html转义字符都被替换后的响应消息体。但是jmeter不会根据上下文处理html转义字符,所以有可能被不正确的替换,并且该选项很影响性能,所以在绝对必要并且知道其影响的情况下使用。
  3. Body as a Document:从各种类型的文档中提取文本,该选项很影响性能
  4. 信息头:如果你需要从响应头中提取数据,比如Cookie或特定的响应头字段,应选择此选项。
  5. Request Headers:请求的信息头中获取数据。
  6. URL:是对sample的url进行匹配,也就是查看结果树中请求内容的第一行url,不包含data里的请求参数
  7. 响应代码:仅提取HTTP响应状态码。
  8. 响应消息:提取HTTP响应状态消息,如"OK"、"Not Found"等。

实例说明

我们使用SpringBoot框架编写如下测试代码:

@GetMapping(value = "/html",produces = "application/html")
    public String Returnxml() {
        return "<!DOCTYPE html>\n" +
                "<html>\n" +
                "<head>\n" +
                "  <title>科技登录界面</title>\n" +
                "  <link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">\n" +
                "</head>\n" +
                "<body>\n" +
                "  <div class=\"container\">\n" +
                "    <h1>科技登录</h1>\n" +
                "    <form>\n" +
                "      <input type=\"text\" placeholder=\"用户名\" name=\"username\" required>\n" +
                "      <input type=\"password\" placeholder=\"密码\" name=\"password\" required>\n" +
                "      <input type=\"submit\" value=\"登录\">\n" +
                "    </form>\n" +
                "    <a href=\"https://www.example.com\">访问网站</a>\n" +
                "  </div>\n" +
                "</body>\n" +
                "</html>";
    }

我们编写如下脚本
在这里插入图片描述
线程组:保持默认
HTTP信息头管理器:名称设置为content-type,对应的值设置为application/html
HTTP请求:协议设置为http,服务器名称或IP为127.0.0.1,端口为8091,方法为GET,路径为/html,内容编码为utf-8,其他保持默认
运行脚本,查看结果树,我们可以看到HTTP请求中响应数据的Response Body结果如下

<!DOCTYPE html>
<html>
<head>
  <title>科技登录界面</title>
  <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
  <div class="container">
    <h1>科技登录</h1>
    <form>
      <input type="text" placeholder="用户名" name="username" required>
      <input type="password" placeholder="密码" name="password" required>
      <input type="submit" value="登录">
    </form>
    <a href="https://www.example.com">访问网站</a>
  </div>
</body>
</html>

响应数据的Response headers为

HTTP/1.1 200 
Content-Type: application/html;charset=UTF-8
Content-Length: 488
Date: Fri, 12 Jul 2024 02:50:58 GMT
Keep-Alive: timeout=60
Connection: keep-alive

请求的Request headers为

Connection: keep-alive
content-type: application/html
Host: 127.0.0.1:8091
User-Agent: Apache-HttpClient/4.5.7 (Java/1.8.0_101)

情况1:勾选主体

正则表达式提取器中设置要检查的响应字段为主体,引用名称为var,正则表达式为href=“(.*)”,匹配字符为-1,缺省值为NotFound
运行脚本,查看结果树中调试取样器的响应数据的Response Body

_jmeter.U_T_=线程组 1-1
var=NotFound
var_1=
var_1_g=1
var_1_g0=href=“style.css”
var_1_g1=style.css
var_2=
var_2_g=1
var_2_g0=href=“https://www.example.com”
var_2_g1=https://www.example.com
var_matchNr=2

情况2:勾选Body(unescaped)

正则表达式提取器中设置要检查的响应字段为Body(unescaped),其他配置不变
运行脚本,查看结果树中调试取样器的响应数据的Response Body

_jmeter.U_T_=线程组 1-1
var=NotFound
var_1=
var_1_g=1
var_1_g0=href=“style.css”
var_1_g1=style.css
var_2=
var_2_g=1
var_2_g0=href=“https://www.example.com”
var_2_g1=https://www.example.com
var_matchNr=2

情况3:勾选信息头

正则表达式提取器中设置要检查的响应字段为信息头,正则表达式设置为Content-Type: (.*),其他配置不变
运行脚本,查看结果树中调试取样器的响应数据的Response Body

_jmeter.U_T_=线程组 1-1
var=NotFound
var_1=
var_1_g=1
var_1_g0=Content-Type: application/html;charset=UTF-8
var_1_g1=application/html;charset=UTF-8
var_matchNr=1

情况4:勾选Request Headers

正则表达式提取器中设置要检查的响应字段为Request Headers,正则表达式设置为Host: (.*),其他配置不变
运行脚本,查看结果树中调试取样器的响应数据的Response Body

_jmeter.U_T_=线程组 1-1
var=NotFound
var_1=
var_1_g=0
var_1_g0=Host: 127.0.0.1:8091
var_matchNr=1

情况5:勾选URL

正则表达式提取器中设置要检查的响应字段为URL,正则表达式设置为.*,其他配置不变
运行脚本,查看结果树中调试取样器的响应数据的Response Body

_jmeter.U_T_=线程组 1-1
var=NotFound
var_1=
var_1_g=0
var_1_g0=http://127.0.0.1:8091/html
var_matchNr=1

情况5:勾选响应代码

正则表达式提取器中设置要检查的响应字段为响应代码,正则表达式设置为.*,其他配置不变
运行脚本,查看结果树中调试取样器的响应数据的Response Body

_jmeter.U_T_=线程组 1-1
var=NotFound
var_1=
var_1_g=0
var_1_g0=200
var_matchNr=1

情况6:勾选响应消息

正则表达式提取器中设置要检查的响应字段为响应消息,正则表达式设置为.*,其他配置不变
运行脚本,查看结果树中调试取样器的响应数据的Response Body

_jmeter.U_T_=线程组 1-1
var=NotFound
var_1=
var_1_g=0
var_1_g0=
var_matchNr=1

上述为空的原因是HTTP请求取样器结果中的Response message为空,所以得不到任何数据
在这里插入图片描述

情况7:勾选Body as a Document

正则表达式提取器中设置要检查的响应字段为响应消息,正则表达式设置为.*,其他配置不变
运行脚本,查看结果树中调试取样器的响应数据的Response Body

_jmeter.U_T_=线程组 1-1
var=NotFound
var_1=
var_1_g=0
var_1_g0=org.apache.tika.exception.TikaException: Failed to detect the character encoding of a document
var_matchNr=1

上述内容在对应的HTTP请求然后并且选择text变成document
在这里插入图片描述
然后在查看响应数据的Response Body也是如下错误

org.apache.tika.exception.TikaException: Failed to detect the character encoding of a document

总结

正确配置“提取器中的要检查的响应字段”是确保JMeter脚本能够准确、高效地处理动态数据的关键。根据实际需求选择合适的响应字段并结合恰当的提取规则,可以大幅提升测试脚本的灵活性和实用性。不同的提取器(如JSON Path Extractor、XPath Extractor)虽然细节上有所不同,但核心思想都是从响应中精准地捕获数据,以支持更复杂的测试场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔波儿灞爱霸波尔奔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>