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

Pytest系列-快速入门和基础讲解(1)

前言

  • 目前有两种纯测试的测试框架,pytestunittest
  • unittest应该是广为人知,而且也是老框架了,很多人都用来做自动化,无论是UI还是接口
  • pytest是基于unittest开发的另一款更高级更好用的单元测试框架

单元测试框架介绍

  • 单元测试框架是在自动化测试或者白盒测试中对软件的最小单元(函数、方法)进行测试的框架
  • 单元测试框架的分类:python(unitest、pytest)、Java(Testing(主流)、Junit)
  • 单元测还框架主要做什么
    • 发现测试用例
    • 执行测试用例
    • 判断测试结果
    • 生成测试报告

为什么要用Pytest

pytest 的官方网站介绍,它具有如下特点:
1、非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
2、能够支持简单的单元测试和复杂的功能测试
3、支持参数化
4、执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
5、支持重复执行(rerun)失败的 case
6、支持运行由 nose, unittest 编写的测试 case
7、可生成 html 报告
8、方便的和持续集成工具 jenkins 集成
9、可支持执行部分用例
10、具有很多第三方插件,并且可以自定义扩展

Pytest安装、简介以及常用插件安装

Pytest安装

cmd运行

pip install -U pytestpip3 install pytest -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

pycharm 直接安装
在这里插入图片描述

查看版本

pytest --version

Pytest简介及常用插件安装

pytest官方文档 : https://docs.pytest.org/en/latest/contents.html

在这里插入图片描述
步骤:打开Pycharm,在项目根路径下面 创建一个.txt的文件夹,将要安装的插件放进去 (注:使用此方法是在虚拟环境安装 DOS环境会安装不成功
在这里插入图片描述
打开控制台 输入安装语句 进行安装:
在这里插入图片描述
上面方法可能安装不成功,直接在terminal 单个安装也可以
在这里插入图片描述

Pytest 默认测试用例的规则以及基础应用

Pytest 用例设计的规则

用Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的
1、文件名必须以test_.py 文件开头和test.py结尾
2、以 test
开头的函数
3、以 test 开头的类,且不能包含 _ _ init_ _ 方法
4、以 test_ 开头的类里面的方法
5、所有的包 package 必须要有__init__.py 文件

Pytest执行基础应用

    **执行:Alt+Enter自动导报**

1、通过命令行执行方式执行,再terminal 和 cmd 中 直接执行。

pytest  			执行某个目录下所有的用例
pytest 脚本名称.py	执行某一个 py 文件下用例

执行参数:
(1)运行start.py 模块里面的某个函数,或者某个类,某个类里面的方法
-v 和不加 -v 都可以,加 -v 的话,打印的信息更详细

pytest -v 08_mark.py::TestClass::test_methodpytest 08_mark.py::TestClass::test_methodpytest test.py::test_answer

(2)运行start.py 模块里面,测试类里面的某个方法

pytest start.py::TestClass::test_two

(3) -m 标记表达式(先了解)

 pytest -m login

将运行用 @pytest.mark.login 装饰器修饰的所有测试
(4)-q 简单打印,只打印测试用例的执行结果

在这里插入代码片
pytest -q test.py

(5)-s 详细打印 (输出调试信息)

 pytest -s test.py

(6)-x 遇到错误时停止测试

 pytest test.py -x

(7)—maxfail=num,当用例错误个数达到指定数量时,停止测试

 pytest test.py --maxfail=1

(8)-k 匹配用例中包含某个字符串的名称
执行测试用例名称包含http的所有用例

pytest -s -k http test.py

(9)-k 根据用例名称排除某些用例

1 pytest -s -k "not http" start.py

(10)-k 同时匹配不同的用例名称

pytest -s -k "method or weibo" start.py

(11)-n=num 多线程运行(插件:pytest-cdist 已安装成功)

pytest  -vs -n=2     两个线程一起执行

(12)–reruns=num 失败重跑, num 是重跑的次数(插件:pytest-rerunfailres 安装成功)
一个进程里面有多个线程

raise Exception()  抛出异常
try except  解决异常pytest -vs --reruns=2   抛出异常后重新执行两次

(13)–html 生成html报告 (插件:pytest-html 已安装成功)

pytest --vs --html ./reporters/result.html   后面是存放的位置

2、通过主函数main方式执行,直接在代码运行文件最后添加。

if __name__=='__main__';pytest.mian()

在项目名称下添加运行文件也可以执行:

if __name__=='__main__';pytest.mian(["-vs"])

3、通过配置文件pytest.ini文件执行
注意
① 一般放在项目的根目录下,名称必须是pytest.ini;

② 编码格式为 ANSI;当有中文时可能需要改变编码格式为UTF-8或GB2312 ;

③ pytest.ini文件可以改变默认的测试用例规则;

④ 不管是命令行也好还是说主函数运行也好,都会加载这个配置文件。
举例:

[pytest]        #配置文件
#参数
addopts = -vs -m "smoke" #表示 只执行smoke用例testpaths = ./testcases  #测试用例的位置python_files = test_*.py  #python文件名的规则,会执行对应文件的测试用例python_classes = Test* #python文件类名的规则,对应文件会执行测试用例python_functions = Test_*  #python文件方法名的规则,对应文件会执行测试用例
------------------------------------------------
#测试用例分组执行。有时候用例多只执行个别模块的可以对测试用例进行分组执行。
#标记
markers =smoke:冒烟用例denglu:登录product_manage:商品管理.....
#代码文件中的测试用例上面添加使用
@pytest.mark.smoke

Pycharm运行Pytest

1、首先,要去settings里面设置单元测试框架为Pytest
2、如果是nosetests的话,右键运行是以python脚本运行的
3、如果设置了unittest则是以unittest框架去运行
在这里插入图片描述
在这里插入图片描述

注意

pytest 是可以兼容 unittest 脚本的,写的 unittest 用例也能用 pytest 框架去运行。

Pytest跳过测试用例

无条件跳过

在测试用例上方填写代码

class Testcase@pytest.mark.skip(reason='无理由跳过')def test_01(self):print("测试")

有条件跳过

在已有条件不满足的情况下,选择跳过

class Testcase:work=1@pytest.mark.skipif(work<1,reason="工作少于1年跳过")def test_01(self):print("测试")

相关文章:

Pytest系列-快速入门和基础讲解(1)

前言 目前有两种纯测试的测试框架&#xff0c;pytest和unittestunittest应该是广为人知&#xff0c;而且也是老框架了&#xff0c;很多人都用来做自动化&#xff0c;无论是UI还是接口pytest是基于unittest开发的另一款更高级更好用的单元测试框架 单元测试框架介绍 单元测试…...

微信小程序实现连续签到七天

断签之后会从第一天重新开始 <template><view class"content" style"height: 100vh;background: white;"><view class"back"><view style"position: absolute;bottom: 200rpx;left: 40rpx;width: 90%;"><i…...

将 Spring Boot 应用程序与 Amazon DocumentDB 集成

Amazon DocumentDB&#xff08;与 MongoDB 兼容&#xff09;是一种可扩展、高度持久和完全托管的数据库服务&#xff0c;用于操作任务关键型 MongoDB 工作负载。在 Amazon DocumentDB 上&#xff0c;您可以使用相同的 MongoDB 应用程序代码、驱动程序和工具来运行、管理和扩展工…...

前端小案例1:用css实现蒙层效果

前端小案例1&#xff1a;用css实现蒙层效果 我想要在react的函数组件中实现如下效果&#xff1a;首先dom结构中有一个slider组件用于展示当前的亮度条&#xff0c;如果在 flag为true的情况下&#xff0c;就给当前页面上覆盖一张透明度为0.8图片。有一个按钮会切换flag的值。 …...

RTMP流媒体服务器EasyDSS视频点播平台在不关闭防火墙的情况下平稳部署的具体步骤

EasyDSS视频直播点播平台提供了视频转码、点播、直播、推拉流、录像、回放等功能&#xff0c;可应用在AR、VR、无人机推流、虚拟直播、教育培训、远程会议等多样化的场景中。 通常我们在部署EasyDSS时都建议用户关闭防火墙的&#xff0c;但是也有无需关闭防火墙的部署办法&…...

QT中信号与槽机制的介绍,以及信号与槽连接的几种方式

信号与槽机制 信号与槽的介绍 功能&#xff1a;实现多个组件之间的相互通信&#xff0c;是QT引以为傲的核心机制信号&#xff1a;就是信号函数&#xff0c;定义在类体的signals权限下&#xff0c;是一个不完整的函数&#xff0c;只有声明没有定义&#xff1b;槽&#xff1a;就…...

学习笔记——Java入门第二季

1.1 介绍类与对象 类和对象的关系&#xff1a; 时间万物皆对象。对象是具体的事物&#xff0c;是类的具体事例 类是抽象的概念&#xff0c;是对象的模板。 new关键字是创建实例对象最重要的标志 Dog duoduonew Dog(); Dog luckynew Dog(); 这样就创建了两个对象并且在java内…...

计算机视觉的应用13-基于SSD模型的城市道路积水识别的应用项目

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用13-基于SSD模型的城市道路积水识别的应用项目。今年第11号台风“海葵”后部云团的影响&#xff0c;福州地区的降雨量突破了历史极值&#xff0c;多出地方存在严重的积水。城市道路积水是造成交通拥…...

【39元linux开发板-ADB远程教程】-[ADB远程终端]-幸狐Luckfox Pico-超越树莓派PICO

【教程-持续更新】 幸狐Luckfox Pico RV1103 教程合集 【39元linux开发板-ADB远程教程】-[ADB远程终端]-幸狐Luckfox Pico-超越树莓派PIC...

900ES1-0100 honeywell 可减少视觉引导应用的整体开发时间

900ES1-0100 honeywell 可减少视觉引导应用的整体开发时间 CV2视觉系统配有高柔性电缆(以太网或USB)。通过将高柔性电缆作为所有CV2视觉系统的标准配置&#xff0c;Epson CV2摄像机可以安装在机器人臂(移动)或固定装置(固定)上。基于向导的校准使机器人到视觉系统的校准变得轻…...

Openvslam

文章目录 Openvslam 学习报告什么是Openvslam概念特点 安装和运行OpenVSLAM克隆源代码安装依赖库测试&#xff08;环境已经安装成功&#xff09;运行运行失败的总结运行成功 系统设计模块和函数接口调用流程流程图参考资料 Openvslam 学习报告 什么是Openvslam 概念 OpenVSL…...

Windows通过RDP异地远程桌面Ubuntu【内网穿透】

文章目录 前言1. ubuntu安装XRDP2.局域网测试连接3.安装cpolar内网穿透4.cpolar公网地址测试访问5.固定域名公网地址 前言 XRDP是一种开源工具&#xff0c;它允许用户通过Windows RDP访问Linux远程桌面。 除了Windows RDP外&#xff0c;xrdp工具还接受来自其他RDP客户端(如Fre…...

js 基础 (ES 模块)

ES 模块语法 1、模块化的背景 JavaScript 程序本来很小——在早期&#xff0c;它们大多被用来执行独立的脚本任务&#xff0c;在你的 web 页面需要的地方提供一定交互&#xff0c;所以一般不需要多大的脚本。过了几年&#xff0c;我们现在有了运行大量 JavaScript 脚本的复杂…...

K8s 多集群实践思考和探索

作者&#xff1a;vivo 互联网容器团队 - Zhang Rong 本文主要讲述了一些对于K8s多集群管理的思考&#xff0c;包括为什么需要多集群、多集群的优势以及现有的一些基于Kubernetes衍生出的多集群管理架构实践。 一、为什么需要多集群 随着K8s和云原生技术的快速发展&#xff0c…...

德国金融监管机构网站遭遇大规模DDoS攻击后“瘫痪”

德国波恩的BaFin大楼 BaFin是负责监督和监管德国金融机构和市场的金融监管机构&#xff0c;其职责是确保德国金融体系的稳定性、完整性和透明度。 此外&#xff0c;BaFin 的网站还为企业和消费者提供银行、贷款和财产融资等方面的信息。它还提供消费者帮助热线和举报人信息共…...

关于特殊时期电力行业信息中心运营思路

一、防御思路 安全运营是一系列规则、技术和应用的集合&#xff0c;用以保障组织核心业务平稳运行的相关活动&#xff0c;是通过灵活、动态的实施控制以期达到组织和业务需要的整体范围可持续性正常运行。信息中心在特殊时期扮演着关键的角色&#xff0c;因此需要精心设计运营…...

机器人中的数值优化(八)——拟牛顿方法(上)

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…...

mac安装adobe需要注意的tips(含win+mac all安装包)

M2芯片只能安装2022年以后的&#xff08;包含2022年的&#xff09; 1、必须操作的开启“任何来源” “任何来源“设置&#xff0c;这是为了系统安全性&#xff0c;苹果希望所有的软件都从商店或是能验证的官方下载&#xff0c;导致默认不允许从第三方下载应用程序。macOS sie…...

C/C++学习网址

1、http://snippets.dzone.com/tag/c/ --数以千计的有用的C语言源代码片段 2、http://www.hotscripts.com/category/c-cpp/scripts-programs/ Hotscripts --提供数以百计的C和C脚本和程序。所有程序都分为不同的类别。 3、http://www.planetsourcecode.com/vb/default.asp?lng…...

Typora导出的PDF目录标题自动加编号

Typora导出的PDF目录标题自动加编号 在Typora主题文件夹增加如下文件后&#xff0c;标题便自动加上了编号&#xff1a; https://gitcode.net/as604049322/blog_data/-/blob/master/base.user.css 例如&#xff1a; 但是导出的PDF中&#xff0c;目录却没有编号&#xff1a; 这…...

消息队列的缓冲作用:不止于临时暂存

在分布式系统架构中&#xff0c;消息队列常被提及的一个核心价值是“解耦”。然而&#xff0c;除了降低系统间的直接依赖之外&#xff0c;消息队列还承担着另一个关键角色——缓冲。很多人直观地感受到“消息队列能起到缓冲效果”&#xff0c;但这种缓冲究竟意味着什么&#xf…...

终极游戏画质升级指南:用OptiScaler解锁全显卡超采样自由

终极游戏画质升级指南&#xff1a;用OptiScaler解锁全显卡超采样自由 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler OptiScaler是…...

智能家居选遥控器?RF 2.4G vs 蓝牙 vs IR 保姆级对比指南

智能家居遥控技术终极对决&#xff1a;RF 2.4G vs 蓝牙 vs IR 深度解析 当你深夜躺在沙发上想调暗灯光&#xff0c;却发现必须起身对准空调才能操作——这种尴尬正是选错遥控技术的代价。智能家居的"最后一米"控制体验&#xff0c;往往取决于那只看不见的传输协议。本…...

纹理识别必备!5个高质量数据集下载与使用指南(附避坑技巧)

纹理识别实战指南&#xff1a;五大高价值数据集深度解析与应用技巧 纹理识别作为计算机视觉领域的重要分支&#xff0c;在工业质检、自动驾驶、医疗影像等场景中发挥着关键作用。但许多开发者在数据集获取和预处理阶段就会遇到各种"暗坑"——从下载链接失效到标注格式…...

Altium Designer新手必看:5分钟搞定PCB封装库创建(附3D模型导入技巧)

Altium Designer新手实战&#xff1a;从零构建PCB封装库与3D模型高效导入 刚接触Altium Designer的工程师常被PCB封装库的创建难住——焊盘尺寸怎么定&#xff1f;丝印如何对齐&#xff1f;3D模型能否可视化验证&#xff1f;这些问题直接关系到后期PCB设计的成功率。本文将用最…...

Python AOT编译迎来分水岭:2026年3大工业级工具实测对比(启动提速8.7×,内存降63%,兼容CPython 3.13+)

第一章&#xff1a;Python AOT编译的范式跃迁与工业落地元年定义长期以来&#xff0c;Python 以解释执行和动态特性见长&#xff0c;但其运行时开销、启动延迟与内存 footprint 成为云原生服务、边缘设备与实时系统规模化部署的关键瓶颈。2024 年&#xff0c;随着 Nuitka 14.x、…...

Vivado IP封装实战:从源码到GUI配置的完整避坑指南(含EDF/DCP对比)

Vivado IP封装实战&#xff1a;从源码到GUI配置的完整避坑指南&#xff08;含EDF/DCP对比&#xff09; 在FPGA开发中&#xff0c;团队协作和代码共享是常见需求&#xff0c;但如何平衡代码保护与功能灵活性一直是开发者面临的难题。Vivado提供了多种模块封装方案&#xff0c;每…...

OpenClaw多模态扩展:结合百川2-13B-4bits与OCR的图像信息处理流程

OpenClaw多模态扩展&#xff1a;结合百川2-13B-4bits与OCR的图像信息处理流程 1. 为什么需要多模态能力扩展&#xff1f; 上周我需要整理一批技术文档的截图&#xff0c;包含代码片段、错误日志和流程图。手动转录不仅耗时&#xff0c;还容易出错。这让我开始思考&#xff1a…...

3月技术风暴:程序员的范式革命——2026年3月科技大事件记录

2025年3月&#xff1a;颠覆性技术狂潮与程序员认知升维全纪录 3月结束&#xff0c;你感受到“版本迭代”的压力了吗&#xff1f; 2025年的春天不是春暖花开&#xff0c;而是技术奇点的“温度骤升”。本文绝非一份普通事件清单&#xff0c;而是用程序员的第一性原理&#xff0c;…...

DeerFlow免运维部署:自动日志监控与服务启动检测

DeerFlow免运维部署&#xff1a;自动日志监控与服务启动检测 1. 认识你的深度研究助理&#xff1a;DeerFlow 想象一下&#xff0c;你有一个不知疲倦的研究助手。它能帮你搜索全网信息、分析复杂数据、撰写专业报告&#xff0c;甚至还能把枯燥的研究结果变成一段生动的播客。听…...