• Pytest_参数化(10)


    pytest参数化有两种方式:

    • mark的parametrize标记:@pytest.mark.parametrize(变量名,变量值),其中变量值类型为列表、元组或其它可迭代对象。
    • fixture的params参数:@pytest.fixture(params=变量值),其中变量值类型为列表、元组或其它可迭代对象。

    接下来以上面两种方式演示参数化的多种情况。

    一、单变量参数化

    演示代码如下:

    import pytest
    
    
    # params的值为参数化的值,被装饰的函数为变量名,函数的request形参是固定写法不可修改,return的返回值也是固定写法
    @pytest.fixture(params=(1, 2))
    def login_data(request):
        return request.param
    
    
    class TestLogin:
    
        # parametrize参数化时,需传入两个参数,第一个参数为变量名,第二个参数为参数化的值
        @pytest.mark.parametrize("data", ["a", "b"])
        def test_login_001(self, data):
            print("执行用例001")
            print(f"调用参数-{data}")
    
        # 调用被@pytest.fixture装饰的函数
        def test_login_002(self, login_data):
            print("执行用例002")
            print(f"调用参数-{login_data}")

    执行结果如下:

    二、多变量参数化

    演示代码如下:

    import pytest
    
    
    # params的值为参数化的值,被装饰的函数为变量名,函数的request形参是固定写法不可修改,return的返回值也是固定写法
    @pytest.fixture(params=((1, 2), (3, 4)))
    def login_data(request):
        return request.param
    
    
    class TestLogin:
    
        # parametrize参数化时,需传入两个参数,第一个参数为变量名,第二个参数为参数化的值
        @pytest.mark.parametrize("data1, data2", [("a1", "a2"), ("b1", "b2")])
        def test_login_001(self, data1, data2):
            print("
    执行用例001")
            print(f"调用参数-{data1}-{data2}")
    
        # 调用被@pytest.fixture装饰的函数
        def test_login_002(self, login_data):
            print("
    执行用例002")
            print(f"调用参数-{login_data[0]}-{login_data[1]}")
    
        # parametrize,也可以像fixture用一个变量名使用索引的方式取值。
        @pytest.mark.parametrize("data", [("a1", "a2"), ("b1", "b2")])
        def test_login_003(self, data):
            print("
    执行用例001")
            print(f"调用参数-{data[0]}-{data[1]}")

    执行结果如下:

    三、字典变量参数化

    演示代码如下:

    import pytest
    
    
    # params的值为参数化的值,被装饰的函数为变量名,函数的request形参是固定写法不可修改,return的返回值也是固定写法
    @pytest.fixture(params=({"username": "aaa", "password": 111}, {"username": "bbb", "password": 222}))
    def login_data(request):
        return request.param
    
    
    class TestLogin:
    
        # parametrize参数化时,需传入两个参数,第一个参数为变量名,第二个参数为参数化的值
        @pytest.mark.parametrize("data", [{"username": "ccc", "password": 333}, {"username": "ddd", "password": 444}])
        def test_login_001(self, data):
            print("
    执行用例001")
            print(f"调用参数-{data['username']}-{data['password']}")
    
        # 调用被@pytest.fixture装饰的函数
        def test_login_002(self, login_data):
            print("
    执行用例002")
            print(f"调用参数-{login_data['username']}-{login_data['password']}")

    执行结果如下:

    四、多次参数化

    多次参数化会产生像笛卡尔积一样的结果。

    演示代码如下:

    import pytest
    
    
    # params的值为参数化的值,被装饰的函数为变量名,函数的request形参是固定写法不可修改,return的返回值也是固定写法
    @pytest.fixture(params=({"username": "aaa", "password": 111}, {"username": "bbb", "password": 222}))
    def login_data(request):
        return request.param
    
    
    @pytest.fixture(params=["xxs://xxx.com", "dds://ddd.com"])
    def env_data(request):
        return request.param
    
    
    class TestLogin:
    
        # parametrize参数化时,需传入两个参数,第一个参数为变量名,第二个参数为参数化的值
        @pytest.mark.parametrize("data1", [{"username": "ccc", "password": 333}, {"username": "ddd", "password": 444}])
        @pytest.mark.parametrize("data2", ["var1", "var2"])
        def test_login_001(self, data1, data2):
            print("
    执行用例001")
            print(f"调用参数-{data1['username']}-{data1['password']}")
            print(f"调用参数-{data2}")
    
        # 调用被@pytest.fixture装饰的函数
        def test_login_002(self, login_data, env_data):
            print("
    执行用例002")
            print(f"调用参数-{login_data['username']}-{login_data['password']}")
            print(f"调用参数{env_data}")

    执行结果如下:

  • 相关阅读:
    代码重构~方法归子
    代码重构~代码注释
    VS2010安装帮助文档
    imagecreate()与imagecreatetruecolor()区别
    php cookie 和session详解
    horner's rule霍纳法则及综合除法
    php单引号和双引号的区别与用法
    php通过session判断用户是否登录
    php 产生验证码
    基于递归的整数幂的计算
  • 原文地址:https://www.cnblogs.com/testlearn/p/14722573.html
Copyright © 2020-2023  润新知