什么是 extract
extract
顾名思义,我们就可以猜到其实用来做数据提取和引用的。
使用场景
通常,测试框架中都有获取数据并且将其存储到变量的机制。httprunner
也不例外,extract
就是用来提取变量并且供后续步骤使用。
在接口测试中,大多数接口都是需要鉴权的,而我们不可能在每个测试步骤,甚至测试用例中重复进行 token
的获取。通常,我们会采用如装饰器,方法调用,变量引用等手段解决这个问题。
在 httprunner
中,我们可以通过 extract
在用例的开始获取一次 token
并将其保存到变量中,这样后续的 api
和 step
就可以直接使用变量了。当然我们也可以通过 debugtalk
实现。
本文主要介绍下 extract
提取数据和引用。
extract 在 case 中
此 case
中有两个 step
,假设我们的 step1
是获取 token
并且保存到变量,step2
会携带 token
进行接口的访问。
case
代码语言:javascript复制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
中。