01 | 简介

Pytest是一个非常成熟的全功能的Python测试框架,主要有以下特点:

  1. 简单灵活,容易上手,文档丰富

  2. 支持参数化,可以细粒度地控制测试用例

  3. 支持简单的单元测试与复杂的功能测试,还可以用来做Selenium、Appium、Requests等UI、接口自动化测试

  4. 支持很多第三方插件,并且可以自定义扩展(Pytest插件下载地址)

  5. 支持测试用例的跳过与失败重试

  6. 可以很好的与CI工具结合,比如Jenkins

02 安装

pip install pytest

03 | 简单使用

import pytestdef test01():print('第一条用例')assert True
def test02():print("第二条用例")assert Falseif __name__=="__main__":# -s:显示用例中的输出# -v:输出更详细的用例执行信息# __file__:本文件pytest.main(["-s", "-v", __file__])

运行结果如下图:

04 | 初始化&结束

4.1 函数级别

每执行一个测试用例就执行一次初始化&结束方法

import pytest
class Test:def setup(self):print("初始化")def teardown(self):print("结束")def test01(self):print('第一条用例')assert Truedef test02(self):print("第二条用例")assert False
if __name__=="__main__":pytest.main(["-s",__file__])

执行结果图:

4.2 类级别

不管类中有多少条用例需要执行,仅仅只执行一次初始化&结束方法

import pytest
class Test:def setup_class(self):print("初始化")def teardown_class(self):print("结束")def test01(self):print('第一条用例')assert Truedef test02(self):print("第二条用例")assert False
if __name__=="__main__":pytest.main(["-s",__file__])

执行结果图:

05 | 常用插件

5.1 测试报告

安装测试报告插件

pip install pytest-html

在项目目录下创建 pytest.ini 配置文件,配置文件中新增测试报告存储路径。

[pytest]
# 在当前目录下创建report目录存放测试报告
addopts = --html=./report/report.html

执行测试,生成的测试报告如下图:

5.2 失败重试

安装插件

pip install pytest-rerunfailures

全局重试:在配置文件中增加重试参数,控制所有用例失败后的重试及重试等待时间

[pytest]
addopts = --html=./report/report.html --reruns 3 --reruns-delay 2
# --reruns n,n是一个整数,表示重试次数
# --reruns-delay n,n是一个整数,表示重试等待时间,单位是s

测试报告中可以看出失败用例的重试情况

单个重试:在某个用例函数中增加装饰器,注意需要将 全局重试 的配置注释掉

# reruns指定重试次数,reruns_delay指定重试间隔
@pytest.mark.flaky(reruns=2, reruns_delay=1)  def test02(self):print("第二条用例")assert False

测试报告中看重试情况:

5.3 多进程并发执行

pytest-xdist的出现就是为了让自动化测试用例可以分布式执行,从而节省自动化测试时间

安装插件

pip install pytest-xdist

多CPU并行执行

pytest -n 并行测试数量

5.4 多重断言

使用pytest进行断言判断的时候,为了用例的精准性,经常会多个方面进行断言,比如:

  • 断言1:断言响应的http的状态

  • 断言2:断言响应返回的code值

  • 断言3:断言响应返回的json中的data字段是否符合预期。

如果使用原生python的assert,就会遇到一个断言失败则全部失败的情况。比如说,断言1结果为Failed,那么断言2和断言3都不会被执行。我们希望断言2和断言3继续执行,这样我们能获取更多的断言结果来判断出接口哪里出了问题,能够更好地进行问题定位,这时候就可以使用pytest-assume插件来实现。

安装插件

pip install pytest-assume

使用案例

import pytestdef test_add2():pytest.assume(1 + 4 == 5)pytest.assume(1 + 3 == 3)pytest.assume(2 + 5 == 7)pytest.assume(2 + 5 == 9)print("测试完成")if __name__=="__main__":pytest.main(["-s", "-v", __file__])

执行结果如下图,可以看出总共执行了四个断言,其中失败的断言有2个

5.5 美化执行结果

在我们进行自动化测试的时候,用例往往是成百上千,执行的时间是几十分钟或者是小时级别。有时,我们在调试那么多用例的时候,不知道执行到什么程度了,而pytest-sugar插件能很好解决我们的痛点。

安装pytest-sugar插件

pip install pytest-sugar

在命令行中执行用例文件,执行结果如下图,用例执行时会有进度条展示:

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


最后基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源在下方公众号免费获取~

自动化测试 —— Pytest测试框架相关推荐

  1. 自动化测试pytest测试框架实例

    本文采用pytest框架运行了两个测试用例. 与unittest框架相比: 引入包不同 pytest的类不需要继承类 测试固件的方法不同,pyest中setup和teardown是小写. 断言方法不同 ...

  2. Pytest 测试框架——数据驱动

    引言 前面已经和大家介绍过 Unittest 测试框架的数据驱动框架 DDT,以及其实现原理.今天和大家分享的是 Pytest 测试框架的数据驱动,Pytest 测试框架的数据驱动是由 pytest ...

  3. Pytest测试框架(二):pytest 的setup/teardown方法

    系列文章目录 Pytest测试框架(一):pytest安装及用例执行 Pytest测试框架(二):pytest 的setup/teardown方法 Pytest测试框架(三):pytest fixtu ...

  4. Python编程必不可少的pytest测试框架

    进行编程测试重要的是为了更高效的完成功能的实现. pytest是基于unittest实现的第三方测试框架,比 unittest 更加的简洁.高效,并且可以完美兼容 unittest 的测试代码,无需对 ...

  5. Pytest测试框架(五):pytest + allure生成测试报告

    系列文章目录 Pytest测试框架(一):pytest安装及用例执行 Pytest测试框架(二):pytest 的setup/teardown方法 Pytest测试框架(三):pytest fixtu ...

  6. Pytest测试框架的基本使用和allure测试报告

    一.测试用例的识别与运行 目录识别 通过pytest.ini配置文件配置 如果未指定任何参数,则收集从testpaths(如已配置)或当前目录开始.另外,命令行参数可以在目录.文件名或节点ID的任何组 ...

  7. Pytest系列——allure(原理)之allure工具与Pytest测试框架集成

    官方介绍 1.Allure Framework是一种灵活的轻量级多语言测试报告工具,不仅可以以简洁的Web报告形式非常简洁地显示已测试的内容,也允许参与开发过程的每个人从日常测试中提取最大程度的有用信 ...

  8. pytest测试框架——allure报告

    文章目录 一.allure的介绍 二.allure的运行方式 三.allure报告的生成 方式一.在线报告.会直接打开默认浏览器展示当前报告 方式二.静态资源文件报告(带index.html.css. ...

  9. pytest测试框架快速搭建

    一.介绍 pytest是一个非常成熟的Python测试框架,能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试.接口自动化测试(pytest+reques ...

最新文章

  1. R回归模型glm与lm的区别
  2. Caffe学习系列(12):训练和测试自己的图片
  3. A review of 3D/2D registration methods for image-guided interventions(1)
  4. 交叉验证和超参数调整:如何优化您的机器学习模型
  5. MetricBeat(win/linux)部署 系统CPU内存等资源情况监控
  6. c语言软件电脑下载文件,求C语言头文件下载?
  7. 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及
  8. c++求解自行车慢速比赛问题_隐马尔可夫模型(模型推断五大问题)
  9. Win10下Windows徽标键快捷键大全
  10. 1分钟学会网站采集方法详解
  11. 定制交友盲盒软件 交友盲盒软件开发 交友软件系统开发
  12. Part3-4-1 搭建自己的SSR
  13. 《Cocos Creator游戏实战》你画我猜中的画板功能
  14. 产业分析:二次元产业研究报告
  15. sunday 算法python实现
  16. python面试自我介绍_我的python面试简历
  17. 201803-4 棋局评估
  18. CF - 794B. Cutting Carrot - 数学
  19. setenv,getenv,fork
  20. Unity3d学习笔记 var 关键字

热门文章

  1. 【笔试面试考点】PreparedStatement和Statement的区别与联系批量插入数据的优化
  2. Android 版本号---版本名
  3. MCE | 新冠 德尔塔病毒
  4. java 根据 SVN changeLog 文件 生成增量升级包
  5. sublime插件之sidebar
  6. aws php 上传文件 限制大小_php如何实现文件上传下载-PHP问题
  7. 互联网面试——WPF面试问题
  8. Set集合的概述及特点
  9. SAP 批量修改采购订单
  10. 异步复位同步释放原理