Pytest高阶用法

Pytest高阶用法

    前置条件:
        1.文件路径:
            - Test_App
            - - test_abc.py
            - - pytest.ini
        2.pyetst.ini配置文件内容:
            [pytest]
            # 命令行参数
            addopts = -s
            # 搜索文件名
            python_files = test_*.py
            # 搜索的类名
            python_classes = Test_*
            # 搜索的函数名
            python_functions = test_*
  • 1.跳过测试函数
      根据特定的条件,不执行标识的测试函数.
    
    方法:
        skipif(condition, reason=None)
    参数:
        condition:跳过的条件,必传参数
        reason:标注原因,必传参数
    使用方法:
        @pytest.mark.skipif(condition, reason="xxx")
    示例:
        import pytest
        class Test_ABC:
            def setup_class(self):
                print("------->setup_class")
            def teardown_class(self):
                print("------->teardown_class")
            def test_a(self):
                print("------->test_a")
                assert 1
            @pytest.mark.skipif(condition=2>1,reason = "跳过该函数") # 跳过测试函数test_b
            def test_b(self):
                print("------->test_b")
                assert 0
    执行结果:
        test_abc.py 
        ------->setup_class
        ------->test_a #只执行了函数test_a
        .
        ------->teardown_class
        s # 跳过函数

2.标记为预期失败函数

    标记测试函数为失败函数
    方法:
        xfail(condition=None, reason=None, raises=None, run=True, strict=False)
    常用参数:
        condition:预期失败的条件,必传参数
        reason:失败的原因,必传参数
    使用方法:
        @pytest.mark.xfail(condition, reason="xx")
    示例:
        import pytest
        class Test_ABC:
            def setup_class(self):
                print("------->setup_class")
            def teardown_class(self):
                print("------->teardown_class")
            def test_a(self):
                print("------->test_a")
                assert 1
            @pytest.mark.xfail(2 > 1, reason="标注为预期失败") # 标记为预期失败函数test_b
            def test_b(self):
                print("------->test_b")
                assert 0
    执行结果:
        test_abc.py 
        ------->setup_class
        ------->test_a
        .
        ------->test_b
        ------->teardown_class
        x  # 失败标记

3.函数数据参数化

    方便测试函数对测试属于的获取。
    方法:
        parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
    常用参数:
        argnames:参数名
        argvalues:参数对应值,类型必须为list
                    当参数为一个时格式:[value]
                    当参数个数大于一个时,格式为:[(param_value1,param_value2.....),(param_value1,param_value2.....)]
    使用方法:
        @pytest.mark.parametrize(argnames,argvalues)
        ⚠️ 参数值为N个,测试方法就会运行N次
    单个参数示例:
        import pytest
        class Test_ABC:
            def setup_class(self):
                print("------->setup_class")
            def teardown_class(self):
                print("------->teardown_class")

            @pytest.mark.parametrize("a",[3,6]) # a参数被赋予两个值,函数会运行两遍
            def test_a(self,a): # 参数必须和parametrize里面的参数一致
                print("test data:a=%d"%a)
                assert a%3 == 0
    执行结果:
        test_abc.py 
        ------->setup_class
        test data:a=3 # 运行第一次取值a=3
        .
        test data:a=6 # 运行第二次取值a=6
        . 
        ------->teardown_class
    多个参数示例:
        import pytest
        class Test_ABC:
            def setup_class(self):
                print("------->setup_class")
            def teardown_class(self):
                print("------->teardown_class")

            @pytest.mark.parametrize(("a,b"),[(1,2),(0,3)]) # 参数a,b均被赋予两个值,函数会运行两遍
            def test_a(self,a,b): # 参数必须和parametrize里面的参数一致
                print("test data:a=%d,b=%d"%(a,b))
                assert a+b == 3
    执行结果:
        test_abc.py 
        ------->setup_class
        test data:a=1,b=2 # 运行第一次取值 a=1,b=2
        .
        test data:a=0,b=3 # 运行第二次取值 a=0,b=3
        .
        ------->teardown_class
    函数返回值类型示例:
        import pytest
        def return_test_data():
            return [(1,2),(0,3)]
        class Test_ABC:
            def setup_class(self):
                print("------->setup_class")
            def teardown_class(self):
                print("------->teardown_class")

            @pytest.mark.parametrize(("a,b"),return_test_data()) # 使用函数返回值的形式传入参数值
            def test_a(self,a,b):
                print("test data:a=%d,b=%d"%(a,b))
                assert a+b == 3
    执行结果:
        test_abc.py 
        ------->setup_class
        test data:a=1,b=2 # 运行第一次取值 a=1,b=2
        .
        test data:a=0,b=3 # 运行第二次取值 a=0,b=3
        .
        ------->teardown_class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值