pytest为第三方单元测试库,需额外安装;unittest为标准库,无需额外安装。其余不同可以分成用例管理,参数化,断言对比,报告4个方面来总结。
目录
一、用例管理
-
标记testCase的方法
unittest pytest 测试类必须继承unittest.TestCase 测试类命名以"Test"开头,但是无需继承,用例可以是函数,也可以是类 测试方法必须以“test_”开头 测试方法必须以“test_”开头 测试类必须要有unittest.main()方法 测试文件名必须以“test_”开头或者"_test"结尾(如:test_ab.py) -
用例的前置和后置条件处理
unittest pytest unittest提供了setUp/tearDown,每个用例运行前、结束后运行一次。setUpClass和tearDownClass,用例执行前、结束后,只运行一次 pytest提供了模块级、函数级、类极、方法级的setup/teardown,比unittest的setup/tearDown更灵活 -
用例分类
unittest pytest unittest默认执行全部用例,也可以通过加载testsuit,执行部分用例 pytest可以通过@pytest.mark来标记类和方法,pytest.main加入参数("-m")可以只运行标记的类和方法 -
用例可否失败重试
unittest pytest unittest无此功能 pytest支持用例执行失败重跑,pytest-rerunfailures插件 pip install pytest-rerunfailures
-
兼容性
pytest可以执行unittest风格的测试用例,无须修改unittest用例的任何代码,有较好的兼容性
-
二、参数化
-
unittest pytest unittest需依赖ddt库 pytest直接使用@pytest.mark.parametrize装饰器 三、断言对比
unittest pytest unittest提供了assertEqual、assertIn、assertTrue、assertFalse pytest直接使用assert 表达式 四、生成报告的方式
unittest pytest unittest使用HTMLTestRunnerNew库 pytest有pytest-HTML、allure插件