关于python的测试框架,目前比较流行的有unittest、pytest、nosetest。今天要讲的是pytest与unittest之间的比较。
unittest是python内嵌的测试框架,原名为PyUnit。unittest提供了test cases、test suites、test fixtures、test runner相关的类,让测试更加明确、方便、可控。使用unittest编写用例,必须遵守以下规则:
- 测试文件必须先import unittest
- 测试类必须继承unittest.TestCase
- 测试方法必须以“test_”开头
- 测试类必须要有unittest.main()方法
- 默认执行全部用例,也可以通过加载testsuit,执行部分用例
- 提供了setUp/tearDown,只能针对所有用例
- 参数化需依赖ddt库
- 断言方式多(assertEqual、assertIn、assertTrue、assertFalse)
- 报告使用使用HTMLTestRunner、beautiful report扩展库
pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。使用pytest编写用例,必须遵守以下规则:
- 测试文件名必须以“test_”开头或者结尾(如:test_ab.py)
- 测试类命名以"Test"开头
- 测试方法必须以“test_”开头
- 可以通过@pytest.mark来标记类和方法,pytest.main加入参数("-m")可以只运行标记的类和方法
- pytest中的fixture显然更加灵活。可以任意自定义方法函数,只要加上@pytest.fixture()这个装饰器,那么被装饰的方法就可以被使用
- 使用@pytest.mark.parametrize装饰器
- 只有assert一个表达式,用起来比较方便
- 报告有pytest-HTML、allure插件
- pytest支持用例执行失败重跑,pytest-rerunfailures插件
case文件:yaml(维护省心)、excel
总结:unittest用例格式复杂,兼容性无,插件少,二次开发方便。pytest更加方便快捷,用例格式简单,可以执行unittest风格的测试用例,无须修改unittest用例的任何代码,有较好的兼容性。pytest插件丰富,比如flask插件,可用于用例出错重跑,还有xdist插件,可用于设备并行执行,效率更高。