Pytest & 实用工具
Pytest & 实用工具
前提
Pytest 是一个功能强大且灵活的 Python 测试框架,广泛用于单元测试、功能测试以及自动化测试。它以简洁的语法和丰富的插件生态系统著称,能够满足从简单到复杂的测试需求。
pytest 的设计思想,围绕测试用例(测试函数)的发现、执行、管理和报告展开,其灵活性和可扩展性也主要服务于测试用例(测试函数)的高效编写和维护。
务必阅读pytest 文档,了解其使用方法。
超时标记
第三方插件 @pytest.mark.timeout 是一个比较好用的工具,可以捕捉过长的测试时间,在测试用例耗时太长时终止它并标记为 FAILED。我们可以用它测试用例的执行时间以及防止长时间被挂起。读者可以阅读pytest-timeout 2.3.1了解使用方法。
该插件在 Windows 平台上失效,我针对 Windows 平台,编写了简单的超时装饰器。
common/timeout.py
|
|
使用方法:
test_mark_decorator.py
|
|
除此之外,还可以查阅pytest插件列表,有很多有用的插件。
文件数据参数化
测试数据硬编码无疑是一个不聪明的行为,测试数据需要在文件中管理。我们来实现一下。
无论使用什么格式文件管理测试数据,只需要根据对应格式文件进行数据预处理,最终再传递给 pytest 的参数化标记器。如:@pytest.mark.parametrize("n,n1,n2", [(1, 2, 3), (3, 4, 5), (5, 6, 7)])。
规范文件数据结构
n1,n2,n3,mark
1,2,3.01,user-smoke
2,3,4.01,smoke
2,3,5.01,预期结果:参数化数据为 ("n1,n2,n3", [(1, 2, 3.01), (2,3,4.01), (2,3,5.01)]);(1,2,3.01) 被标记为 user 和 smoke,(2,3,4.01) 被标记为 smoke。
实现装饰器
common/parametrize.py
|
|
使用装饰器
依赖 pandas 的能力,可以自动识别数字的类型,还可以指定列的类型。
cases/test_par.py
|
|
最后更新于