第十种:Unittest和Pytest的区别

第十种:Unittest和Pytest的区别 一.用例编写规则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,session3.2.firture相对于setup和teardown来说有以下几点优势3.2.1.命名方式灵活不局限于setup和teardown这几个命名3.2.2.conftest.py配置里可以实现数据共享不需要import就能自动找到一些配置可供多个py文件调用3.2.3.scopemodule可以实现多个.py跨文件共享前置3.2.4.scopesession以实现多个.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插件可用于设备并行执行效率更高