zoukankan      html  css  js  c++  java
  • httprunner 2.x学习6-参数化与数据驱动

    前言

    从 2.0.0 版本开始,HttpRunner 不再支持在测试用例文件中进行参数化配置;
    参数化的功能需要在 testsuite 中实现。变更的目的是让测试用例(testcase)的概念更纯粹

    环境:httprunner==2.5.7

    参数配置

    参数化机制需要在测试用例集(testsuite)中实现。如需实现数据驱动机制,需要创建一个 testsuite,在 testsuite 中引用测试用例,并定义参数化配置。

    测试用例集(testsuite)的格式如下所示:

    config:
        name: testsuite description
    
    testcases:
        testcase1_name:
            testcase: /path/to/testcase1
    
        testcase2_name:
            testcase: /path/to/testcase2
    

    如需对某测试用例(testcase)实现参数化数据驱动,需要使用 parameters 关键字,定义参数名称并指定数据源取值方式。

    参数名称的定义分为两种情况:

    • 独立参数单独进行定义;
    • 多个参数具有关联性的参数需要将其定义在一起,采用短横线(-)进行连接。

    数据源指定支持三种方式:

    • 在 YAML/JSON 中直接指定参数列表:该种方式最为简单易用,适合参数列表比较小的情况
    • 通过内置的 parameterize(可简写为P)函数引用 CSV 文件:该种方式需要准备 CSV 数据文件,适合数据量比较大的情况
    • 调用 debugtalk.py 中自定义的函数生成参数列表:该种方式最为灵活,可通过自定义 Python 函数实现任意场景的数据驱动机制,当需要动态生成参数列表时也需要选择该种方式

    三种方式可根据实际项目需求进行灵活选择,同时支持多种方式的组合使用。
    假如测试用例中定义了多个参数,那么测试用例在运行时会对参数进行笛卡尔积组合,覆盖所有参数组合情况。

    单个参数时参数化

    先准备测试数据,准备四组登录用的账号和密码,账号为test1,test2,test3,test4,密码统一设置为123456。

    参数user账号数据,设置对应的值 ["test1", "test2", "test3", "test4"],定义单个参数用variables,定义参数化用parameters

            variables:
                user: test
                password: 123456
            parameters:
                user: ["test1", "test2", "test3", "test4"]
    

    如果参数化里面的数据只有一个,比如psw对应的值只有一个,parameters 也可以设置 password的值

            variables:
                user: test
                password: 123456
            parameters:
                user: ["test1", "test2", "test3", "test4"]
    

    完整的 testsuites/test_parameters.yml 脚本如下

    # testsuites/test_parameters.yml
    # 上海-悠悠,httprunner QQ交流群:1121184576
    config:
        name: "test userinfo"
    
    testcases:
       login-参数化:
            testcase: case/test_login.yml
            variables:
                user: test
                password: 123456
            parameters:
                user: ["test1", "test2", "test3", "test4"]  # 参数化
                password: [123456]
    

    运行用例,会自动生成四个测试用例

    (venv_hrun) D:softvenu_hrun>hrun testsuites/test_parameters.yml
    INFO     HttpRunner version: 2.5.7
    INFO     Start to run testcase: login-参数化
    login-setup
    INFO     POST http://127.0.0.1:8000/api/v1/login/
    INFO     status_code: 200, response_time(ms): 170.15 ms, response_length: 109 bytes
    
    .
    
    ----------------------------------------------------------------------
    Ran 1 test in 0.175s
    
    OK
    INFO     Start to run testcase: login-参数化
    login-setup
    INFO     POST http://127.0.0.1:8000/api/v1/login/
    INFO     status_code: 200, response_time(ms): 138.63 ms, response_length: 109 bytes
    
    .
    
    ----------------------------------------------------------------------
    Ran 1 test in 0.140s
    
    OK
    INFO     Start to run testcase: login-参数化
    login-setup
    INFO     POST http://127.0.0.1:8000/api/v1/login/
    INFO     status_code: 200, response_time(ms): 147.59 ms, response_length: 109 bytes
    
    .
    
    ----------------------------------------------------------------------
    Ran 1 test in 0.154s
    
    OK
    INFO     Start to run testcase: login-参数化
    login-setup
    INFO     POST http://127.0.0.1:8000/api/v1/login/
    INFO     status_code: 200, response_time(ms): 136.7 ms, response_length: 109 bytes
    
    .
    
    ----------------------------------------------------------------------
    Ran 1 test in 0.140s
    
    OK
    INFO     Start to render Html report ...
    INFO     Generated Html report: D:softvenu_hrun
    eports20200612T164223.834696.html
    
    

    关联参数

    上面的案例多个账号,密码都是一样的,如果密码不一样呢?上面的就行不通了,所以针对于一个账号对应一个密码,这种一一对应的关系,可以用关联性的参数化

    # 上海-悠悠,httprunner QQ交流群:1121184576
    config:
        name: "test userinfo"
    
    testcases:
       login-参数化:
            testcase: case/test_login.yml
            parameters:
                user-password:
                -  ["test1", "123456"]
                -  ["test2", "123456"]
                -  ["test3", "123456"]
                -  ["test4", "123456"]
    

    笛卡尔积组合

    比如测试账号有四种["test1", "test2", "test3", "test4"],密码也有四种 ["123456", "123456", "123456", "123456"]
    用笛卡尔积组合的话,就是4*4=16种组合

    # 上海-悠悠,httprunner QQ交流群:1121184576
    config:
        name: "test userinfo"
    
    testcases:
       login-参数化:
            testcase: case/test_login.yml
            parameters:
                user: ["test1", "test2", "test3", "test4"]
                password: ["123456", "123456", "123456", "123456"]
    

    这样运行会生成16组用例,很显然,这种不适用与登录-密码一对一的情况。可以用在其它的测试场景

  • 相关阅读:
    类型转换
    new Overload函数输出
    快捷键加入属性代码段
    xp 下 安装Ubuntu 11.04 双系统
    native2ascii 用法解析
    apusic jconsole jmx connecitons url
    oracle 分页
    几条最基本的 sqlplus命令
    windows下plsql 设置 里面timestamp显示的格式
    oracle 时间差 做查询条件
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/13110266.html
Copyright © 2011-2022 走看看