什么是 extract
extract 顾名思义,我们就可以猜到其实用来做数据提取和引用的。
使用场景
通常,测试框架中都有获取数据并且将其存储到变量的机制。httprunner 也不例外,extract 就是用来提取变量并且供后续步骤使用。
在接口测试中,大多数接口都是需要鉴权的,而我们不可能在每个测试步骤,甚至测试用例中重复进行 token 的获取。通常,我们会采用如装饰器,方法调用,变量引用等手段解决这个问题。
在 httprunner 中,我们可以通过 extract 在用例的开始获取一次 token 并将其保存到变量中,这样后续的 api 和 step 就可以直接使用变量了。当然我们也可以通过 debugtalk 实现。
本文主要介绍下 extract 提取数据和引用。
extract 在 case 中
此 case 中有两个 step,假设我们的 step1 是获取 token 并且保存到变量,step2 会携带 token 进行接口的访问。
case
config:
name: "demo testcase"
variables:
device_sn: "ABC"
username: ${ENV(USERNAME)}
password: ${ENV(PASSWORD)}
base_url: "https://getman.cn/mock"
teststeps:
-
name: demo step 1
api: api/demo_api.yml
variables:
user_agent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
device_sn: $device_sn
extract:
- token: content.name
validate:
- eq: ["status_code", 200]
setup_hooks:
- ${hook_print(setup)}
teardown_hooks:
- ${hook_print(teardown)}
-
name: demo step 2
api: api/demo_api2.yml
variables:
token: $token
validate:
- eq: [reason, OK]
以上代码中的
content,status_code都是内置的关键字,我们可以直接使用,而且你会发现它们和Requests中的关键字都是同名的。
demo_api2.yml
demo_api2 中的 headers 中携带了 Token 变量,Token 的内容就是 extract 保存的 token
name: demo api 2
variables:
var1: Chrome1.2
var2: value2
request:
url: /
method: GET
headers:
User-Agent: $var1
Content-Type: "application/json"
Token: $token
json:
key: $var2
validate:
- eq: ["status_code", 200]
测试报告中的体现
step1 的 response
step2 的 headers
以上,我们可以看到从
step1 中 extract 的 token 值已经成功保存并传递到了 step2 的 headers 中。