第十种:Unittest和Pytest的区别
2026/7/9 15:34:08 网站建设 项目流程

一.用例编写规则

1.Unittest提供test cases、test suites、test fixtures、test runner相关的类,让测试更加明确、方便、可控
1.1.使用Unittest编写用例,必须遵守以下规则
1.1.1.测试文件必须先importunittest1.1.2.测试类必须继承unittest.TestCase1.1.3.测试方法必须以“test_”开头1.1.4.测试类必须要有unittest.main()方法
2.Pytest是Python的第三方测试框架,是基于Unittest的扩展框架,比Unittest更简洁,更高效
2.1.使用Pytest编写用例,必须遵守以下规则
2.1.1.测试文件名必须以“test_”开头或者"_test"结尾(:test_ab.py)2.1.2.测试方法必须以“test_”开头2.1.3.测试类命名以"Test"开头
3.总结
3.1.Pytest可以执Unittest风格的测试用例,无须修改Unittest用例的任何代码,有较好的兼容性3.2.Pytest插件丰富,比如flask插件,可用于用例出错重跑;还有xdist插件,可用于设备并行执行

二.用例前置和后置

1.Unittest提供setUp/tearDown,只能针对所有用例
2.Pytest提供模块级、函数级、类级、方法级的setup/teardown,比Unittest的setUp/tearDown更灵活
2.1.模块级(setup_module/teardown_module)开始于模块始末,全局的2.2.函数级(setup_function/teardown_function)只对函数用例生效(不在类中)2.3.类级(setup_class/teardown_class)只在类中前后运行一次(在类中)2.4.方法级(setup_method/teardown_method)开始于方法始末(在类中)2.5.类里面的(setup/teardown)运行在调用方法的前后
3.Pytest还可以在函数前加@pytest.fixture()装饰器 ,在测试用例中装在fixture函数3.1.fixture的使用范围可以是function,module,class,session
3.2.firture相对于setup和teardown来说有以下几点优势
3.2.1.命名方式灵活,不局限于setup和teardown这几个命名3.2.2.conftest.py配置里可以实现数据共享,不需要import就能自动找到一些配置,可供多个py文件调用3.2.3.scope="module"可以实现多个.py跨文件共享前置3.2.4.scope="session"以实现多个.py跨文件使用一个session来完成多个用例3.2.5.yield来唤醒teardown的执行

三.断言

1.Unittest提供assertEqual、assertIn、assertTrue、assertFalse2.Pytest直接使用assert表达式

四.报告

1.Unittest使用HTMLTestRunnerNew库2.Pytest有pytest-HTML、allure插件

五.失败重跑

1.Unittest无此功能2.Pytest支持用例执行失败重跑,pytest-rerunfailures插件

六.参数化

1.Unittest需依赖ddt库2.Pytest直接使用@pytest.mark.parametrize装饰器

七.用例分类执行

1.Unittest默认执行全部用例,也可以通过加载testsuit,执行部分用例2.Pytest可以通过@pytest.mark来标记类和方法,pytest.main加入参数("-m")可以只运行标记的类和方法

八.如果不好看,可以看下面表格

九.总结

1.Unittest用例格式复杂,兼容性无,插件少,二次开发方便2.Pytest更加方便快捷,用例格式简单,可以执行Unittest风格的测试用例,无须修改Unittest用例的任何代码有较好的兼容性3.Pytest插件丰富,比如flask插件,可用于用例出错重跑,还有xdist插件,可用于设备并行执行,效率更高

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询