pytest用例标记和测试执行篇上一篇文章入门篇咱们介绍了pytest的前后置方法和fixture机制,这个章节主要给大家介绍pytest中的标记机制和用例执行的方法。pytest可以通过标记将数据传入于测试函数中,也可以通过标记中对执行的用例做筛选,接下来直接进入正题。 一、pytest中内置的标记pytest标记使用需要通过 1.1、pytest.mark.parametrize:用例参数化的标记通过
@pytest.mark.parametrize('item',[11,22,33,44,55,66]) def test_demo(item) assert item > 50 1.2、pytest.mark.skip:跳过用例执行通过 参数reason:跳过测试函数的原因。
# 不写跳过原因 @pytest.mark.skip def test_demo() assert item > 50 # 写跳过原因 @pytest.mark.skip(reason='不需要执行') def test_demo() assert item > 50 1.3、pytest.mark.skipif:根据条件跳过用例
参数 :condition —跳过的条件 参数 : reason —跳过的原因
a = 10 @pytest.mark.skipif(a > 20,reason='条件不成立,不执行') def test_demo() assert item > 50 1.4、pytest.mark.xfail:标记预期失败的用例
参数 :condition — 将测试函数标记为 xfail 的条件( 参数 : reason — 测试函数被标记为 xfail 的原因 参数 : raises — 预期失败的异常类型 参数 : run — 是否应该实际执行测试函数。如果 参数 : strict — 严格模式(
a = 10 @pytest.mark.xfail(a > 20,reason='条件不成立,不执行' raises=AssertionError ) def test_demo() assert item > 50 1.5、pytest.mark.usefixtures:给测试类或模块设置测试夹具
# TestDome这个测试类的所有测试用例均执行my_fixture这个夹具 @pytest.mark.usefixtures('my_fixture这个夹具') class TestDome: # 函数用例 指定测试夹具 def test_02(self): print('----测试用例:test_01------') # 函数用例 指定测试夹具 def test_03(self): print('----测试用例:test_02------') 二、自定义标记pytest支持通过pytest.ini文件注册自定义的标记。以满足执行用例时,通过标记对用例进行筛选., 2.1、注册标记
[pytest] markers = 标记1 标记2 2.2、标记函数
# 用例前面加载标签:@pytest.mark.标签名 @pytest.mark.main def test_demo(): pass 2.3、标记类
# 方式一:直接类上面打标记 @pytest.mark.main class TestClass(object): def test_demo1(self): assert 10 > 20 # 方式二:通过类属性pytestmark,可以同时添加多个标记 class TestClass(object): pytestmark = [pytest.mark.main, pytest.mark.main] def test_demo1(self): assert 10 > 20 三、通过标记筛选用例执行
import pytest @pytest.mark.yuze @pytest.mark.musen def test_01(): print("用例一") def test_02(): print("用例二") @pytest.mark.musen def test_03(): print("用例三") @pytest.mark.musen def test_04(): print("用例四") @pytest.mark.yuze def test_05(): print("用例五") @pytest.mark.yuze def test_06(): print("用例六") 上面Demo中有6条测试用例,分别通过 3.1、通过单个标记筛选
执行结果如下: ========================== test session starts ========================== platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0 rootdir: C:\project\, inifile: pytest.ini plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2 collected 6 items / 3 deselected / 3 selected test_mode.py ... [100%] ========================== 3 passed, 3 deselected in 0.29s ========================== 可以看到执行结果执行了3条用例,3条未选中。 3.2、同时选中多个标记
命令: 执行通过musen或者yuze 标记的的用例。执行结果如下: ========================== test session starts ========================== platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0 rootdir: C:\project\, inifile: pytest.ini plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2 collected 6 items / 1 deselected / 5 selected test_mode.py ..... [100%] ========================== 5 passed, 1 deselected in 0.29s ========================== 从上述结果可以看到,只要加了musen或yuze这两个标记中的任意一个
命令: 执行通过musen和yuze这两个标记同时标记的用例。执行结果如下 ========================== test session starts ========================== platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0 rootdir: C:\project\, inifile: pytest.ini plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2 collected 6 items / 5 deselected / 1 selected test_mode.py . [100%] ========================== 1 passed, 5 deselected in 0.29s ========================== |
|
来自: wenxuefeng360 > 《待分类1》