Pytest 框架快速入门

Pytest 框架常用功能介绍

一、简介

Pytest 是一个功能强大的 Python 测试框架,具有简单易用、测试用例清晰易读、支持参数化、可运行由 Nose 和 unittest 编写的测试用例、拥有丰富的第三方插件且可自定义扩展、支持重复执行失败的用例以及方便与持续集成工具集成等特点。

二、快速入门

  1. 安装:使用 pip3 install pytest 命令进行安装。
  2. 查看版本:通过 Pytest --version 查看版本。
  3. 快速入门示例
    • 导入 pytest
    • 定义测试用例方法和测试函数,使用 assert 进行断言。
    • 通过 pytest.main(["-s", "test_sample.py"]) 执行测试。

三、基础使用

  1. 用例前置和后置执行
    • unittest:通过 setUptearDown 在每个用例执行前后执行,通过 setUpClasstearDownClass 在类里面所有用例执行前后执行。
    • pytest:函数级别为 setup/teardown,运行于测试方法的始末,每个测试用例运行一次;类级别为 setup_class/teardown_class,运行于测试类的始末,一个测试内只运行一次。
  2. 默认运行规则
    • 测试文件以 test_*.py 开头或 *_test.py 结尾。
    • 测试类以 Test 开头,且不能带有 __init__ 方法。
    • 测试函数以 test_ 开头。
    • 运行参数:
      • -v:用于显示每个测试函数的执行结果。
      • -q:只显示整体测试结果。
      • -s:用于显示测试函数中 print() 函数输出。
  3. 自定义运行规则
    • pytest.ini 文件中配置,如 addopts(运行参数)、testpaths(测试目录)、python_files(测试文件)、python_classes(测试类)、python_functions(测试方法)等。
  4. 断言
    • 使用标准的 Python assert 断言语句,如 assert xx(判断 xx 为真)、assert not xx(判断 xx 不为真)、assert a in b(判断 b 包含 a)、assert a == b(判断 a 等于 b)、assert a!= b(判断 a 不等于 b)。

四、标记(mark)使用

  1. 标记
    • 一个测试函数可以有多个标记,一个标记也可以标记多个测试函数。
    • 运行参数:pytest -m test01pytest -m "test01 or test02"
  2. 跳过测试
    • skip:标记 skip 表示跳过该测试用例,运行不执行,可使用 skip(reason=None)
    • skipif:条件判断验证是否忽略不执行,判断条件为表达式 skipif(condition, reason=None)

五、数据参数化

  1. 传入单个参数pytest.mark.parametrize(argnames, argvalues)argnames 为参数名,argvalues 为参数对应值,类型必须为可迭代类型,一般使用 list
  2. 传入多个参数@pytest.mark.parametrize(("username", "password"), [("xiaoming", "123456"), ("xiaohong", "456789")])list 的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应。

六、常用插件

  1. pytest-html:用于生成测试报告,安装命令为 pip3 install pytest-html,在配置文件中的命令行参数中增加 --html=用户路径/report.html
  2. pytest-rerunfailures:当失败后尝试再次运行,安装命令为 pip3 install pytest-rerunfailures,在配置文件中的命令行参数中增加 --reruns n,如果期望加上出错重试的等待时间,可使用 --reruns-delay

七、Fixture

  1. 作用setupteardown 针对整个脚本全局生效,而 fixture 可以让我们自定义测试用例的前置条件。
  2. 优势
    • 命名方式灵活,不局限于 setupteardown
    • conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到 fixture
    • scope="session" 可实现多个 .py 跨文件使用一个 session 来完成多个用例。
  3. 如何使用
    • fixture 名称作为测试用例函数的输入参数:@pytest.fixture
    • 测试用例加上装饰器:@pytest.mark.usefixtures(fixture_name)
    • fixture 设置:@pytest.fixture(autouse=True)
  4. scopefixture 的作用域,默认为 function(函数级别),排序为:session > module > class > function
  5. autouse:默认 False,手动调用该 fixture;如果是 True,所有作用域内的测试用例都会自动调用该 fixture
  6. name:默认装饰器的名称。
  7. 实例化顺序
    • function(函数级):每一个函数都会调用。
    • class(类级别):每个测试类只运行一次。
    • module(模块级):每一个 .py 文件调用一次。
    • session(会话级):每次会话只需要运行一次,会话内所有方法及类,模块都共享这个方法,是针对 .py 级别。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/47354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rabbitmq为什么在不超过30MB时,延迟比kafka低很多,为什么超过30MB,在延迟上又不如kafka

前言 RabbitMQ 和 Kafka 是两种常用的消息队列系统,它们在不同场景下有不同的性能表现。在讨论 RabbitMQ 和 Kafka 在不同消息大小下的延迟和性能表现时,需要了解它们各自的架构和设计理念 RabbitMQ 和 Kafka 的基本架构和设计理念 RabbitMQ&#xff…

Flutter动画详解第二篇之显式动画(Explicit Animations)

目录 前言 一、定义 1.AnimationController 1.常用属性 1. value 2. status 3. duration 2.常用方法 1.forward 2.reverse 3.repeat 4.stop 5. reset 6. animateTo(double target, {Duration? duration, Curve curve Curves.linear}) 7.animateBack(double ta…

C# 智慧大棚nmodbus4

窗体 :图表(chart): 下载第三方: nmodbus4:可以实现串口直连,需要创建串口对象设置串口参数配置Serialport 如果需要把串口数据表通过tcp进行网口传递 需要创建tcpclient对象 ModbusSerialMaster master; /…

ConcurrentHashMap第1讲——哪些地方做了并发控制

我们知道在多线程环境下,HashMap在初始化桶数组、put桶、插入链表以及树化等阶段都有线程安全问题,在jdk1.5之前我们通常用HashTable或Collections.synchronizedMap包装过的HashMap来保证线程安全,不过它们在执行任何操作时都需要锁住整个has…

UNIX中sigaction和sigevent有啥区别

sigaction和sigevent在UNIX和类UNIX系统(如Linux)的信号处理机制中扮演着不同的角色。 sigaction 功能: sigaction是一个用于查询或设置信号处理方式的函数。它允许进程为特定的信号指定一个信号处理函数,以及设置信号处理时的其…

MyPostMan 迭代文档管理、自动化接口闭环测试工具(自动化测试篇)

MyPostMan 是一款类似 PostMan 的接口请求软件,按照 项目(微服务)、目录来管理我们的接口,基于迭代来管理我们的接口文档,文档可以导出和通过 url 实时分享,按照迭代编写自动化测试用例,在不同环…

kubernetes--Istio(四)

一、可观测性 Istio 为网格内所有的服务通信生成详细的遥测数据。这种遥测技术提供了服务行为的可观测性, 使运维人员能够排查故障、维护和优化应用程序,而不会给服务的开发人员带来任何额外的负担。 通过 Istio,运维人员可以全面了解到受监…

【React】创建React项目:使用 create-react-app 创建 React 应用

在本文中,我们将介绍如何使用 create-react-app 创建一个名为 react-basic 的 React 应用。以下步骤将帮助你快速搭建一个新的 React 项目。 1. 确保已安装 Node.js 和 npm 在开始之前,确保你的系统上已经安装了 Node.js 和 npm(Node 包管理…

Burp安全扫描Web应用

一、浏览器设置代理 如下图所示,点击火狐浏览器的“扩展和主题”,搜索“代理”。 如下图所示,选择搜索到的第一个代理(选择任何一个都可以)。 如上图所示,第一个点击后,进入如下页面&#xff0…

在 Electron 中,主进程和渲染进程之间有多种通信方式

在 Electron 中,主进程和渲染进程之间有多种通信方式。以下列出了其中几种: 1. ipcMain 和 ipcRenderer:使用主进程和渲染进程之间的 Electron 网络协议 (ipc) 模块来发送事件和消息。这是一种双向通信的方式,可以实现消息的传递…

opencv—常用函数学习_“干货“_11

目录 二九、图像累加 将输入图像累加到累加图像中 (accumulate) 将输入图像加权累加到累加图像中 (accumulateWeighted) 将输入图像的平方累加到累加图像中 (accumulateSquare) 将两个输入图像的乘积累加到累加图像中 (accumulateProduct) 解释 三十、随机数与添加噪声 …

【Access、Trunk和Hybrid】

概述 Access类型的端口只能属于1个VLAN,一般用于连接计算机的端口;Trunk类型的端口可以允许多个VLAN通过,可以接收和发送多个VLAN的报文,一般用于交换机之间连接的端口;Hybrid类型的端口可以允许多个VLAN通过&#xf…

自己编写一个谷歌浏览器插件, 模拟某音直播间自动发消息

闲来没事, 做个插件玩一玩,于是一顿学习。 按照浏览器插件规范,一顿代码编写, 搞了一个简单的插件。仅做学习。 可以实现在直播间自动发消息。 定时轮发。 实现原理: 利用谷歌popub.js 发送消息。 在content-script.…

leetcode-49. 字母异位词分组

题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "n…

g2plot如何实现面积图和折线图的动态切换?

一开始的时候显示的是面积图: 当我点击折线图的时候,要变成折线图: 当我再点击面积图的时候,还要变回面积图: 要实现这个功能,得知道g2plot几个重要的API。 参考文档如下:https://g2plot…

【python】网络通信socket

一、什么是socket socket网络通信是一种基于TCP/IP协议的通信方式,通过套接字(Socket)实现不同主机间的通信。它基于客户端-服务器架构,客户端和服务器通过Socket进行连接、通信和数据交换。在网络中,进程之间如何通信…

防火墙之双机热备篇

为什么要在防火墙上配置双机热备技术呢? 相信大家都知道,为了提高可靠性,避免单点故障 肯定有聪明的小伙伴会想到那为什么不直接多配置两台防火墙,然后再将他们进行线路冗余,不就完成备份了吗? 答案是不…

JDK、JRE、JVM的区别java的基本数据类型

说一说JDK、JRE、JVM的区别在哪? JDK: Java Delopment kit是java工具包,包含了编译器javac,调试器(jdb)以及其他用于开发和调试java程序的工具。JDK是开发人员在开发java应用程序时候所需要的的基本工具。…

海外社媒矩阵为何会被关联?如何IP隔离?

在当今的数字时代,社交媒体已经成为人们日常生活中不可或缺的一部分。通过社交媒体,人们可以与朋友互动,分享生活,甚至进行业务推广和营销。然而,社交媒体账号关联问题逐渐受到广泛关注。社交媒体账号为何会关联&#…