Pytest系列-快速入门和基础讲解(1)
前言
- 目前有两种纯测试的测试框架,pytest和unittest
- 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)
前言 目前有两种纯测试的测试框架,pytest和unittestunittest应该是广为人知,而且也是老框架了,很多人都用来做自动化,无论是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(与 MongoDB 兼容)是一种可扩展、高度持久和完全托管的数据库服务,用于操作任务关键型 MongoDB 工作负载。在 Amazon DocumentDB 上,您可以使用相同的 MongoDB 应用程序代码、驱动程序和工具来运行、管理和扩展工…...
前端小案例1:用css实现蒙层效果
前端小案例1:用css实现蒙层效果 我想要在react的函数组件中实现如下效果:首先dom结构中有一个slider组件用于展示当前的亮度条,如果在 flag为true的情况下,就给当前页面上覆盖一张透明度为0.8图片。有一个按钮会切换flag的值。 …...
RTMP流媒体服务器EasyDSS视频点播平台在不关闭防火墙的情况下平稳部署的具体步骤
EasyDSS视频直播点播平台提供了视频转码、点播、直播、推拉流、录像、回放等功能,可应用在AR、VR、无人机推流、虚拟直播、教育培训、远程会议等多样化的场景中。 通常我们在部署EasyDSS时都建议用户关闭防火墙的,但是也有无需关闭防火墙的部署办法&…...
QT中信号与槽机制的介绍,以及信号与槽连接的几种方式
信号与槽机制 信号与槽的介绍 功能:实现多个组件之间的相互通信,是QT引以为傲的核心机制信号:就是信号函数,定义在类体的signals权限下,是一个不完整的函数,只有声明没有定义;槽:就…...
学习笔记——Java入门第二季
1.1 介绍类与对象 类和对象的关系: 时间万物皆对象。对象是具体的事物,是类的具体事例 类是抽象的概念,是对象的模板。 new关键字是创建实例对象最重要的标志 Dog duoduonew Dog(); Dog luckynew Dog(); 这样就创建了两个对象并且在java内…...
计算机视觉的应用13-基于SSD模型的城市道路积水识别的应用项目
大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用13-基于SSD模型的城市道路积水识别的应用项目。今年第11号台风“海葵”后部云团的影响,福州地区的降雨量突破了历史极值,多出地方存在严重的积水。城市道路积水是造成交通拥…...
【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视觉系统的标准配置,Epson CV2摄像机可以安装在机器人臂(移动)或固定装置(固定)上。基于向导的校准使机器人到视觉系统的校准变得轻…...
Openvslam
文章目录 Openvslam 学习报告什么是Openvslam概念特点 安装和运行OpenVSLAM克隆源代码安装依赖库测试(环境已经安装成功)运行运行失败的总结运行成功 系统设计模块和函数接口调用流程流程图参考资料 Openvslam 学习报告 什么是Openvslam 概念 OpenVSL…...
Windows通过RDP异地远程桌面Ubuntu【内网穿透】
文章目录 前言1. ubuntu安装XRDP2.局域网测试连接3.安装cpolar内网穿透4.cpolar公网地址测试访问5.固定域名公网地址 前言 XRDP是一种开源工具,它允许用户通过Windows RDP访问Linux远程桌面。 除了Windows RDP外,xrdp工具还接受来自其他RDP客户端(如Fre…...
js 基础 (ES 模块)
ES 模块语法 1、模块化的背景 JavaScript 程序本来很小——在早期,它们大多被用来执行独立的脚本任务,在你的 web 页面需要的地方提供一定交互,所以一般不需要多大的脚本。过了几年,我们现在有了运行大量 JavaScript 脚本的复杂…...
K8s 多集群实践思考和探索
作者:vivo 互联网容器团队 - Zhang Rong 本文主要讲述了一些对于K8s多集群管理的思考,包括为什么需要多集群、多集群的优势以及现有的一些基于Kubernetes衍生出的多集群管理架构实践。 一、为什么需要多集群 随着K8s和云原生技术的快速发展,…...
德国金融监管机构网站遭遇大规模DDoS攻击后“瘫痪”
德国波恩的BaFin大楼 BaFin是负责监督和监管德国金融机构和市场的金融监管机构,其职责是确保德国金融体系的稳定性、完整性和透明度。 此外,BaFin 的网站还为企业和消费者提供银行、贷款和财产融资等方面的信息。它还提供消费者帮助热线和举报人信息共…...
关于特殊时期电力行业信息中心运营思路
一、防御思路 安全运营是一系列规则、技术和应用的集合,用以保障组织核心业务平稳运行的相关活动,是通过灵活、动态的实施控制以期达到组织和业务需要的整体范围可持续性正常运行。信息中心在特殊时期扮演着关键的角色,因此需要精心设计运营…...
机器人中的数值优化(八)——拟牛顿方法(上)
本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…...
mac安装adobe需要注意的tips(含win+mac all安装包)
M2芯片只能安装2022年以后的(包含2022年的) 1、必须操作的开启“任何来源” “任何来源“设置,这是为了系统安全性,苹果希望所有的软件都从商店或是能验证的官方下载,导致默认不允许从第三方下载应用程序。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主题文件夹增加如下文件后,标题便自动加上了编号: https://gitcode.net/as604049322/blog_data/-/blob/master/base.user.css 例如: 但是导出的PDF中,目录却没有编号: 这…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
