软件测试 | Pytest 参数化与基本装饰器用法
更多软件测试学习资料戳
Pytest 是一个功能强大的 Python 测试框架,广泛用于编写和执行测试用例。Pytest 提供了丰富的功能,包括参数化测试和使用装饰器管理测试行为。本文将介绍如何在 Pytest 中使用参数化以及基本装饰器的用法。
参数化测试
参数化测试允许我们使用不同的输入数据运行相同的测试函数,从而避免代码重复,提高测试覆盖率。Pytest 通过 @pytest.mark.parametrize
装饰器实现参数化测试。
基本用法
@pytest.mark.parametrize
装饰器接收两个参数:
参数名(作为字符串,以逗号分隔)
参数值(作为列表)
以下是一个简单的示例:
在这个示例中,test_add
函数使用了 @pytest.mark.parametrize
装饰器,分别用四组不同的参数运行测试。
参数组合
Pytest 也支持对参数进行组合。假设我们有两个参数列表,我们希望测试所有可能的参数组合,可以这样做:
这将会运行四次测试,分别是:
x=1, y=10
x=1, y=20
x=2, y=10
x=2, y=20
基本装饰器用法
Pytest 提供了一些常用的装饰器来管理测试函数的行为,例如设置预置条件、清理操作等。
@pytest.fixture
@pytest.fixture
装饰器用于定义测试前后的初始化代码(fixture)。fixture 是一种资源管理方式,用于在测试函数运行之前准备好需要的资源,并在测试函数结束之后清理这些资源。
在这个示例中,sample_data
是一个 fixture,它返回一个字典。测试函数 test_sample_data
可以直接使用这个 fixture 提供的数据。
@pytest.mark.skip
@pytest.mark.skip
装饰器用于跳过某些测试。这在某些情况下非常有用,例如在特定条件下不适用的测试。
@pytest.mark.skipif
@pytest.mark.skipif
装饰器用于在满足特定条件时跳过测试。例如,只有在 Python 版本低于 3.6 时才跳过某个测试:
@pytest.mark.xfail
@pytest.mark.xfail
装饰器用于标记已知会失败的测试。它在测试预期失败时不会被视为错误。
结论
Pytest 的参数化和基本装饰器用法为编写灵活、高效的测试提供了强大的支持。通过参数化测试,我们可以轻松地用不同的数据集运行相同的测试函数。而通过装饰器,我们可以更好地管理测试的执行条件和环境。
熟练掌握这些功能,可以显著提高测试代码的质量和可维护性。在实际项目中,这些技术将帮助你更高效地进行测试和确保代码的可靠性。
![](https://static001.geekbang.org/infoq/81/81058d69400261a178652d40d2fc4ef3.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
评论