一、skip的用法
skip标签主要用与跳过执行,比如针对一个功能自动化测试脚本已经实现了,但是产品中此功能尚未实现,如果此时执行此用例,则没有什么意义,此时就可以通过skip将当前脚本标记为跳过,skip针对测试函数的用法如下,括号中的reason可以填写原因。
import pytest
@pytest.mark.skip(reason="功能尚未实现,待实现后再运行")
def test_func():
assert 1==1
执行结果如下,可以发现pytest并未执行当前脚本,而是把当前脚本标记为skip,并且在报告中显示为skip状态。
pytest
========================================================================= test session starts ==========================================================================
platform win32 -- Python 3.9.13, pytest-7.1.2, pluggy-1.0.0
rootdir: D:\redrose2100-book\ebooks\Pytest企业级应用实战\src
collected 1 item
test_demo.py s [100%]
========================================================================== 1 skipped in 0.01s ==========================================================================
在测试函数中使用装饰器跳过的时候整个测试函数都不会执行,在某一些情况下,测试函数内容比较多,希望在执行的过程中检测一些条件,如果条件不满足就跳过后面的测试代码,此时即需要在测试函数中使用skip来跳过测试函数的部分代码,如下测试代码,判断如果当前系统时windows系统,则停止执行,并跳过后面的测试代码并将当前脚本标记为skip状态。
import pytest
import platform
def test_func():
print("begin to test...")
if platform.system() == "Windows":
pytest.skip("不支持windows")
print("end of test")
在windows上执行结果如下,可以发现在判断条件之前的打印是执行了,当判断条件之后就停止执行并跳过后面的测试代码了,条件判断之后的打印并未执行,并且测试报告中梁当前脚本标记为skip状态。
pytest -s
========================================================================= test session starts ==========================================================================
platform win32 -- Python 3.9.13, pytest-7.1.2, pluggy-1.0.0
rootdir: D:\redrose2100-book\ebooks\Pytest企业级应用实战\src
collected 1 item
test_demo.py begin to test...
s
========================================================================== 1 skipped in 2.27s ==========================================================================
此外,在某些场景下,比如想在一定条件下,整个测试文件中的测试脚本全部跳过不执行,此时就可以采用如下的方式,即直接在测试文件中使用pytest.skip进行标记。
import sys
import pytest
if sys.platform.startswith("win"):
pytest.skip("不支持windows", allow_module_level=True)
def test_func1():
assert 1 == 1
def test_func2():
assert 1 == 1
def test_func3():
assert 1 == 1
执行结果如下,此时它并不会去识别当前用例中有多少个用例,而是直接全部跳过,在测试报告中也只是标记为skip状态。
pytest
========================================================================= test session starts ==========================================================================
platform win32 -- Python 3.9.13, pytest-7.1.2, pluggy-1.0.0
rootdir: D:\redrose2100-book\ebooks\Pytest企业级应用实战\src
collected 0 items / 1 skipped
========================================================================== 1 skipped in 2.10s ==========================================================================
当希望将一个类中的所有测试方法全部跳过,此时只需要在类上使用装饰进行skip标记即可,如下:
import pytest
@pytest.mark.skip
class TestDemo:
def test_func1(self):
assert 1==1
def test_func2(self):
assert 1==1
执行结果如下,此时会识别到一共有多少个用例未执行。
pytest
========================================================================= test session starts ==========================================================================
platform win32 -- Python 3.9.13, pytest-7.1.2, pluggy-1.0.0
rootdir: D:\redrose2100-book\ebooks\Pytest企业级应用实战\src
collected 2 items
test_demo.py ss [100%]
========================================================================== 2 skipped in 0.12s ==========================================================================
二、skipif的用法
skipif功能跟skip类似,都是对测试脚本做skip标记,然后不会执行,不同点是skipif可以直接设置跳过条件,当条件为真时,直接跳过,如下,可以直接在第一个参数中设置跳过条件。
import pytest
import platform
@pytest.mark.skipif(platform.system() == "Windows", reason="不支持window平台")
def test_func():
assert 1 == 1
执行结果如下.
pytest
========================================================================= test session starts ==========================================================================
platform win32 -- Python 3.9.13, pytest-7.1.2, pluggy-1.0.0
rootdir: D:\redrose2100-book\ebooks\Pytest企业级应用实战\src
collected 1 item
test_demo.py s [100%]
========================================================================== 1 skipped in 2.18s ==========================================================================
同样,对于一个类跳过类中的所有的测试方法时,直接在类上使用装饰器即可,代码如下,这里只演示skipif在类上的用法,不在一一执行了。
import pytest
import platform
@pytest.mark.skipif(platform.system()=="Windows",reason="不支持window平台")
class TestDemo():
def test_01(self):
assert 1==1
def test_02(self):
对于将一个测试文件中所有测试函数和测试方法都跳过时,只需要按照如下的方式使用即可
import pytest
import platform
pytestmark = pytest.mark.skipif(platform.system()=="Windows",reason="不支持window平台")
def test_01():
assert 1==1
def test_02():
assert 2==2