9.6. pytest中mark标记

9.6.1. 指定用例测试执行实现冒烟测试

在测试过程中,可能出现业务场景,指定某个文件的某几条测试用例进行测试 这个时候我们就可以使用@pytest.mark.xxx(xxx可以自行定义),比如以下代码:

import pytest

@pytest.mark.lvjj
def test_1():
    pass

@pytest.mark.lvjj
def test_2():
    pass

def test_3():
    pass


if __name__ == "__main__":
    pytest.main(["-s", "test_server.py", "-m=lvjj"])

如果我们只想只想@pytest.mark.lvjj中的测试用例,我们在只想命令函数的时候就使用:

pytest -v -m lvjj

如果我们想只想除了@pytest.mark.lvjj以外的其他测试用例:

import pytest

@pytest.mark.lvjj
def test_1():
    pass

@pytest.mark.lvjj
def test_2():
    pass

def test_3():
    pass


if __name__ == "__main__":
    pytest.main(["-s", "test_server.py", "-m=not lvjj"])

或者执行命令:

pytest -v -m "not lvjj"

在这里我们通常会标记冒烟测试用例,如:@pytest.mark.smoke,这样就能实现pytest的冒烟测试了

9.6.2. 跳过测试用例

pytest自身内置了一些标记,如:skip、skipif、xfail。

9.6.2.1. skip

对于那些尚未开发完成的测试用例,最好的处理方式就是略过而不执行测试,这个时候,skip就可以发挥作用了:

import pytest

@pytest.mark.skip(reason="跳过原因")
def test_1():
    assert 1==2

该条测试用例不会被真正执行,测试用例状态为:SKIPPED

所以,要跳过某个测试,只需要简单地在测试函数上方添加epytest.mark.skip()装饰器即可。

9.6.2.2. skipif

我们可以给跳过测试用例加上一些条件,当条件满足时,测试用例才会被掉过,这里就需要用到skipif了:

import pytest

A = 1


@pytest.mark.skipif(A == 1, reason='测试skipif')
def test_1():
    assert 1 == 1


@pytest.mark.skipif(A == 2, reason='测试skipif')
def test_2():
    assert 1 == 1


if __name__ == '__main__':
    pytest.main()

9.6.2.3. xfail

在使用pytest时,有些用例我们预计他可能会失败,这个时候就需要使用xfail了,当测试用例失败时,会被跳过,不会影响继续执行测试用例:

import pytest


@pytest.mark.xfail()
def test_1():
    assert 1 == 2


@pytest.mark.xfail()
def test_2():
    assert 1 == 1


if __name__ == '__main__':
    pytest.main()