zoukankan      html  css  js  c++  java
  • 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}")

    执行结果如下:

  • 相关阅读:
    问题记录之spring-mvc.xml配置文件报错
    问题记录之用poi生成图片并插入到word时,图片中的中文显示不出来
    问题记录之每次打开vmware的时候都会跳出xftp的安装程序问题解决
    DataTable和List之间互转
    .NET[C#]中实现实体对象深拷贝(克隆/复制)的几种方法
    SQL Server表分区详解(转)
    vs2017使用GitHub插件发布项目到github
    jquery autocomplete 在IE11中出现打开网页输入框有默认值时下拉列表是已经打开的状态解决
    MVC DropDownLis 二级联动实现
    sql 查询某个表在哪些存储过程(SP)中使用到
  • 原文地址:https://www.cnblogs.com/testlearn/p/14722573.html
Copyright © 2011-2022 走看看