httprunner3.x总结13 - 参数化驱动

一、参数化的三种方式:

(1)脚本中直接指定参数列表, 示例:
yaml格式:

  parameters:
    uid: [101, 102, 103]
    username-password:
      - [ "user1", "111111" ]
      - [ "user2", "222222" ]
      - [ "user3", "333333" ]

pytest格式:

class TestCaseMubuCreatDoc(HttpRunner):
    @pytest.mark.parametrize("param", Parameters({
        "title": ["demo1"],
        "user": ["user1", "user2"],
        "title-user": [("demo4", "4"), ("demo5", "5"), ("dmeo6", "6")],
    }),)
    def test_start(self, param):
        super().test_start(param)

(2)通过内置的parameterize(可简写为P)函数引用CSV文件。
该种方式需要准备CSV数据文件,适合数据量比较大的情况。 示例:

  parameters:
    apkchannel: ${P(data/vip.csv)} 

(3)在debugtalk.py中自定义的函数生成参数列表。
该种方式最为灵活,可通过自定义Python函数实现任意场景的数据驱动机制,当需要动态生成参数列表时也需要选择该种方式。 示例:

  parameters:
    username-password: ${get_account(10)}
# 返回一个列表
def get_user_id():
    return [
        {"user_id": 1001},
        {"user_id": 1002},
        {"user_id": 1003},
        {"user_id": 1004}
    ]

# 具有关联性的多个参数
def get_account(num):
    accounts = []
    for index in range(1, num+1):
        accounts.append(
            {"username": "user%s" % index, "password": str(index) * 6},
        )
    return accounts

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

二、参数化场景实际例子

V1.0 基础版

hrun mubu_creat_doc_test.py
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
from testcases.mubu_login_test import TestCaseMubuLogin as MubuLogin

# 如果单独写用例的话,先导入这两个类
import pytest
from httprunner import Parameters


# 【参数组合示例1】title、user、phone-password自由组合,共8种组合。
class TestCaseMubuCreatDoc(HttpRunner):
    @pytest.mark.parametrize("param", Parameters({
        "title": ["demo1", "demo2"],
        "user": ["111", "222"],
        # 这个是yml转换换后的,[]也可以换()
        "phone-password": [["1", "2"], ["3", "4"]],
        }),)
    def test_start(self, param):
        super().test_start(param)

#【参数组合示例2】
class TestCaseMubuCreatDoc(HttpRunner):
    @pytest.mark.parametrize("param", Parameters({
        # (1)单参数单值
        "title": ["demo1"],
        # (2)单参数多值
        "title": ["demo2", "demo3"],
        "user": ["user1", "user2"],
        # (3)多参数多值
        "title-user": [("demo4", "4"), ("demo5", "5"), ("dmeo6", "6")],
    }),)
    def test_start(self, param):
        super().test_start(param)

在这里插入图片描述

Vn.0 最终版

(1)代码

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
from testcases.cookie_manipulation.cookie_push_system_test import TestCaseLogin as Login
import pytest
from httprunner import Parameters

"""
V2.0 将parameters参数化的内容调到debug中
"""


class TestCaseMailPush0052(HttpRunner):
    @pytest.mark.parametrize(
        "param", Parameters({"a-b": "${mail_001()}",}),
    )
    def test_start(self, param):
        super().test_start(param)

    config = Config("xxx").base_url("${ENV(URL)}").verify(False)

    teststeps = [
        Step(RunTestCase("测试步骤1:登录").call(Login)),
        Step(
            RunRequest("测试步骤2:xxx")
            .post("/xxx/xxx")
            .with_headers(**{"xxx": "$token"})
            .with_json(
                {
                    "page": 0,
                    "pageSize": 10,
                    "reqList": [{"xxx": "$a", "xxx": "$b"}],
                    "type": 0,
                }
            )
            .validate()
            .assert_equal("status_code", 200)
        ),
    ]


if __name__ == "__main__":
    TestCaseMailPush0052().test_start()

(2)debugtalk.py中导入自定义的函数

from lib.push_system.debug_mail_push import *

(3)目录结构

在这里插入图片描述

三、httprunner、pytest的参数化的使用差异

httprunner的参数化:
在这里插入图片描述
pytest.mark.parametrize()的参数化:
在这里插入图片描述

继承了mark.parametrize()方法,具体参考博客:pytest框架_@pytest.mark.parametrize()
链接:https://blog.csdn.net/weixin_45451320/article/details/113839628

四、问题

问题1:调用参数化的用例,问题点有?

1号脚本做了参数化,示例:
在这里插入图片描述
2号脚本调用时候,要加你个parametrize的部分复制过去,不然会加载失败,无法加载100多条参数化的用例

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_焦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值