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

Python测试框架pytest介绍用法

1、介绍

pytest是python的一种单元测试框架,同自带的unittest测试框架类似,相比于unittest框架使用起来更简洁、效率更高
pip install -U pytest

特点:
1.非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
2.支持简单的单元测试和复杂的功能测试
3.支持参数化
4.执行测试过程中可以将某些测试跳过,或者对某些预期失败的Case标记成失败
5.支持重复执行失败的Case
6.支持运行由Nose,Unittest编写的测试Case
7.具有很多第三方插件,并且可以自定义扩展
8.方便的和持续集成工具集成

2、入门案例

import pytestdef test_a():print("test_a")return 1 * 0def test_b():print("test_b")return 1 / 0if __name__ == '__main__':pytest.main(["-s"])

在这里插入图片描述

3、配置文件

默认规则:
模块名称为 test_*.py*_test.py
类名称为Test开头

配置文件:pytest.ini

[pytest]
addopts = -s   # 通常是- 或者 -- 开头内容
testpaths = ./  # 测试模块所在目录
python_files = test_*.py *test.py   # 测试模块文件名称规则,多个内容用空格分隔
python_classes = Tedt_*  # 测试类名称规则
python_functions = test_* # 测试类函数或者方法的名称规则

4、标记跳过测试

无条件跳过:


@pytest.mark.skip(reason="我想跳过")
def test_b():print("test_b")return 1 / 0@pytest.mark.xfail(raises=ZeroDivisionError)
def test_c():print("test_b")return 1 / 0

有条件跳过:

@pytest.mark.skipif(2>10,reason="条件成立跳过)
def test_c():print("test_c")

5、参数化

对于相似的过程,但数据不一样的时候,可以使用参数化

parameterize(self.argnames, argvalues, ids=None):
- argnames 参数名称 列表或者元组
- argvalues 参数值 列表套元组
- ids 测试id,可省略

例子:

@pytest.mark.parametrize(["a", "b"], [(1, 2), (3, 4)])
def test_a(a, b):print("test_a++++++++++++++")assert a + b < 100

6、夹具(前后固件)

在测试之前和之后执行,用于固定测试环境,及清理回收测试资源

# 方法夹具
def setup_method(self):print("方法用例执行之前,需要的操作:热身")def teardown_method(self):print("方法用例执行之前,需要的而操作:拉伸")# 类夹具
def setup_class(self):passdef teardown_class(self):pass# 函数夹具
def teardown_function():print("函数执行之前:拉伸")def setup_function():print("函数执行之前:热身")# 摸块夹具
def teardown_module():print("函数执行之前:拉伸")def setup_module():print("函数执行之前:热身")

7、插件

生成测试报告
安装: pip install pytest-html

使用:
1、命令行方式:pytest --html=存储路径/report.html
2、配置文件方式:

[pytest]
addopts = -s --html=./report.html

多线程运行:pytest-xdist
控制用例的执行顺序:pytest-ordeing
失败用例重跑:pytest-returnfailures
生成企业级专业版的测试报告:allure-pytest
测试框架本身:pytest
管理基础路径:pytest-base-url

相关文章:

Python测试框架pytest介绍用法

1、介绍 pytest是python的一种单元测试框架&#xff0c;同自带的unittest测试框架类似&#xff0c;相比于unittest框架使用起来更简洁、效率更高 pip install -U pytest 特点&#xff1a; 1.非常容易上手,入门简单,文档丰富&#xff0c;文档中有很多实例可以参考 2.支持简单的单…...

AI对话系统app开源

支持对接gpt&#xff0c;阿里云&#xff0c;腾讯云 具体看截图 后端环境&#xff1a;PHP7.4MySQL5.6 软件&#xff1a;uniapp 废话不多说直接上抗揍云链接&#xff1a; https://mny.lanzout.com/iKFRY1o1zusf 部署教程请看源码内的【使用教程】文档 欢迎各位转载该帖/源码...

SpringBoot+aop实现主从数据库的读写分离

读写分离的作用是为了缓解写库&#xff0c;也就是主库的压力&#xff0c;但一定要基于数据一致性的原则&#xff0c;就是保证主从库之间的数据一定要一致。如果一个方法涉及到写的逻辑&#xff0c;那么该方法里所有的数据库操作都要走主库。 一、环境部署 数据库&#xff1a;…...

胎神游戏集第二期

延续上一期 一、海岛奇胎 #include<bits/stdc.h> #include<windows.h> #include<stdio.h> #include<conio.h> #include<time.h> using namespace std; typedef BOOL (WINAPI *PROCSETCONSOLEFONT)(HANDLE, DWORD); PROCSETCONSOLEFONT SetCons…...

Unicode/ASCII/UTF的关系(模板字面量、模板字符串、占位符)

字符串&#xff1a;编程时最重要的数据类型之一。 正则表达式&#xff1a;赋予开发者更多操作字符串的能力。 1、 Unicode和ASCII 1.1 概述 Unicode是ASCII字符编码的一个扩展&#xff0c;只不过在Windows中&#xff0c;用两个字节对其进行编码&#xff0c;也称为宽字符集&…...

三、低代码平台-单据配置(单表增删改查)

一、业务效果图 主界面 二、配置过程简介 配置流程&#xff1a;业务表设计 -》业务对象建立-》业务单据配置-》菜单配置。 a、业务表设计 b、业务对象建立 c、业务单据配置 功能路径&#xff1a;低代码开发平台/业务开发配置/单据配置维护 d、菜单配置...

6.1 数据驱动型业务管理方法(3%)

1 数据的产生与应用 1.数据的产生 2.数据的特征 3.数据的应用过程 应用到决策过程中 4.从决策到执行 决策&#xff1a;靠经验来进行决策&#xff08;80%&#xff09;&#xff1b;可依据数据辅助&#xff08;20%&#xff09; 经验比数据重要的多&#xff0c;数据是辅助&…...

JVM学习目录

JVM ✅ JVM运行时内存结构 ✅ JVM常用启动参数 ✅ JVM内存分配与垃圾收集流程 ✅ 什么是垃圾回收机制&#xff08;Garbage Collection&#xff0c;简称GC&#xff09; ✅ 如何调用垃圾回收器的方法 ✅ GC如何判定对象已死 ✅ 方法区的垃圾收集 ✅ 垃圾收集算法 ✅ JVM垃圾回…...

使用远程桌面连接工具上传文件到Windows轻量应用服务器时,如何优化文件传输速度?

使用远程桌面连接工具上传文件到Windows轻量应用服务器时&#xff0c;如何优化文件传输速度&#xff1f; 优化网络连接&#xff1a;确保网络连接稳定和畅通&#xff0c;使用有线网络连接代替无线网络&#xff0c;以减少网络延迟和提高文件传输速度。 调整远程桌面设置&#xf…...

【Linux】基本指令(下)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:Linux ⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位) 日志 日志的概念: 网络设备、系统及服务程序等&#xff0c;在运作时都会产生一个叫log的事件记录&#xff1b;每一行日志都记载着日期、时间、使用者及动作等相关…...

LeetCode受限条件下可到达节点的数目

题目描述 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。 给你一个二维整数数组 edges &#xff0c;长度为 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数组 restr…...

[Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包

一、设置应用包名 在Flutter开发中&#xff0c;修改应用程序的包名&#xff08;也称作Application ID&#xff09;涉及几个步骤&#xff0c;因为包名是在项目的Android和iOS平台代码中分别配置的。请按照以下步骤操作&#xff1a; 1.Android Flutter工程中全局搜索替换包名 …...

electron-release-server部署electron自动更新服务器记录

目录 一、前言 环境 二、步骤 1、下载上传electron-release-server到服务器 2、宝塔新建node项目网站 3、安装依赖 ①npm install ②安装并配置postgres数据库 ③修改项目配置文件 ④启动项目 ⑤修改postgres的认证方式 ⑥Cannot find where you keep your Bower p…...

贪心(基础算法)--- 区间选点

905. 区间选点 思路 &#xff08;贪心&#xff09;O(nlogn) 根据右端点排序 将区间按右端点排序 遍历区间&#xff0c;如果当前区间左端点不包含在前一个区间中&#xff0c;则选取新区间&#xff0c;所选点个数加1&#xff0c;更新当前区间右端点。如果包含&#xff0c;则跳…...

JAVA计算表达式

需求&#xff1a; 1、例如if(score>85){return 1;}else if(score>70){return 2;}else if(score>60){return 3;}else{return 4;}有这一串字符串&#xff0c;要执行这个字符串&#xff0c; 如果score为86分&#xff0c;则能得到1&#xff1b;如果score为30分&#xff…...

【复现】宏景HCM 任意文件读取漏洞_63

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 宏景HCM 将人才标签技术应用于员工招聘、人才选拔等环节&#xff0c;通过多维度的标签体系&#xff0c;形成不同专业序列的人才画…...

Linux:kubernetes(k8s)搭建mater节点(kubeadm,kubectl,kubelet)(2)

安装k8有多种方式如&#xff1a; minikube kubeadm 二进制安装 命令行工具 我这里就使用kubeadm进行安装 环境 3台centos7 master ip &#xff1a;192.168.113.120 2G运存 2内核 node1 ip &#xff1a;192.168.113.121 2G运存 2内核 node2 ip &#xff1a;192.168.1…...

Web应用安全威胁与防护措施

本文已收录至《全国计算机等级考试——信息 安全技术》专栏 由于极其容易出现漏洞、并引发安全事故&#xff0c;因此数据隐私的保护是目前绝大多数企业不可绕过的运维环节。不过&#xff0c;许多中小型企业往往会错误地认为只有大型企业才会成为黑客的目标。而实际统计数字却截…...

MySQL相关知识汇总

MySQL是一个广泛使用的开源关系型数据库管理系统&#xff0c;它以其高性能、稳定性和易用性而备受开发者喜爱。在软件开发领域&#xff0c;无论是大型项目还是小型应用&#xff0c;MySQL都扮演着重要的角色。本文将对MySQL的一些关键知识点进行汇总&#xff0c;帮助读者更好地了…...

【旧文搬运】为你的 Laravel 应用添加一个基于 Swoole 的 WebSocket 服务

做了一个基于 Swoole 的 WebSocket 扩展包&#xff0c;可以用来做实时状态推送&#xff0c;或者自定义消息处理实现 im&#xff0c;有需要的可以看看: [giorgio-socket] 使用方法 安装 安装扩展包 composer require wu/giorgio-socket发布配置文件 php artisan vendor:pu…...

MacBook新手福音:用Final Cut Pro 10.6.5搞定你的第一门视频课(附保姆级设置与导出指南)

MacBook新手福音&#xff1a;Final Cut Pro 10.6.5视频课制作全流程精解第一次打开Final Cut Pro时&#xff0c;那个布满陌生术语的界面是否让你望而却步&#xff1f;作为Mac用户专属的视频剪辑利器&#xff0c;它其实远比想象中友好。本文将带你用最直接的方式&#xff0c;从零…...

【架构实战】解决长文本多轮对话中的“上下文腐化”问题:基于 Multi-Agent 的异步调度引擎设计

大家好&#xff0c;最近在研究 LLM 辅助编程和多角色对话时&#xff0c;我发现了一个非常头疼的问题&#xff1a;“上下文腐化”&#xff08;Context Rot&#xff09;。 当你在一个 Session 里塞入多个 System Prompt&#xff08;比如试图让几个不同的 AI 角色在一个群里聊天&…...

保险领域AutoML实战:从数据不平衡到模型部署的端到端解决方案

1. 项目概述&#xff1a;当AutoML遇上保险数据在保险行业摸爬滚打了十几年&#xff0c;从最初用Excel做简单的赔付率分析&#xff0c;到后来引入逻辑回归、决策树&#xff0c;再到如今面对动辄上百个特征、千万级样本的复杂数据集&#xff0c;我深刻体会到一件事&#xff1a;构…...

30+平台文档一键免费下载:浏览器文档下载工具的终极解决方案

30平台文档一键免费下载&#xff1a;浏览器文档下载工具的终极解决方案 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档&#xff0c;但是相关网站浏览体验不好各种广告&#xff0c;各种登录验证&#xff0c;需要很多步骤才能下载文档&#xff0c;该脚本就是…...

BetterGI:解放双手的5大自动化场景终极解决方案

BetterGI&#xff1a;解放双手的5大自动化场景终极解决方案 【免费下载链接】better-genshin-impact &#x1f4e6;BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音游 | 自动烹饪…...

Claude Code 2026 全命令实战:6分钟开发完整坦克对战游戏

文章目录前言第一步&#xff1a;新建文件夹&#xff0c;然后输入一个单词第二步&#xff1a;/plan命令&#xff0c;比产品经理还贴心的规划师第三步&#xff1a;看着AI写代码&#xff0c;自己在旁边喝咖啡第四步&#xff1a;/rewind命令&#xff0c;程序员的后悔药第五步&#…...

App爬虫实战:突破SSL Pinning、动态签名与设备指纹的五层反爬

1. 这不是写个 requests 就能跑通的“爬虫”&#xff0c;而是一场持续数月的攻防拉锯战“App 父亲”这个词在移动互联网圈里没人真叫&#xff0c;但所有做过 App 数据采集的人心里都清楚——你面对的从来不是一串 API 接口&#xff0c;而是一个被精心加固、层层设防、会主动识别…...

零起点Python机器学习快速入门【1.1】

1.4 机器学习经典案例目前人工智能、机器学习正处于黄金时期&#xff0c;各种应用随处可见&#xff0c;以下是一些常见的机器学习应用案例。 机器人客服&#xff1a;当你拨打移动、银行等公司的服务热线时&#xff0c;大部分都是通过人工智能技术合成的电脑客服在和你沟通&am…...

中小团队如何利用taotoken统一管理多个ai项目api成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 中小团队如何利用 Taotoken 统一管理多个 AI 项目 API 成本 当团队同时推进多个 AI 应用原型或项目时&#xff0c;一个常见的挑战随…...

AutoCut视频剪辑革命:用文本编辑实现智能视频剪辑的完整指南

AutoCut视频剪辑革命&#xff1a;用文本编辑实现智能视频剪辑的完整指南 【免费下载链接】autocut 用文本编辑器剪视频 项目地址: https://gitcode.com/GitHub_Trending/au/autocut 还在为复杂的视频剪辑软件而头疼吗&#xff1f;是否梦想着能像编辑Word文档一样轻松剪辑…...