CSDN博客地址

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个用例的执行所消耗的时间

 

posted @ 2020-09-05 21:23  Yi_warmth  阅读(161)  评论(0编辑  收藏  举报
CSDN博客地址