pytest 框架学习总结
视频:pytest01-快速上手_哔哩哔哩_bilibili
资料:pytest 框架 - 白月黑羽
基于 Python 语言的自动化测试框架 最知名的 有如下 3 款unittest、pytest、robotframework
前两款框架主要(或者说很大程度上)是 聚焦 在 白盒单元测试而 robotframework 主要聚焦在 系统测试。
pytest可以利用第三方插件,生成表报。
安装:
安装直接执行命令:pip install pytest
还需要产生测试报表,执行如下命令安装:pip install pytest-html
快速上手:
测试用例代码规格:我们编写的测试用例代码文件, 必须以 test_ 开头,或者以 _test 结尾
要求:类名(Class 类名)必须以Test为前缀,其中的类方法(def 类方法)必须以test为前缀。
pytest 中用例的检查点 直接用 Python 的 assert 断言。assert 后面的表达式结果 为 True ,就是 检查点 通过,结果为False ,就是检查点 不通过。和hytest中的check_point()方法不一样。
执行:pytest 或者pytest+对应目录。直接执行 pytest 命令不会将当前目录设置为模块搜索路径
所以更推荐 执行命令 python -m pytest 。
目前 项目根目录 中 只有一个cases 目录用例存放测试用例, 将来还会有其他目录,比如:lib目录存放库代码、cfg目录存放配置数据 等等。为了防止 pytest 到其他目录中找测试用例项,执行测试时,我们可以在命令行加上目标目录 cases ,就是这样:python -m pytest cases
产生报告:python -m pytest cases --html=report.html --self-contained-html
初始化清除:
对自动化测试框架来说,初始化清除功能 至关重要。
模块级别:模块级别 的初始化、清除 分别 在整个模块的测试用例 执行前后执行,并且 只会执行1次 。定义 setup_module 和 teardown_module 全局函数。和hytest中的名称不一样。
def setup_module():print('\n *** 初始化-模块 ***')def teardown_module():print('\n *** 清除-模块 ***')
类级别:类级别 的初始化、清除 分别 在整个类的测试用例 执行前后执行,并且 只会执行1次。定义 setup_class 和 teardown_class 类方法。主要是用来为该 类 中的所有测试用例做 公共的 初始化 和 清除。
def setup_module():print('\n *** 初始化-模块 ***')def teardown_module():print('\n *** 清除-模块 ***')class Test_错误密码:@classmethoddef setup_class(cls):print('\n === 初始化-类 ===')@classmethoddef teardown_class(cls):print('\n === 清除 - 类 ===')
方法级别:方法级别 的初始化、清除 分别 在类的 每个测试方法 执行前后执行,并且 每个用例分别执行1次。定义 setup_method 和 teardown_method 实例方法
class Test_错误密码:@classmethoddef setup_class(cls):print('\n === 初始化-类 ===')@classmethoddef teardown_class(cls):print('\n === 清除 - 类 ===')def setup_method(self):print('\n --- 初始化-方法 ---')def teardown_method(self):print('\n --- 清除 -方法 ---')
目录级别:目标级别的 初始化清除,就是针对整个目录执行的初始化、清除。需要在初始化的目录下面创建 一个名为 conftest.py 的文件,里面内容如下所示
import pytest @pytest.fixture(scope='package',autouse=True)
def st_emptyEnv():print(f'\n#### 初始化-目录甲')
//这里清除环境的代码就是 yield 之后的代码。 这是一个生成器yieldprint(f'\n#### 清除-目录甲')
挑选用例执行:
指定一个模块:python -m pytest cases\登录\test_错误登录.py
指定目录:python -m pytest cases
指定模块里面的函数或者类:python -m pytest cases\登录\test_错误登录.py::Test_错误密码
根据名字:使用 命令行参数 -k 后面加名字来挑选要执行的测试项.
例如:python -m pytest -k C001001 -s
-k 后面的名字:可以是测试函数的名字,可以是类的名字,可以是模块文件名,可以是目录的名字;是大小写敏感的;不一定要完整,只要能有部分匹配上就行;可以用 not 表示选择名字中不包含。
根据标签:需要先给标签,然后再使用此方法-m。标签也支持中文.
import pytestclass Test_错误密码2:@pytest.mark.webtest //或者@pytest.mark.网页测试def test_C001021(self):print('\n用例C001021')assert 1 == 1
然后,可以这样运行指定标签的用例:python -m pytest cases -m webtest -s
Pytest 助手:
大佬开发的助手。看看即可。
实战案例:
这样执行命令
python -m pytest cases -sv
因为 -m 这种执行模块的方式运行python, 会自动把当前工作目录作为模块搜索路径,这样就能避免Python解释器 搜索不到 库文件的问题 ModuleNotFoundError: No module named 'xxxx'。
但是,实际上仍然会出现这种问题。如果以上方法没能解决。可以尝试使用:pip install pytest。
这样就会在类方法旁边形成一个可以运行的按钮。直接点击运行按钮即可。
数据驱动:
和hytest的用法一样。只是方法名不一样。简约很多了!!!
class Test_错误登录:@pytest.mark.parametrize('username, password, expectedalert', [(None, '88888888', '请输入用户名'),('byhy', None, '请输入密码'),('byh', '88888888', '登录失败 : 用户名或者密码错误'),('byhy', '8888888', '登录失败 : 用户名或者密码错误'),('byhy', '888888888', '登录失败 : 用户名或者密码错误'),])def test_UI_0001_0005(self, username, password, expectedalert):alertText = loginAndCheck(username, password)assert alertText == expectedalert
调试:
添加断点。
使用 fixture(清除):
使用方法:相比前面讲的初始化清除方法,fixture 最大的特点是:声明式使用。就是:测试方法需要那个初始化清除,就在参数里面声明它。先来看初始化:其实就是依赖注入。
# 定义一个fixture函数 @pytest.fixture def createzhangSan(): 。。。 //会先执行此函数方法
这就是 pytest 的 denpendcy injection 中文称之为 : 依赖注入 。
清除:如果需要清除,最推荐的使用 yield 代替 return , yield后面的代码就是清除部分的代码。
fixture 参数:需要根据参数来创建不同的用户,就需要使用 parametrize 装饰器,并指定参数 indirect=True
fixture学的东西较多,暂时跳过,后面用到时可以翻阅资料在写。
相关文章:
pytest 框架学习总结
视频:pytest01-快速上手_哔哩哔哩_bilibili 资料:pytest 框架 - 白月黑羽 基于 Python 语言的自动化测试框架 最知名的 有如下 3 款unittest、pytest、robotframework 前两款框架主要(或者说很大程度上)是 聚焦 在 白盒单元测试…...
总结 HTTP 协议的基本格式, 相关知识以及抓包工具fiddler的使用
目录 1 HTTP是什么 2 HTTP协议格式 3 HTTP请求(Request) 3.1 认识URL 3.2 方法 3.3 认识请求"报头"(header) 4 HTTP响应详解 4.1 认识"状态码"(statuscode) 4.2 认识响应"报头"(header) 4.3 认识响应"正⽂"(body) 5 通过f…...
python中的max(),需要注意的点
words ["apple", "banana", "grape", "cherry"] 对每个单词,keylambda x: len(x) 会计算它的长度: "apple" 长度是 5"banana" 长度是 6"grape" 长度是 5"cherry" 长度…...
DeepSeek-R1大模型微调技术深度解析:架构、方法与应用全解析
1. DeepSeek-R1大模型架构设计与技术特性 1.1 架构设计 DeepSeek-R1作为超大规模语言模型,其核心架构设计包含以下创新: 专家混合架构(MoE) 采用6710亿参数的混合专家架构(MoE),每个推理过程仅激活370亿参数,实现计算效率与资源利用率的突破性提升。 Transformer框架…...
探索Maas平台与阿里 QWQ 技术:AI调参的魔法世界
摘要:本文介绍了蓝耘 Maas 平台在人工智能领域的表现及其核心优势,包括强大的模型支持、高效的资源调度和友好的操作界面。文章还探讨了蓝耘 Maas 平台与阿里 QWQ 技术的融合亮点及应用拓展实例,并提供了调参实战指南,最后对蓝耘 …...
Linux第三次练习
1、创建根目录结构中的所有的普通文件 首先在根目录下面新创建一个test目录,然后将查找到的普通文件新建到test目录下 2、列出所有账号的账号名 3、将/etc/passwd中内容按照冒号隔开的第三个字符从大到小排序后输出所有内容 4、列出/etc/passwd中的第20行-25行内容…...
软件测试知识总结
1、黑盒测试、白盒测试、灰盒测试 1.1 黑盒测试 黑盒测试又叫功能测试、数据驱动测试 或 基于需求规格说明书的功能测试。该类测试注重于测试软件的功能性需求。 采用这种测试方法,测试工程师把测试对象看作一个黑盒子,完全不考虑程序内部的逻辑结构和…...
JConsole 监控线程池状态
JConsole 可以用来监控 Java 线程池(ThreadPoolExecutor)的状态,包括线程数量、任务执行情况、CPU 及内存使用情况等。下面是具体的操作步骤: 一、启动 JConsole 1. 启动 JConsole Windows:在 JDK bin 目录下找到 j…...
【HTML】三、表单与布局标签
文章目录 1、input1.1 input的占位文案1.2 单选框1.3 上传文件1.4 多选框 2、 下拉菜单3、文本域:多行输入4、label标签:说明与增大点击范围5、按钮与form表单6、无语义布局标签7、有语义的布局标签8、字符实体9、练习:注册页面 1、input in…...
OpenBMC:BmcWeb添加路由1 getParameterTag
BmcWeb对于路由的设计其实是参考了Crow BMCWEB_ROUTE(app, "/upload/image/<str>").privileges({{"ConfigureComponents", "ConfigureManager"}}).methods(boost::beast::http::verb::post, boost::beast::http::verb::put)([](const cro…...
【结构设计】3D打印创想三维Ender 3 v2
【结构设计】3D打印创想三维Ender 3 v2 文章目录 前言一、Creality Slicer1.2.3打印参数设置二、配件更换1.捆扎绑扎线2.气动接头3D打印机配件插头3.3D打印机配件Ender3pro/V2喷头套件4.读卡器 TF卡5.micro sd卡 三、调平四、参考文章总结 前言 使用工具: 1.创想三…...
嵌入式web服务器实现上传下载储存研究
标题:嵌入式web服务器实现上传下载储存研究 内容:1.摘要 随着互联网与嵌入式系统的不断融合,嵌入式设备对数据上传、下载及储存功能的需求日益增长。本文旨在研究嵌入式web服务器实现上传、下载和储存功能的有效方法。通过分析常见的嵌入式web服务器架构࿰…...
UE小:UE5.5 PixelStreamingInfrastructure 使用时注意事项
1、鼠标默认显示 player.ts中的Config中添加HoveringMouse:true 然后运行typescript\package.json中的"build":npx webpack --config webpack.prod.js...
Anaconda 入门指南
Anaconda 入门指南 一、下载安装 Anaconda 1、下载地址:Anaconda 推荐下载 python3 版本, 毕竟未来 python2 是要停止维护的。 2、安装 Anaconda 按照安装程序提示一步步安装就好了, 安装完成之后会多几个应用: Anaconda Navigtor :用于管…...
web组态可视化编辑器
Web组态可视化编辑器是一种用于创建和配置工业自动化、物联网(IoT)和智能建筑等领域的图形化用户界面(GUI)的工具。它允许用户通过拖放组件、配置参数和连接数据源来设计和部署实时监控和控制界面。以下是一些常见的Web组态可视化…...
CTA重建:脑血管重建,CT三维重建,三维建模 技术,实现
CTA(CT血管造影)是一种基于CT扫描的医学成像技术,主要用于血管系统的三维重建和可视化。脑血管重建是CTA的重要应用之一,能够帮助医生诊断脑血管疾病(如动脉瘤、狭窄、畸形等)。以下是实现CTA脑血管重建、C…...
Ollama+OpenWebUI本地部署大模型
OllamaOpenWebUI本地部署大模型 前言Ollama使用Ollama安装Ollama修改配置Ollama 拉取远程大模型Ollama 构建本地大模型Ollama 运行本地模型:命令行交互Api调用Web 端调用 总结 前言 Ollama是一个开源项目,用于在本地计算机上运行大型语言模型࿰…...
如何打包数据库mysql数据,并上传到虚拟机上进行部署?
1.连接数据库,使得我们能看到数据库信息,才能进行打包上传 2. 3. 导出结果如下,是xml文件 4.可以查询每个xml文件的属性,确保有大小,这样才是真实导出 5跟着黑马,新建文件夹,并且把对应的东西放…...
Vue 自定义指令深度解析与应用实践
文章目录 1. 自定义指令概述1.1 核心概念1.2 指令生命周期 2. 自定义指令基础2.1 指令注册2.2 指令使用 3. 指令钩子函数详解3.1 钩子函数参数3.2 钩子函数示例 4. 自定义指令应用场景4.1 表单自动聚焦4.2 权限控制4.3 图片懒加载 5. 高级应用技巧5.1 动态指令参数5.2 指令修饰…...
Vue中有什么组件可以实现轮播效果,每次出现四个元素?
在 Vue 中实现「每次显示四个元素」的轮播效果,可以通过以下组件实现(推荐按优先级排序): 1. Swiper Vue-Awesome-Swiper(推荐) 特点: 最成熟的轮播库,支持复杂交互(触…...
Doris表的分区数量保持在多少范围内性能是最好的
在 Apache Doris 中,分区数量的最佳范围需结合数据规模、查询模式及集群资源动态调整,以下是根据最新版本(2025年)的实践总结和官方建议: 1. 分区数量与数据量的平衡原则 • 单分区数据量建议:每个分区的数…...
Android 手机启动过程
梳理 为了梳理思路,笔者画了一幅关于 Android 手机启动的过程图片内容纯属个人见解,如有错误,欢迎各位指正...
Unity 开发资源汇总 | 插件 | 模型 | 源码(不断更新中,建议收藏)
💓 欢迎访问 Unity 打怪升级大本营 Unity是一个强大的游戏开发平台,它提供了丰富的工具和资源,让开发者能够创造出令人惊叹的游戏和交互式体验。无论你是初学者还是经验丰富的开发者,Unity的生态系统中总有一些资源可以帮助你提升…...
JVM崩溃时产生的文件 hs_err.pid.log
hs_err.pid.log hs_err.pid.log:当jvm崩溃时,会生成一个hs_err_pid.log文件,并且把它存放到程序目录下,可以通过该文件来定位导致jvm崩溃的原因。 jvm崩溃,是由jvm自身的bug或者本地方法执行错误引起的,本…...
聊聊 Redis 的一些有趣的特性(上)
聊聊 Redis 的一些有趣的特性(上) 一、持久化 Redis 是内存数据库,数据全部保存在内存中。如果服务器发生宕机,内存中的数据将会全部丢失。为防止系统崩溃后数据丢失,Redis 提供了持久化功能,可将内存中的…...
使用OpenCV和MediaPipe库——抽烟检测(姿态监控)
目录 抽烟检测的运用 1. 安全监控 (1) 公共场所禁烟监管 (2) 工业安全 2. 智能城市与执法 (1) 城市违章吸烟检测 (2) 无人值守管理 3. 健康管理与医疗 (1) 吸烟习惯分析 (2) 远程监护 4. AI 监控与商业分析 (1) 保险行业 (2) 商场营销 5. 技术实现 (1) 计算机视…...
怎么有效降低知网AIGC率
在学术创作日益规范且数字化检测技术不断发展的当下,知网 AIGC 检测成为了众多创作者关注的焦点。许多人苦恼于如何有效降低知网 AIGC 率,让自己的作品在通过检测的同时,彰显出真实的创作水平与独特性。接下来,我们就深入探讨降低…...
C语言每日一练——day_8
引言 针对初学者,每日练习几个题,快速上手C语言。第八天。(连续更新中) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用…...
Mac中nvm切换node版本失败,关闭终端再次打开还是之前的node
Mac中使用 nvm 管理 node 版本,在使用指令:nvm use XXX 切换版本之后。 关闭终端,再次打开,输入 node -v 还是得到之前的 node 版本。 原因: 在这里这个 default 中有个 node 的版本号,使用 nvm use 时&a…...
更改 Windsuf 插件 Market
前言 之前一直用 VScode,现在全部迁移到 Windsuf 了,但是,Windsuf 默认的插件市场里没有我喜欢的主题……我又有点强迫症,所以,把Windsuf 默认的插件市场换成 VScode 的😑 不废话 原本的: 改…...
