Fork me on GitHub

httprunner 4.x学习 - 04提取(extract)和校验(validate)

前言

支持 2 种响应结果字段提取方式:

  1.jmespath 表达式:响应结果为 JSON 结构,采用 jmespath 表达式进行参数提取。参考教程https://jmespath.org/tutorial.html

  2. 正则表达式(regex):返回的非JSON 格式,可以用正则表达式(regex) 提取。需要具备一定的正则知识

extract 提取返回结果

extract 提取的对象有 5 种类型:

  1.headers:从响应 headers 中提取字段,例如 headers.name

  2.cookies:从响应 cookies 中提取字段,例如 cookies.Token

  3.body:从响应 body 中提取字段,例如 body.args.foo1

  4.status_code:提取响应状态码,例如 200、404

  5.proto:提取协议类型,例如 “HTTP/2.0”、“HTTP/1.1”

 

如果表达式中存在特殊符号,需要引号包围,如:

headers."Content-Type"

案例:

config:
  name: 案例
  variables:
    username: admin1

teststeps:
-
  name: post
  variables:
    username: admin
  request:
    method: POST
    url: http://120.25.121.168:19001/api/login
    json:
      username: ${username}
      password: "quxue2023"
  extract:
    url: body.url
    origin: body.origin
    agent: headers."Content-Type"
  validate:
    - eq: [status_code, 200]

执行:hrp run testcases\login_imos.yml  --gen-html-report从执行日志可以清楚看到提取的信息:

6:32PM INF run step end exportVars={"agent":"application/json","origin":null,"url":null} step=post success=true type=request
6:32PM INF run testcase end testcase="案例"
6:32PM INF generate HTML report path="reports\\report-1713004361.html"

正则表达式(regex)

返回的非json格式,可以用正则表达式(regex) 提取.

如下示例响应结果为 text/html 格式

config:
  name: 案例
  variables:
    username: admin

teststeps:
-
  name: blog
  request:
    method: GET
    url: https://www.cnblogs.com/quxue
  extract:
    title: "<title>(.*)</title>"
  validate:
    - eq: [status_code, 200]
    - eq: ["${title}", 200]

validate 校验结果

使用jmespath提取 JSON 响应正文(text/html 格式用正则表达式提取)并使用预期值进行验证。

  • 提取结果:jmespath 表达式或正则表达式提取,更多细节参考JMESPath 教程
  • 预期值:这里也可以使用指定的预期值、变量或函数引用
config:
  name: 案例

teststeps:
-
  name: post
  variables:
    username: admin
  request:
    method: POST
    url: http://120.25.121.168:19001/api/login
    json:
      username: ${username}
      password: "quxue2023"

  validate:
    - eq: [status_code, 200]
    - eq: [body.data.username, "admin"]
    - eq: [body.data.message, "成功"]
    - eq: [headers."Content-Type", "application/json"]

 

posted @ 2024-04-14 14:59  测栈云  阅读(50)  评论(0编辑  收藏  举报