前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >httprunner 4.x学习 - 4.提取返回结果与校验(extract, validate)

httprunner 4.x学习 - 4.提取返回结果与校验(extract, validate)

作者头像
上海-悠悠
发布2023-08-22 11:05:01
3820
发布2023-08-22 11:05:01
举报
文章被收录于专栏:从零开始学自动化测试

前言

HttpRunner4.x 支持 2 种响应结果字段提取方式:jmespath 表达式和 正则表达式(regex)

  • 响应结果为 JSON 结构,支持采用 jmespath 表达式进行参数提取。 jmespath表达式,有关更多详细信息,请参考JMESPath教程https://jmespath.org/tutorial.html
  • 返回的非json格式,可以用正则表达式(regex) 提取

extract 提取返回结果

extract 的对象仅有 5 种类型:

  • status_code: 提取响应状态码,例如 200、404
  • proto: 提取协议类型,例如 “HTTP/2.0”、“HTTP/1.1”
  • headers: 从响应 headers 中提取字段,例如 headers.name
  • cookies: 从响应 cookies 中提取字段,例如 cookies.Token
  • body: 从响应 body 中提取字段,例如 body.args.foo1

如果表达式中存在 - 的情况,那么需要加引号处理。

代码语言:javascript
复制
headers."Content-Type"

使用示例

代码语言:javascript
复制
config:
  name: 引用变量
  variables:
    username: test123

teststeps:
-
  name: post
  variables:
    username: test456
  request:
    method: POST
    url: http://httpbin.org/post
    json:
      username: ${username}
      password: "123456"
  extract:
    url: body.url
    origin: body.origin
    agent: headers."Content-Type"
  validate:
    - eq: [status_code, 200]

使用hrp run 命令行运行

代码语言:javascript
复制
hrp run xuexi/test_extract.yml --gen-html-report

运行日志可以看到提取的结果

代码语言:javascript
复制
3:53PM INF run step end exportVars={"agent":"application/json","origin":"183.193.27.78","url":"http://httpbin.org/post"} step=post succ
ess=true type=request
3:53PM INF run testcase end testcase="引用变量"
3:53PM INF create folder path="results\\20230505155322"
3:53PM INF generate HTML report path="results\\20230505155322\\report.html"

正则表达式(regex)

响应结果为 JSON 结构,支持采用 jmespath 表达式进行参数提取。返回的非json格式,可以用正则表达式(regex) 提取.

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

代码语言:javascript
复制
config:
  name: 引用变量
  variables:
    username: test123

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

(相对于httprunner3.x 版本,新增了正则表达式提取结果,这点弥补了3.x 版本取值上的缺陷)

validate 校验结果

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

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

校验示例

代码语言:javascript
复制
config:
  name: 校验结果

teststeps:
-
  name: post
  variables:
    username: test456
  request:
    method: POST
    url: http://httpbin.org/post
    json:
      username: ${username}
      password: "123456"
  validate:
    - eq: [status_code, 200]
    - eq: [body.url, "http://httpbin.org/post"]
    - eq: [body.origin, "183.193.27.78"]
    - eq: [headers."Content-Type", "application/json"]

validate 也可以支持引用提取的结果

代码语言:javascript
复制
config:
  name: 校验结果

teststeps:
-
  name: post
  variables:
    username: test456
  request:
    method: POST
    url: http://httpbin.org/post
    json:
      username: ${username}
      password: "123456"
  extract:
    url: body.url
    origin: body.origin
    type: headers."Content-Type"
  validate:
    - eq: [status_code, 200]
    - eq: ["${url}", "http://httpbin.org/post"]
    - eq: ["${origin}", "183.193.27.78"]
    - eq: ["${type}", "application/json"]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • extract 提取返回结果
  • 正则表达式(regex)
  • validate 校验结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档