16:pytest的marker机制

04-13pytest的基本使用方法

引言

1 我们有100个case的时候,有时候需要执行其中的20个,有时间需要执行其中的30个。

在pytest中有什么好的办法呢?

有人说我用LoadTestCase(),指定类加载

有人说,我用跳过,unittest.skip()

有人说我重写一个suite函数,再准备几个场景的用例组合

还有没有其他更方便的办法?

正文:

代码文件

./conftest.py

def pytest_configure(config):
    marker_list = ["isneed","isnotneed","testmark3"]  # 标签名集合
    for markers in marker_list:
        config.addinivalue_line(
        "markers", markers
)

./test_markers.py

import pytest

@pytest.mark.isneed
def test_case1():
    print(__name__)
    assert True ,"makers OK "

@pytest.mark.isnotneed
def test_case2():
    print(__name__)
    assert True,"maekrs Not Ok"
运行结果如下:
(testops) >pytest test_markers.py -q  -v -m isneed -s
========================================================================= test session starts ==========================================================================
platform win32 -- Python 3.7.1, pytest-5.2.2, py-1.8.0, pluggy-0.13.0
rootdir: D:\Coding\Project\testops\Stage5\07pytest\marker
plugins: html-2.0.0, metadata-1.8.0
collected 2 items / 1 deselected / 1 selected                                                                                                                           

test_markers.py::test_case1 marker.test_markers
PASSED

=================================================================== 1 passed, 1 deselected in 0.01s ====================================================================

从运行结果来看,我们只运行了test_case1,还有要给test_case2没有运行,这说明marker的筛选机制起作用了。

另外在conftest.py需要提前进行marker的声明。config.addinivalue_line 就是在执行这个声明的操作。

总结:

1 marker是pytest里面的测试用例筛选工具

2 多个标签的声明使用conftest.py 在其中进行config.addinivalue_line。

思考与延伸

1 标记改造和迭代怎么使用?

2 是不是可以给那些不确定是否要执行的case加上标签,以后不需要执行的时候就带上标签。

上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 帮助IT小伙伴学到真正的技术