自动化测试 —— Pytest测试框架

2023-11-09

01 | 简介

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

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

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

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

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

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

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

02 安装

pip install pytest

03 | 简单使用

import pytest


def test01():
    print('第一条用例')
    assert True
def test02():
    print("第二条用例")
    assert False


if __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 True
    def 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 True
    def 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 pytest


def 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

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

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


END配套学习资源分享

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

加入我的软件测试交流群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

获取方式 :

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动化测试 —— Pytest测试框架 的相关文章

随机推荐

  • Head First Design Mode(15)-必以此终(模式分类及其他的设计模式)

    这即将是我所整理的设计模式的最终章 看看时间竟然已经过去了3个月了 时光太匆匆 主要内容 这里我会把我们已经学习到的设计模式进行归类划分 便于记忆 此外还会介绍下 原书中未提及的部分设计模式 做简单介绍 我们已经介绍过的设计模式 策略模式
  • SSH介绍和使用,SSH key教程

    1 SSH SSH 为 Secure Shell 的缩写 由 IETF 的网络小组 Network Working Group 所制定 利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题 简单说 SSH是一种网络协议 用于计算机之间
  • Matplotlib:rcParams使用

    一 什么是rcParams 我们在使用matplotliblib画图的时候经常会遇见中文或者是负号无法显示的情况 我们会添加下面两句话 from matplotlib pylab import mpl mpl rcParams font s
  • Docker 入门(一) ubuntu 镜像 安装 jdk1.8

    描述 Docker简介 感兴趣的可以看下 因为最近工作需要 简单看了下Docker 此贴作为学习整理 搭建环境 ubuntu18 安装 详细安装教程传送门 先卸载可能存在的旧版本 sudo apt remove docker docker
  • MySQL之DDL

    MySQL之DDL 基本操作 查看所有数据库名称 SHOW DATABASES 切换数据库 USE mydb1 切换到mydb1数据库 操作数据库 创建数据库 CREATE DATABASE IF NOT EXISTS mydb1 创建数据
  • vue项目引入video.js播放不同格式视频

    很多小伙伴使用原生video标签播放服务器返回的地址的视频 但是会发现video标签对视频的格式限制很多 限制MP4 WebM Ogg三种格式的视频格式 但是对于需求不限制于此 就需要引入插件库 这里引入第三方插件库video js来实现更
  • HTML 标签 title属性 鼠标悬停文字显示

    a href ekp kms multidoc kms multidoc knowledge kmsMultidocKnowledge do method view fdId casePagelist fdId target blank t
  • Ubuntu19.04下Anaconda4.7.10+cuda10.1+cuDNN7.6.2+tensorflow2.0+pytorch1.1深度学习环境配置总结

    安装的前提是你已经安装好显卡驱动 如果没有安装好 丢个传送门关于ubuntu19 04下安装独立显卡驱动 安装Anaconda4 7 10 先去anaconda官网下载 这里选择则64 Bit x86 Installer 然后在下载目录打开
  • VB下关闭xp/win7安全模式(即关闭F8)

    亲测方法 1 注册表修改 使用管理员级别帐户登录XP Win7 在 运行 窗口中输入 regedit 打开注册表编辑器 找到HKEY LOCAL MACHINE SYSTEM CurrentControlSet Control SafeBo
  • python调用github,如何在python中使用github api令牌进行请求

    I m able to obtain Github api token in python using username and password but i m not able to use that API Token for req
  • python 批量爬取网页pdf_python爬取网页内容转换为PDF文件

    如何利用Python抓取PDF中的某些内容 你的问题事实上包含几部分 将 PDF 转化为纯文本格式 抽取其中部分内容 格式化写入到 excel 中 转换 PDF 有很多库可以完成 如下是通过 pdfminer 的示例 from cStrin
  • 老男孩26期运维班linux基础知识大比拼即将开始

    老男孩26期运维班linux基础知识大比拼 1 比赛说明 比赛时间 2015年11月12日下午15点 比赛地点 老男孩教育教室二 比赛人员 老男孩教育26期全体同学 奖项 团体奖 按组奖励共1 9组 一等奖奖励300元人民币或每人老男孩老师
  • Ubuntu 18.04 下运行docker 编译aosp (android 7.1.2, 8.0.0,9.0.0)

    目录 编译aosp 的辛酸 官方推荐编译方式 源码下载 制作docker镜像 开始编译 错误处理 7 1 1 r20 问题 9 0 0 r46 8 0 0 r2 编译aosp 的辛酸 这几天想编译一个能脱壳的 aosp Android源码
  • java json数组遍历_java JSONArray 遍历方式(2种)

    第一种 java8 遍历JSONArray 拼接字符串 public static void main String args JSONArray jSONArray new JSONArray JSONObject jb new JSON
  • 【面试系列】反转链表

    题意 原题链接 代码 1 1 1 递归 Definition for singly linked list struct ListNode int val ListNode next ListNode val 0 next nullptr
  • 某电商在线奶粉销量数据分析-SQL+Tableau自动化分析

    本文数据集来源 Baby Goods Info Data 数据库 MySQL 数据库管理软件 DataGrip 可视化分析软件 Tableau 本文sql文件 可视化分析源文件地址 DataScience 文章目录 数据预处理与导入 导入数
  • tomcat部署、tomcat虚拟主机及tomcat多实例、tomcaty优化

    目录 一 Tomcat概述 tomcat是什么 什么是 servlet 什么是 JSP Tomcat 功能组件结构 Container 结构分析 Tomcat 请求过程 二 Tomcat部署 1 关闭防火墙和selinux 并将Tomcat
  • sprintf函数的用法

    说明1 该函数包含在stdio h的头文件中 使用时需要加入 include
  • 测试经验小谈

    一 注意事项 新建一条数据时 如果有数据新建的时间 注意核对是否与当前时间相同 告知开发要进行测试 让开发停止提交代码 包证当前测试的结果只针对当前版本 准确定位BUG 同时 防止引入新的BUG 关于断网测试 明确当前的软件是否需要断网测试
  • 自动化测试 —— Pytest测试框架

    01 简介 Pytest是一个非常成熟的全功能的Python测试框架 主要有以下特点 简单灵活 容易上手 文档丰富 支持参数化 可以细粒度地控制测试用例 支持简单的单元测试与复杂的功能测试 还可以用来做Selenium Appium Req