pytest.mark ########### @pytest.mark.skip/skipif 跳过测试 ================================= * @pytest.mark.skip 是一个用于在 pytest 测试框架中跳过某些测试用例或测试类的装饰器。其主要作用是临时禁用一些不需要运行的测试 常用于以下几种情况:: 1. 测试尚未完成或稳定 当某些测试用例还在开发中或者有已知问题暂时不能解决时,可以使用这个装饰器跳过它们,以便不会影响整体测试的运行。 2. 外部依赖不可用 如果某些测试依赖于外部资源(如数据库、网络服务)而这些资源暂时不可用,使用 @pytest.mark.skip 可以跳过这些测试,避免测试失败。 3. 条件性跳过 根据某些条件决定是否跳过测试,例如特定的平台或环境下运行时跳过某些测试 示例:: import pytest @pytest.mark.skip(reason="Test is under development") def test_example(): assert 1 == 1 # 条件性跳过测试 @pytest.mark.skipif(sys.platform == "win32", reason="does not run on windows") def test_example_on_non_windows(): assert 1 == 1 @pytest.mark.xfail 标记失败 =========================== * 使用@pytest.mark.xfail标记用例,表示期望这个用例执行失败。 * 标记后的用例会正常执行,只是失败时不再显示堆栈信息,最终的结果有两个:用例执行失败时(XFAIL:符合预期的失败)、用例执行成功时(XPASS:不符合预期的成功) * 结构:: pytest.mark.xfail(condition=None, *, reason=None, raises=None, run=True, strict=False) 参数: condition位置参数,默认值为None,表示只有满足条件时才标记用例; reason关键字参数,默认值为None,表示可以指定一个reason字符串,说明标记用例的原因; raises关键字参数,默认值为None 可以指定为一个异常类或者多个异常类的元组,表示我们期望用例上报指定的异常; 如果用例的失败不是因为所期望的异常导致的,pytest将会把测试结果标记为FAILED; run关键字参数,默认值为True: 当run=False时,pytest不会再执行测试用例,直接将结果标记为XFAIL; strict关键字参数,默认值为False 当strict=False时,如果用例执行失败,结果标记为XFAIL,表示符合预期的失败;如果用例执行成功,结果标记为XPASS,表示不符合预期的成功; 当strict=True时,如果用例执行成功,结果将标记为FAILED; 示例:: import pytest @pytest.mark.xfail def test_example(): assert 1 == 2 @pytest.mark.asyncio ==================== * 参见: 插件-pytest-asyncio @pytest.mark.parametrize ======================== * allows you to run a test function multiple times with different sets of arguments. * This is especially useful for testing functions with multiple input scenarios in a concise and readable way. 示例:: def add(a, b): return a + b import pytest @pytest.mark.parametrize("a, b, expected", [ (1, 2, 3), (4, 5, 9), (-1, -2, -3), (0, 0, 0), ]) def test_add(a, b, expected): assert add(a, b) == expected """ 结果: normal/pytest/mark/test_mark_parametrize.py::test_add[1-2-3] PASSED normal/pytest/mark/test_mark_parametrize.py::test_add[4-5-9] PASSED normal/pytest/mark/test_mark_parametrize.py::test_add[-1--2--3] PASSED normal/pytest/mark/test_mark_parametrize.py::test_add[0-0-0] PASSED """