Pytest框架 — 01、Pytest测试框架介绍
1、什么是单元测试框架
单元测试框架是指在软件开发中,针对软件的最小单位(函数,方法)进行正确性检查测试。
2、单元测试框架主要做什么
- 测试发现:从多个文件中找到需要的测试用例
- 测试执行:按照一定的顺序和规则去执行测试用例
- 测试判断:通过断言判断预期结果和实际结果的差异
- 测试报告:统计测试进度,耗时,通过率等数据,并生成测试报告
3、单元测试框架和自动化测试框架的关系
单元测试框架是自动化测试框架的组成部分之一。
PO
设计模式、日志监控、数据驱动、关键字驱动、Selenium、Requests的二次封装、断言体系封装、邮件通知等,都是自动化测试框架中的组成部分。
4、Pytest测试框架说明
Pytest是基于Python的一种单元测试框架,同自带的Unittest测试框架类似,但是相对更简洁高效。
Pytest测试框架的特点:
- 容易上手,文档丰富、拥有很多强大的第三方插件
- 支持参数化配置
- 支持跳过测试用例
- 支持重复运行失败的测试用例
- 方便与Jenkins进行持续集成
- 兼容Unittest框架的测试用例
- 可与Selenium,Requests,Appium结合实现Web自动化,接口自动化,App自动化
5、Pytest框架与Unittest框架的区别
Unittest是Python自带的单元测试框架,Pytest是基于Unittest开发的第三方单元测试框架,相对Unittest更加灵活方便。
区别:
Unittest | Pytest | 备注 | |
---|---|---|---|
用例编写规则 | 1、必须首先导入unittest 2、测试类必须继承unittest.Testcase 3、测试方法必须以test_开头 |
1、测试文件名必须以test_开头或_test结尾 2、测试方法必须以test_开头 3、测试类必须以Test开头 |
|
用例的分组执行 | 默认执行全部用例,可通过测试套件testsuite部分执行 | @pytest.mark来标记类和方法,执行时加入参数("-m")可以只运行标记的类和方法 eg: pytest -m "smoke and back" |
pytest -m 可执行多个标记 |
用例的前后置 | 提供setUp/tearDown,setUpClass/tearDownClass方法,针对测试函数和类中测试方法 | 1、固定Fixture 提供模块级、函数级、类级、方法级的setup/tearDown 1)模块级 setup_module/teardown_module :开始于模块始末2)函数级 setup_function/teardown_function :只针对函数用例生效,因为兼容unittest所以也可简写为setup/teardown 3)类级 setup_class/teardown_class :只在类中前后执行一次4)方法级 setup_method/teardown_method :在类中每个方法前后执行一次,也可以在类中简写为setup/teardown ,效果相同2、自定义Fixture 1)在函数上面通过装饰器 @pytest.fixture() 来实现自定义前后置2)通过scope参数实现分级session、module、class、function,效果与固定Fixture相同 3)通过autouse参数 autouse=True 搭配scope参数实现自动前后置4)使用yeild返回做后置,相当于teardown |
自定义fixture相对固定fixture的优势: 1、命名方式更灵活,不局限于setup/teardown 2、可通过conftest.py配置多测试用例文件共享前后置 3、不需要导入conftest,pytest用例会自动查找 4、scope="session"可实现多个测试用例文件跨文件前后置 |
参数化 | 使用ddt 或者 第三方库parameterized | 直接使用@pytest.mark.parametrize 装饰器 |
|
断言 | 使用unittest的断言方法: assertEqual、assertIn、assertTrue、assertFalse eg: self.assertEqual(a, 2) |
使用python内置断言方法,直接assert + 表达式 eg: assert a == 2 |
各有优势: - pytest直接使用assert+表达式更简单清洗; - unittest的断言方法支持msg参数,即断言失败可以提示; eg: self.assertEqual(a, 2, msg="不相等") |
失败重试 | 无 | 提供pytest-rerunfailures插件 | |
报告 | HTMLTestRunner第三方库 | 提供pytest-html、allure插件 |
参考
https://www.cnblogs.com/Durant0420/p/15034839.html
https://www.cnblogs.com/liuyuelinfighting/p/15778190.html