一、自动化测试框架
自动化测试在如今的测试工作里越来越流行以及被重视。这篇文章我们就来聊聊自动化常用的测试框架pytest 和 unittest 的异同。
在了解自动化测试框架之前,我们先来说说什么是自动化测试。自动化测试其实就是通过代码脚本模拟用户的手工操作行为,并对操作行为方法的执行结果进行断言校验(也可以先通过截图、录屏等方式把要检查的页面和操作记录下来再后期借助工具或人力进行分析判断)的测试方案,都可以称为自动化测试。
那我们在写自动化代码脚本时,往往会使用某一种测试框架来帮助我们更好更快的编写自动化测试脚本。那自动化测试框架又是什么呢?其实自动化测试框架就是自动化测试团队为了对某个系统或某个专项测试做自动化测试而封装的一个代码框架(包括代码结构的设计、模块方法封装、单元测试框架选择、测试工具选择等)。
自动化测试框架对自动化代码脚本又产生了什么作用和影响呢?首先,提高了自动化代码脚本的复用性和维护性。其次,提高了自动化代码脚本的编写和执行效率。最后,封装后的自动化测试框架使业务用例和元素操作(接口请求)的代码脚本实现分离,可以更好的管理和编写自动化测试用例,这样甚至可以让不太懂代码的测试同学也可以通过只需编写测试用例脚本即可在日常工作进行自动化测试。
在自动化测试框架中,pytest 和 unittest 又是自动化测试框架中最常用的两种单元测试框架,同时也是自动化测试框架中最重要的组成部分。
二、pytest单元测试框架
接口自动化:python+requests+pytest+parameterizes+yaml数据驱动+allure报告
web自动化+接口自动化框架整合:pytest、fixure、confest.py
三、unittest单元测试框架
接口自动化:pytest+requests+unittest+ddt+excel数据驱动+关键字驱动(pom)+HTMLTestRunner.py
web自动化:python+selenium+unittest+ddt+excel数据驱动+关键字驱动(pom)+HTMLTestRunner.py
四、pytest 和 unittest 的共同点
主要作用:
- 测试发现:从多个py文件中收集并加载测试用例。
- 测试执行:将测试用例按照一定的顺序和条件执行,并生成结果。
- 测试判断:通过断言判断预期结果和实际结果的差异。
- 测试报告:统计测试进度,耗时,通过率,生成HTML测试报告。
三、pytest 和 unittest 的差异点
1.测试用例编写规则:
unittest:
- 首先需要import unittest(因为测试类需要继承unittest.Testcase)。
- 测试类需要继承:unittest.Testcase。
- 测试用例必须以test_开头。
pytest:
- 只有执行时才需要import pytest。
- 测试文件必须以test_开头或以_test结尾。
- 测试类名必须以Test开头。
- 测试方法必须以test_开头。
结论:unittest 需要依赖于unittest.TestCase这个类,而pytest不需要依赖任何类。
2.断言:
unittest:提供assertEqual、assertIn、assertTrue等30几种断言。
pytest:直接使用python自带的assert。(当然unittest也可以使用)
3.失败重跑:
unittest:没有。
pytest:通过pytest-rerunfailures插件实现。(pytest 有很强大的插件支持,100多种)
执行py文件时使用命令:pytest --rerun 2,代表失败可重跑2次。
4.数据驱动:
unittest:依赖ddt库。
pytest:使用@pytest.mark.parametrize()装饰器实现。这个装饰底层是for 循环。
5.测试用例分类执行:
冒烟测试,分模块测试等场景。
unittest:通过TestSuite,TestLoader 测试套件。
pytest:@pytest.mark()标记(它可以执行不同的文件中的不同用例)
6.测试报告:
unittest:通过HTMLTestRunner.py 生成测试报告
pytest:集成allure插件生成HTML报告