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