什么是 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
中。
感谢您的阅读,别忘了关注,点赞,评论,转发四连哟!