zoukankan      html  css  js  c++  java
  • pytest测试框进阶(二)

    一:跳过测试函数

    根据特定的条件,不执行标识的测试函数.
     方法:
         skipif(condition, reason=None)
     参数:
         condition:跳过的条件,必传参数
         reason:标注原因,必传参数
     使用方法:
         @pytest.mark.skipif(condition, reason="原因")

    import pytest
    
    class Test_ABC:
        def setup_class(self):
            print("----->setup_class")
        def teardown_class(self):
            print("----->teardowb_class")
        def test_a(self):
            print("-------->test_a")
            assert 1
        @pytest.mark.skipif(condition=2>1, reason = "跳过该函数")
        def test_b(self):
            print("----->test_b")
            assert 0

    执行结果:

    test_one.py ----->setup_class
    -------->test_a
    .----->teardowb_class


    二:标记为预期失败函数

    方法:

    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("----->teardowb_class")
        def test_a(self):
            print("-------->test_a")
            assert 1
        @pytest.mark.xfail(2>1, reason="标注为预期失败")
        def test_c(self):
            print("------->test_c")
            assert 0

    执行结果:

    test_one.py ----->setup_class
    -------->test_a
    .------->test_c
    ----->teardowb_class

    三:函数数据参数化

    方便测试函数对测试属于的获取。
     方法:
         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("----->teardowb_class")
        def test_a(self):
            print("-------->test_a")
            assert 1
        @pytest.mark.parametrize("a", [3, 6])
        def test_d(self, a):
            print(f"test data:a={a}")
            assert a % 3 == 0

    多个参数

    import pytest
    
    class Test_ABC:
        def setup_class(self):
            print("----->setup_class")
        def teardown_class(self):
            print("----->teardowb_class")
        def test_a(self):
            print("-------->test_a")
            assert 1
    
        @pytest.mark.parametrize("b,c", [(1, 2),(0,3)])
        def test_e(self, b, c):
            print(f"test data:b={b}, c={c}")
            assert b+c == 3

    函数返回值方式

    import pytest
    
    def create_data():
        return [(1, 2), (0, 3)]
    
    class Test_ABC:
        def setup_class(self):
            print("----->setup_class")
        def teardown_class(self):
            print("----->teardowb_class")
        def test_a(self):
            print("-------->test_a")
            assert 1
    
        @pytest.mark.parametrize("b,c", create_data())
        def test_e(self, b, c):
            print(f"test data:b={b}, c={c}")
            assert b+c == 3

    四:执行失败的时候跳转到PDB

    执行用例的时候,跟参数 --pdbm这样遇到失败的时候就会自动跳转pdb

    pytest --pdb       #每次遇到失败都跳转到pdb

    pytest -x --pdb   # 第一遇到失败就跳转到pdb,结束测试执行

    pytest --pdb --maxfail=3   # 只有前三次失败跳转到pdb

    五:设置断点

    在用例中加入如下python代码,pytest会自动关闭输出的抓取,其他测试脚本不会受到影响

    import pdb ; pdb.set_trace()

    六:获取用例执行性能数据

    pytest --durations=10  # 获取最慢10个用例的执行所消耗的时间

  • 相关阅读:
    MySQL数据库详解(二)执行SQL更新时,其底层经历了哪些操作?
    MySQL数据库详解(一)执行SQL查询语句时,其底层到底经历了什么?
    网页静态化解决方案Freemarker
    好久没来看看了~
    springmvc(五) 数据回显与自定义异常处理器
    springmvc(四) springmvc的数据校验的实现
    springmvc(三) 参数绑定、
    springmvc(二) ssm框架整合的各种配置
    springmvc(一) springmvc框架原理分析和简单入门程序
    cursor:pointer 什么意思?
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/13619773.html
Copyright © 2011-2022 走看看