您的位置:

pytest -k: 更快更方便的测试用例选择

一、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 是一款功能强大的测试用例选择工具。