前言
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
命令行运行
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"]