一、pytest概述
pytest 是一个流行的 Python 测试框架,其具有易于使用,简化测试编写和扩展性强的优点。pytest 使用了 Python 自带的 assert 语句,帮助开发者编写简单的测试用例,同时它还提供了众多的插件,可以扩展 pytest 的功能。
二、测试用例选择
测试执行速度是一个很重要的问题,特别是当测试用例数量很多的时候。然而,测试用例选择很可能成为性能瓶颈,因为所有未被选择的测试用例仍需调用 setUp 和 tearDown 方法。pytest -k 选项提供了一个简便快捷的方式,可以按照名称对基础测试用例进行选择。
三、pytest -k 用法
pytest -k 选项可以按照测试用例名称对测试套件进行选择。具体来说,这个选项可以通过以下方式来使用:
pytest -k "expression"
其中,"expression" 是可以通过 Python 语言进行编写的字符串,它可以包含 Python 运算符和函数的调用,且对大小写敏感。pytest -k 选项会匹配用例名称中的 "expression" 子串,从而执行与匹配项相关的测试用例。
例如,如果我们有以下测试用例:
def test_add(): assert 1+1 == 2 def test_subtract(): assert 2-1 == 1 def test_divide(): assert 4/2 == 2
可以通过以下命令行语句来执行单元测试:
pytest -v test_sample.py
结果如下:
test_sample.py::test_add PASSED test_sample.py::test_subtract PASSED test_sample.py::test_divide PASSED
如果我们只想运行包含 add 的测试用例,在命令行中使用 -k 参数:
pytest -v -k "add" test_sample.py
结果如下:
test_sample.py::test_add PASSED
通过这种方式,我们可以迅速、有效的选择和执行特定的测试用例,从而帮助我们更快的了解测试用例的运行结果。
四、pytest -k 高级用法
在 pytest 中,-k 参数不仅仅可以用单个测试用例名称进行匹配,还支持使用 Pyhon 表达式进行匹配。匹配表达式的格式为:"
pytest -k "expression"
这里的表达式可以是任意合法的 Python 表达式,包括运算符、函数调用等。pytest -k 会按照表达式的规则对测试用例进行匹配。
例如,我们有以下三个测试用例:
def test_add(): assert 1+1 == 2 def test_subtract(): assert 2-1 == 1 @mark.parametrize("x, y, expected", [(3, 2, 5), (1, 2, 3)]) def test_add_param(x, y, expected): assert x + y == expected
现在我们想运行包含 “add” 单词或参数数量大于等于3的用例。在命令行中使用 -k 参数:
pytest -v -k "add or len(parametrize.args)>=3" test_sample.py
结果如下:
test_sample.py::test_add PASSED test_sample.py::test_add_param[3-2-5] PASSED
以上方式体现了 pytests 的扩展性和灵活性。开发者可以根据具体需要自由组合和匹配测试用例,以便快速运行测试。
五、pytest -k 的其他应用
除了按名称和表达式对用例进行选择和过滤外,pytest -k 还可以用于:按类选择,设置自定义标记(marker)过滤和更多自定义实现。
例如,我们有一个包含了两个测试类的测试套件:
class TestMath: def test_add(self): assert 1 + 1 == 2 class TestStat: def test_mean(self): assert sum([1, 2, 3]) / 3 == 2.0
我们可以通过以下命令来选择 TestMath 类中的测试用例:
pytest -v -k "TestMath" test_sample.py
结果如下:
test_sample.py::TestMath::test_add PASSED
除此之外,pytest -k 参数还可以用于支持一系列其他过滤操作,例如限制测试运行时间、错误报告等。因此,可以说 pytest -k 是一款功能强大的测试用例选择工具。