当前位置: 首页 > news >正文

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 级别。

相关文章:

Pytest 框架快速入门

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

抖音视频素材去哪里找啊?视频素材网站库分享

在这个视觉盛宴的抖音平台上,高质量和有趣的视频素材常常是吸引观众的重要钥匙。如果你也正在寻找那些能让你的视频作品更加出色的资源,那么恭喜你,今天我将为你介绍10个超实用的视频素材网站,让你的抖音视频创作充满创意和效率。…...

win10 langchain-chatchat-0.3.1安装及测试

git clone https://github.com/chatchat-space/Langchain-Chatchat.git conda create -n langchain3 python3.11 conda activate langchain3 xinference安装用另一篇文章的内容处理。 pip install langchain-chatchat -U -i https://pypi.tuna.tsinghua.edu.cn/simple pip in…...

Redis 教程:从入门到入坑

目录 1. Redis 安装与启动1.1. 安装 Redis1.1.1. 在Linux上安装1.1.2. 在Windows上安装 1.2. 启动 Redis1.2.1. 在Linux上启动1.2.2. 在Windows上启动 1.3. 连接Redis1.3.1. 连接本地Redis1.3.2. 连接远程Redis1.3.2.1. 服务器开放端口1.3.2.2. 关闭防火墙1.3.2.3. 修改配置文件…...

计算机图形学入门31:动画与模拟的求解

1.前言 上一篇介绍了动画与模拟的很多方法、模拟各种运动、基本知识。定义一个物体的速度和加速度,算出物体在任何时刻的位置,但是没有介绍具体怎么实现。这篇文章就是从上一篇的概念出发,介绍怎么把一个物体或多个物体运动的位置、不同时间出…...

Jmeter-单用户单表查询千条以上数据,前端页面分页怎么做

这里写自定义目录标题 单用户单表查询千条以上数据 单用户单表查询千条以上数据 对于单用户查询千条以上数据,但是前端页面做了分页的情况下 可以直接把查询接口下的分页限制去掉,便可查询出当前页面查询条件下的全部数据 例如去掉如下内容&#xff1…...

夏日养猫攻略!你家猫咪缺水了吗?补水罐头秘籍大公开

炎炎夏日,高温来袭,这几天又有几只猫咪因为中暑被送到我们医院了,经过诊断,发现猫咪体温超过40C,而且严重缺水。 各位铲屎官真的得注意,酷暑炎热,给猫咪补水很重要。猫咪的汗腺数量远远不及人类…...

生成名片格式

/*** 生成名片* param array arr2 卡片素材* param array strs 素材文字 数组* param function successFn 回调函数* * */PosterCanvasCard: function(arr2, strs, successFn, errFun) {let that this;const ctx uni.createCanvasContext(myCanvas);ctx.clearRect(0, 0, 0, 0…...

Linux常用命令(简要总结)

Linux常用命令 Linux 是一个强大的操作系统,广泛应用于服务器、开发和嵌入式系统中。掌握一些常用的 Linux 命令对于高效地使用系统至关重要。以下是一些常用的 Linux 命令及其简要说明: 文件和目录操作 ls:列出目录内容 ls ls -l # …...

从挑战到实战!TDengine 新能源行业研讨会要点回顾

近年来,随着全球对可再生能源需求的不断增长,新能源行业迎来了前所未有的发展机遇。然而,伴随着行业的快速发展,海量数据的管理和高效利用成为了行业面临的重要挑战。如何通过先进的数据管理技术提升新能源系统的效率和可靠性&…...

Linux 之 设置环境变量

设置环境变量 启动帐号后自动执行的是 文件为 .bashrc,然后通过这个文件可设置自己的环境变量; 临时设置环境变量: 在终端中使用 export 命令可以临时设置环境变量,例如:export PATH$PATH:/your/custom/path这种方法设…...

postgresql删除用户

背景 **角色与用户**:在 PostgreSQL 中,用户和组的概念是通过“角色”来统一实现的。角色可以有登录权限(在这种情况下,它们通常被称为“用户”),也可以没有(在这种情况下,它们通常用…...

【java深入学习第5章】Spring Boot 统一功能的实现及处理方式

Spring Boot 统一功能处理 在开发 Web 应用程序时,为了提高代码的可维护性和可扩展性,我们通常会采用一些统一的功能处理方式。本文将介绍如何在 Spring Boot 中实现统一的数据返回格式、异常处理和功能处理,并通过一个图书管理系统的案例来…...

【常见开源库的二次开发】基于openssl的加密与解密——单向散列函数(四)

目录: 目录: 一、什么是单项散列函数? 1.1 如何验证文件是否被修改过 1.2 单项散列函数: 二、单向hash抗碰撞 2.1 弱抗碰撞(Weak Collision Resistance) 2.2 强抗碰撞(Strong Collision Resista…...

获取不重复流水号(java)

一:概述 很多业务场景都需要获取不重复的业务流水号,当微服务项目或服务多节点部署时,获取流水号场景使用分布式锁性能低下,可以基于数据库行锁实现获取不重复流水号。 二:创建流水号数据库 CREATE TABLE serial (i…...

【python虚拟环境管理】【mac m3】 使用pipx安装poetry

文章目录 一. 安装 pipx二. 安装Poetry1. 安装2. advanced 操作 官网文档:https://python-poetry.org/docs/ pipx介绍文档:https://blog.51cto.com/u_15064632/2570626 一. 安装 pipx pipx 用于全局安装 Python 命令行应用程序,同时在虚拟环…...

git使用以及理解

git练习网站 Learn Git Branching git操作大全Oh Shit, Git!?! git commit git branch name git merge bugFix 合并俩个分支 git rebase main git checkout headgit switch head 会导致HEAD分离 ,就是指head->HEAD->c1 相对引用 ------------------- …...

openlayers 3d 地图 非三维 立体地图 行政区划裁剪 地图背景

这是实践效果 如果没有任何基础 就看这个专栏:http://t.csdnimg.cn/qB4w0 这个专栏里有从最简单的地图到复杂地图的示例 最终效果: 线上示例代码: 想要做这个效果 如果你的行政区划编辑点较多 可能会有卡顿感 如果出现卡顿感需要将边界点相应…...

GEO数据挖掘从数据下载处理质控到差异分析全流程分析步骤指南

0. 综合的教学视频介绍 GEO数据库挖掘分析作图全流程每晚11点在线教学直播录屏回放视频: https://www.bilibili.com/video/BV1rm42157CT/ GEO数据从下载到各种挖掘分析全流程详解: https://www.bilibili.com/video/BV1nm42157ii/ 一篇今年近期发表的转…...

‍我想我大抵是疯了,我喜欢上了写单元测试

前言 大家好我是聪。相信有不少的小伙伴喜欢写代码,但是对于单元测试这些反而觉得多此一举,想着我都在接口文档测过了!还要写什么单元测试!写不了一点!! 由于本人也是一个小小程序猿🙉&#xf…...

TwinCAT3-UDP自定义协议实现高效点对点通信

1. TwinCAT3-UDP通信基础与场景解析 在工业自动化领域,设备间的高效数据交换一直是工程师们关注的焦点。TwinCAT3作为倍福(Beckhoff)推出的自动化软件平台,其UDP通信功能为点对点数据传输提供了轻量级解决方案。与TCP协议相比&…...

查询参数拼接

export function objectToQueryString(params) {return Object.entries(params).filter(([key, value]) > value ! undefined && value ! null) // 过滤掉 undefined 和 null.map(([key, value]) > ${encodeURIComponent(key)}${encodeURIComponent(value)}).joi…...

foobar2000 DUI界面深度解析:foobox-cn技术架构与实战配置完整指南

foobar2000 DUI界面深度解析:foobox-cn技术架构与实战配置完整指南 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn foobox-cn是针对foobar2000播放器开发的现代化DUI(默认用户…...

HarmonyOS6 半年磨一剑 - RcCheckbox 组件事件体系与交互逻辑

文章目录前言一、点击处理链1.1 核心点击处理函数1.2 两个点击入口二、三事件分层设计2.1 三个事件的对比2.2 事件使用示例三、labelDisabled 局部禁止机制3.1 设计意图3.2 适用场景四、RcCheckboxGroup 的数量限制拦截4.1 min/max 拦截机制4.2 数量限制示例总结前言 一个看似…...

万物识别镜像在内容安全场景的应用:SpringBoot集成与效果展示

万物识别镜像在内容安全场景的应用:SpringBoot集成与效果展示 1. 万物识别镜像技术解析 万物识别-中文-通用领域镜像基于cv_resnest101_general_recognition算法构建,是一个强大的视觉识别工具。这个镜像最突出的特点是能够识别超过5万类日常物体&…...

FoldingNet实战:用Python复现CVPR‘18点云自编码器(附PyTorch代码)

FoldingNet实战:从理论到PyTorch实现的全流程拆解 在三维视觉领域,点云数据处理一直是计算机视觉研究的核心挑战之一。2018年CVPR会议上提出的FoldingNet,以其独特的"纸张折叠"思想为点云自编码器设计开辟了新路径。不同于传统方法…...

【T6/T3】通过账套备份文件快速识别畅捷通软件版本的实用技巧

1. 为什么需要识别畅捷通软件版本 最近接手了一个老客户的财务系统迁移项目,发现他们提供的账套备份文件没有标注具体版本号。这种情况在实际工作中很常见——企业可能多年未升级系统,或者交接文档不完整。如果直接安装错误版本的畅捷通软件,…...

如何用本地AI工具10倍提升视频字幕提取效率:video-subtitle-extractor完全指南

如何用本地AI工具10倍提升视频字幕提取效率:video-subtitle-extractor完全指南 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包…...

突破常规认知的编辑器革命:TinyEditor轻量级代码编辑器深度解析

突破常规认知的编辑器革命:TinyEditor轻量级代码编辑器深度解析 【免费下载链接】TinyEditor A functional HTML/CSS/JS editor in less than 400 bytes 项目地址: https://gitcode.com/gh_mirrors/ti/TinyEditor 当开发者在移动设备上调试代码,或…...

ESP32-Bus-Pirate:多功能硬件协议分析工具开发指南

ESP32-Bus-Pirate:多功能硬件协议分析工具开发指南1. 项目概述1.1 系统架构ESP32-Bus-Pirate是基于ESP32平台开发的多协议硬件调试工具,采用模块化分层设计架构。系统包含四个主要层次:用户交互层:支持USB串口终端、WiFi网页终端和…...