本文主要是介绍如何选择Python测试框架:pytest和unittest,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
unittest
unittest是Python标准库中自带的测试框架,它遵循了xUnit风格,即将测试组织成类和方法。
使用unittest需要遵循一定规则:
- 必须要有测试类,且必须继承
unittest.TestCase
- 测试方法必须以
test
开头 - 文件模块也使用
test
开头命名
其优点有:
- 兼容性好:不需要安装任何额外的包,可以在任何Python环境中使用;
- 结构化清晰:将测试分为三个阶段:setUp,test和tearDown,这样可以方便地设置和清理测试环境,以及管理测试依赖;
在python3.1版本后也增加了支持:跳过测试与预计的失败(Skipping tests and expected failures),例如:unittest.skip
、unittest.skipIf
、unittest.expectedFailure
通过执行python -m unittest
运行测试用例。
具体使用说明详见 官网文档
pytest
pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点(详见 官网文档):
-
- 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
-
- 能够支持简单的单元测试和复杂的功能测试
- 支持使用assert语句来检查结果,而不需要使用特定的断言方法
-
- 支持参数化
-
- 执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败
- 这点在python3.1版本开始,unittest也支持了测试跳过
-
- 支持重复执行失败的case
-
- 支持运行由nose, unittest编写的测试case
- 关于兼容unittest可以详见
-
- 具有很多第三方插件,并且可以自定义扩展
- 可选插件列表,社区非常活跃
-
- 方便持续集成
- pytest+allure+jenkins进行接口测试、生成测试报告、结合jenkins进行集成
个人在项目使用过程中,觉得好用的一些功能有:
- 不用定义类,直接定义
test
方法、直接使用assert
进行断言判断; - 能
兼容unittest的测试用例
; - 参数化
@pytest.mark.parametrize
,在同一个测试函数上,运行不同的输入参数; @pytest.fixture
可以定义全局变量,用于作为测试用例的测试输入参数;- 有很多扩展插件可以使用
pytest-cov
测试覆盖度pytest-xdist
并行运行测试用例pytest-ordering
设定执行顺序pytest-rerunfailures
失败重试pytest-django
Django相关
综上所述
pytest和unittest都有各自的优势和劣势。
在常规项目中,个人推荐使用pytest,毕竟pytest是一个简单易用且功能强大的测试框架。
如果你想要一个稳定兼容且结构化清晰的测试框架,你可以选择unittest。
无论你选择哪个框架,测试的目的是保证代码质量和可维护性,测试框架只是手段之一。
这篇关于如何选择Python测试框架:pytest和unittest的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!