Httprunner参数化的案例演示(有关联的用例)

目录

1.对接口进行定义

1.1编写接口定义

1.2调试API

2.测试用例调用已定义的API

3.参数之间的关联

3.1用例中后一步操作的参数需要前一步骤中获得

3.2 通过用例中调用另一个用例并传递所需参数来实现

4.测试步骤的写法


1.对接口进行定义

1.1编写接口定义

可以先将案例目录tests\api中的get_token.yml拷贝到自己构建的测试结构目录中,Api_api\api,加一些备注,也好知道以后如何照着例子写:

name: get token #接口定义描述
base_url: http://127.0.0.1:5000 #请求的根目录
variables: #定义变量
    user_agent: PostmanRuntime/7.24.0
    device_sn: ${gen_random_string(15)}
    os_platform: ios
    app_version: 2.8.6
    expected_status_code: 200
request: #请求信息
    url: /api/get-token  #请求的相对路径
    method: POST
    headers:
        user_agent: $user_agent
        device_sn: $device_sn
        os_platform: $os_platform
        app_version: $app_version
        Content-Type: "application/json"
        device_sn: $device_sn
    json:
        sign: ${get_sign($device_sn, $os_platform, $app_version)}
validate: #校验/断言
    - eq: ["status_code", $expected_status_code] #状态码
    - len_eq: ["content.token", 16] #token字符串长度
    - contains: [{"a": 1, "b": 2}, "a"] #此句不明何意?

1.2调试API

API 尽量保持完整,可以单独运行,方便调试。

hrun D:\httprunner\Api_api\api\get_token.yml

2.测试用例调用已定义的API

2.1引用 接口定义

config:
    name: 获得 token #必填,测试用例名称,测试报告以此作为标题
    variables: #非必填,全局变量,作用域为整个testcase,可合并覆盖API中的variables
        user_agent: win/7
        os_platform: 'win'
        device_sn: TESTCASE_SETUP_001

teststeps:
-   name: /api/get-token #必填,测试步骤名称
    api: api/get_token.yml
    variables: #合并覆盖API中的variables,但不能覆盖config中的variables
        user_agent: 'iOS/12'
        app_version: '7'
    extract:
        - session_token: content.token
    teardown_hooks:
        - ${hook_print($user_agent)}
        - ${hook_print($os_platform)}
        - ${hook_print($app_version)}
        - ${hook_print($device_sn)}

    validate:
    -   eq:
        - status_code
        - 200
    -   len_eq:
        - content.token
        - 16


2.2提取token信息

通过extract关键字提取信息,完整代码如下:

config:
    name: 获得 token #必填,测试用例名称,测试报告以此作为标题
    variables: #非必填,全局变量,作用域为整个testcase,可合并覆盖API中的variables
        user_agent: win/7
        os_platform: 'win'
        device_sn: TESTCASE_SETUP_001
    output: #只能打印出config中定义的变量,和extract提取的信息,步骤中定义的和api中定义的变量,在此输出时找不到数据
        - session_token
        - user_agent
        - os_platform
        - app_version
        - device_sn
teststeps:
-   name: /api/get-token #必填,测试步骤名称
    api: api/get_token.yml
    variables: #合并覆盖API中的variables,但不能覆盖config中的variables
        user_agent: 'iOS/12'
        app_version: '7'
    extract:
        - session_token: content.token #获取token值
    output: #放在测试步骤中不会打印出信息
        - app_version

    teardown_hooks:
        - ${hook_print($user_agent)}
        - ${hook_print($os_platform)}
        - ${hook_print($app_version)}
        - ${hook_print($device_sn)}


    validate:
    -   eq:
        - status_code
        - 200
    -   len_eq:
        - content.token
        - 16


1.3使用output关键字输出提取的关键字

在上述代码中,为了在执行结果中便于查看提取的数据,使用output来输出token,但在尝试过程中发现如下2个问题:

1.output写在config中有效,但写在teststeps中,没有起到效果;

2.写在config中,只能打印出config中定义的变量,和extract提取的信息,步骤中定义的和api中定义的变量,在此输出时找不到数据。

3.参数之间的关联

3.1用例中后一步操作的参数需要前一步骤中获得

例子中,创建用户时,需要接口get_token产出的token数据,下面实现一个创建用户的接口脚本:

config:
    name: 创建用户 #必填,测试用例名称,测试报告以此作为标题
    variables: #非必填,全局变量,作用域为整个testcase,可合并覆盖API中的variables
        user_agent: win/7
        os_platform: 'win'
        device_sn: ${gen_random_string(15)}
    output: #只能打印出config中定义的变量,和extract提取的信息,步骤中定义的和api中定义的变量,在此输出时找不到数据
        - session_token
        - user_agent
        - os_platform
        - app_version
        - device_sn
    extract:
        - session_token
teststeps:
-   name: 获取token #必填,测试步骤名称
    api: api/get_token.yml
    variables: #合并覆盖API中的variables,但不能覆盖config中的variables
        user_agent: 'iOS/12'
        app_version: '7'
    extract:
        - session_token: content.token #获取token值
    teardown_hooks:
        - ${hook_print($user_agent)}
        - ${hook_print($os_platform)}
        - ${hook_print($app_version)}
        - ${hook_print($device_sn)}

    validate:
    -   eq:
        - status_code
        - 200
    -   len_eq:
        - content.token
        - 16

-   name: 创建用户 #必填,测试步骤名称
    api: api/create_user.yml
    variables:
        token: $session_token

3.2 通过用例中调用另一个用例并传递所需参数来实现

1.需要在被调用参数中,加入extract关键字,获取参数信息,同时在config中也加入此参数,其他用例才能使用获取的参数,于是修改下之前的“获得token”用例,config和测试步骤中均加入extract代码块,完整代码如下:

config:
    name: 获得 token #必填,测试用例名称,测试报告以此作为标题
    variables: #非必填,全局变量,作用域为整个testcase,可合并覆盖API中的variables
        user_agent: 'win/7'
        os_platform: 'win'
        device_sn: ${gen_random_string(15)}
    output: #只能打印出config中定义的变量,和extract提取的信息,步骤中定义的和api中定义的变量,在此输出时找不到数据
        - session_token
        - user_agent
        - os_platform
        - app_version
        - device_sn
    extract: #后续接口需要关联此参数信息,则在此需要加入此关键字和参数
        - session_token
teststeps:
-   name: /api/get-token #必填,测试步骤名称
    api: api/get_token.yml
    variables: #合并覆盖API中的variables,但不能覆盖config中的variables
        user_agent: 'iOS/12'
        app_version: '7'
    extract:
        - session_token: content.token #获取token值
    output: #放在测试步骤中不会打印出信息
        - app_version

    teardown_hooks:
        - ${hook_print($user_agent)}
        - ${hook_print($os_platform)}
        - ${hook_print($app_version)}
        - ${hook_print($device_sn)}

    validate:
    -   eq:
        - status_code
        - 200
    -   len_eq:
        - content.token
        - 16


2.在“创建用户”用例中,调用“获取token”用例:

config:
    name: 创建用户 #必填,测试用例名称,测试报告以此作为标题
    extract:
        - session_token
        - device_sn

teststeps:
-   name: 获取token #必填,测试步骤名称
    testcase: testcases/get_token_new1.yml
    extract:
        - session_token
        - device_sn

-   name: 创建用户 #必填,测试步骤名称
    api: api/create_user.yml
    variables:
        token: $session_token
        device_sn: $device_sn


两种方式,用例均能执行成功:

写在一起的用例结果:

用例中调用另一个用例的执行结果:

4.测试步骤的写法

测试步骤在teststeps代码块中,一个name块为一个步骤,如下所示:

config:
    name: 创建用户 #必填,测试用例名称,测试报告以此作为标题
    extract:
        - session_token
        - device_sn

teststeps:
-   name: 获取token #第一步,获取token
    testcase: testcases/get_token_new1.yml
    extract:
        - session_token
        - device_sn

-   name: 创建用户 #第二步,根据token创建用户
    api: api/create_user.yml
    variables:
        token: $session_token
        device_sn: $device_sn
发布了8 篇原创文章 · 获赞 27 · 访问量 1500

猜你喜欢

转载自blog.csdn.net/niuhaoyuan/article/details/105414843