Python测试框架pytest高阶用法全面详解
本文将详细讲解Python测试框架pytest的高阶用法,并提供两个示例说明:
- 测试用例的自定义标记及执行
- 测试用例的参数化
1. 测试用例的自定义标记及执行
在pytest中,我们可以为测试用例添加自定义标记,以便在测试用例执行时控制用例的执行顺序、分组执行,或执行特定标记的测试用例等操作。下面是一个使用pytest自定义标记控制测试用例执行的示例:
# test_example.py
import pytest
@pytest.mark.smoke
def test_hello_world():
assert "hello" + " " + "world" == "hello world"
@pytest.mark.regression
def test_addition():
assert 1 + 1 == 2
@pytest.mark.regression
class TestMath:
def test_subtraction(self):
assert 2 - 1 == 1
def test_multiplication(self):
assert 2 * 2 == 4
上述示例中,我们为三个测试用例分别添加了自定义标记@pytest.mark.smoke
和@pytest.mark.regression
。我们可以使用以下命令执行使用特定标记的测试用例:
$ pytest -m smoke test_example.py # 执行所有标记为smoke的测试用例
$ pytest -m "regression and not smoke" test_example.py # 执行所有标记为regression且未标记为smoke的测试用例
$ pytest -m "regression or smoke" test_example.py # 执行所有标记为regression或smoke的测试用例
2. 测试用例的参数化
在pytest中,我们可以使用参数化将一组测试数据应用于测试用例中。以下是一个使用pytest参数化测试用例的示例:
# test_example.py
import pytest
@pytest.mark.parametrize("test_input, expected_output", [
(1, 2),
(2, 3),
(3, 4),
])
def test_increment(test_input, expected_output):
assert test_input + 1 == expected_output
上述示例中,我们使用@pytest.mark.parametrize
装饰器将三个元组应用于test_increment
测试用例。当执行此测试用例时,pytest将会自动将每个元组中的测试输入参数和期望输出参数应用于测试用例,共执行三次测试。执行结果如下:
$ pytest test_example.py
======================== test session starts ========================
platform linux -- Python 3.6.9, pytest-5.4.3, py-1.8.2, pluggy-0.13.1
rootdir: /home/user/example
collected 3 items
test_example.py ... [100%]
========================= 3 passed in 0.01s =========================
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python测试框架pytest高阶用法全面详解 - Python技术站