Unittest和Pytest这两个都属于python的单元测试框架,也是目前用的比较多的自动化测试框架。 Unittest呢是Python自带的,比较传统的测试框架,提供的插件少,用例格式比较复杂。 Pytest相对来说,更加简单方便 ,兼容性比较强,插件也很丰富。用例出错了还可以重跑,非常的灵活,效率要比Unittest更高。 unittest测试文件、方法必须以test开头; pytest测试文件必须以test开头或结尾,测试方法必须以test开头,测试类必须以Test开头(不考虑自定义情况) | ||
unittest | pytest | |
安装 | Unittest是Python自带的测试框架,因此不需要安装(也被称为PyUnit) | Pytest是第三方依赖库,需要使用 pip install pytest 进行安装 |
用例识别规则 | 首先要手动导入unittest (import unittest) 测试类必须继承unittest.TestCase 测试方法必须以”test_”开头 测试类必须要有unittest.main()方法 | 测试文件必须以”test_”开头或”_test”结尾 测试类的命名要以”Test”开头 测试方法必须要”test_”开头 运行不需要main方法。上述默认的用例查找规则,可在 pytest 的配置文件进行修改(后续章节会详细介绍配置文件的使用)另外 pytest 兼容 unittest,以 unittest 的用例编写规范写的用例,pytest 都能够识别出来。一种是命令行通过 pytest 这个命令执行,另外在代码中可通过 pytest.main() 这个方法来执行测试。 |
用例分类执行 | 默认执行的是全部的测试用例,但也可以通过加载testsuit执行部分测试用例(测试套件) | 通过@pytest.mark来标记类和方法,pytest.main加入参数(“-m”)只运行标记的类和方法 |
用例前置和后置 | unittest提供了setUp/tearDown,在每个用例运行前执行一次,运行结束后执行一次。SetUpClass和tearDownClass,用例执行前,用例执行结束后,只运行一次。 | pytest提供了模块级,类级,方法级等setup/teardown,比unittest的setUp/tearDown要更丰富灵活。 · 模块级( setup_module/teardown_module)开始于模块始末,全局的,整个模块开只运行一次,优先于测试用例。 · 函数级( setup_function/teardown_function)只对函数用例生效(不在类中) · 类级( setup_class/teardown_class)只在类中前后运行一次(在类中),只针对此类生效 · 方法级( setup_method/teardown_method)开始于方法始末(在类中),定义在类里面,每个用例都执行一次 |
参数化 | 需要依赖DDT库。 | 使用@pytest.mark.parametrize装饰器。 |
断言 | unittest提供了很多断言方式。如:assertEqual、assertIn、assertTrue、assertFalse | pytest提供assert表达式,简单,方便。 |
报告 | unittest使用HTMLTestRunnerNew库 | pytest有pytest-HTML、allure插件 |
失败是否重跑 | unittest没有提供这个功能 | Pytest通过pytest-rerunfailures插件是支持用例执行失败重跑的 |
pytest和unittest的区别
最新推荐文章于 2024-05-12 19:59:30 发布