HttpRunner-4-Extract

2022-06-17 09:04:16 浏览数 (1)

什么是 extract

extract 顾名思义,我们就可以猜到其实用来做数据提取和引用的。

使用场景

通常,测试框架中都有获取数据并且将其存储到变量的机制。httprunner 也不例外,extract 就是用来提取变量并且供后续步骤使用。

在接口测试中,大多数接口都是需要鉴权的,而我们不可能在每个测试步骤,甚至测试用例中重复进行 token 的获取。通常,我们会采用如装饰器,方法调用,变量引用等手段解决这个问题。

httprunner 中,我们可以通过 extract 在用例的开始获取一次 token 并将其保存到变量中,这样后续的 apistep 就可以直接使用变量了。当然我们也可以通过 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]

以上代码中的 contentstatus_code 都是内置的关键字,我们可以直接使用,而且你会发现它们和 Requests 中的关键字都是同名的。

demo_api2.yml

demo_api2 中的 headers 中携带了 Token 变量,Token 的内容就是 extract 保存的 token

代码语言:javascript复制
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]

测试报告中的体现

step1response

step2headers

以上,我们可以看到从 step1extracttoken 值已经成功保存并传递到了 step2headers 中。

0 人点赞