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("测试")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/72024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gitLab(git)误提交命令

1.先使用下面命令查看一下分支上已提交的信息 git log 2.回退到之前的版本 git reset —hard 你要删除的提交哈希码&#xff08;一般是离这个命令最近的一串数字&#xff09; 3.覆盖掉远端的版本信息&#xff0c;使远端的仓库也回退到相应的版本 注意&#xff1a;切换到你提…

mac 查看端口占用

sudo lsof -i tcp:port # 示例 sudo lsof -i tcp:8080 杀死进程 sudo kill -9 PID # 示例 sudo kill -9 8080

element树形筛选

<el-inputv-model"projectName"placeholder"请输入名称"clearablemaxlength"10"clear"clearTree" /> <el-divider /> <el-treeref"tree"class"filter-tree":data"treeList":props"…

【Linux】高级IO --- Reactor网络IO设计模式

人其实很难抵制诱惑&#xff0c;人只能远离诱惑&#xff0c;所以千万不要高看自己的定力。 文章目录 一、LT和ET模式1.理解LT和ET的工作原理2.通过代码来观察LT和ET工作模式的不同3.ET模式高效的原因&#xff08;fd必须是非阻塞的&#xff09;4.LT和ET模式使用时的读取方式 二…

时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测(风电功率预测)

时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测&#xff08;风电功率预测&#xff09; 目录 时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测&#xff08;风电功率预测&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1…

软路由的负载均衡设置:优化网络性能和带宽利用率

在现代网络环境中&#xff0c;提升网络性能和最大化带宽利用率至关重要。通过合理配置软路由IP的负载均衡设置&#xff0c;可以有效地实现这一目标&#xff0c;并提高整体稳定性与效果。本文将详细介绍如何进行软路由IP的负载均衡设置&#xff0c;从而优化网络表现、增加带宽利…

数据结构——二叉树线索化遍历(前中后序遍历)

二叉树线索化 线索化概念&#xff1a; 为什么要转换为线索化 二叉树线索化是一种将普通二叉树转换为具有特殊线索&#xff08;指向前驱和后继节点&#xff09;的二叉树的过程。这种线索化的目的是为了提高对二叉树的遍历效率&#xff0c;特别是在不使用递归或栈的情况下进行遍历…

Docker部署(5)——使用docker run命令部署运行jar项目

对于一些简单的单体项目&#xff0c;可以使用 docker run 命令可以直接在命令行中运行容器&#xff0c;无需事先构建镜像。这相较于之前使用的 dockerfile 文件来运行部署项目相当于是另外一种简单的部署方法&#xff0c;关于之前使用dockerfile 文件来运行部署这种方法&#x…

l8-d8 TCP并发实现

一、TCP多进程并发 1.地址快速重用 先退出服务端&#xff0c;后退出客户端&#xff0c;则服务端会出现以下错误&#xff1a; 地址仍在使用中 解决方法&#xff1a; /*地址快速重用*/ int flag1,len sizeof (int); if ( setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &a…

B-Tree 索引和 Hash 索引的对比

分析&回答 B-Tree 索引的特点 B-tree 索引可以用于使用 , >, >, <, < 或者 BETWEEN 运算符的列比较。如果 LIKE 的参数是一个没有以通配符起始的常量字符串的话也可以使用这种索引。 有时&#xff0c;即使有索引可以使用&#xff0c;MySQL 也不使用任何索引。…

【漏洞复现】E-office文件包含漏洞

漏洞描述 Weaver E-Office是中国泛微科技(Weaver)公司的一个协同办公系统。泛微 E-Office 是一款标准化的协同 OA 办公软件,实行通用化产品设计,充分贴合企业管理需求,本着简洁易用、高效智能的原则,为企业快速打造移动化、无纸化、数字化的办公平台。 该漏洞是由于存在…

巨人互动|游戏出海游戏出海效果怎样?

游戏出海是指将原本面向国内市场的游戏产品进行调整和优化&#xff0c;以适应海外市场的需求&#xff0c;并进行推广和销售。下面小编讲讲关于游戏出海对于游戏效果的影响的一些讨论点。 1、市场扩大 通过游戏出海&#xff0c;可以将游戏产品的目标受众从国内扩展到全球范围内…

Zebec Protocol 成非洲利比亚展会合作伙伴,并将向第三世界国家布局

在 9 月 6 日&#xff0c;The Digital Asset Summit ’23&#xff08;利比亚大会&#xff09;在尼日利亚首度阿布贾的 NAF 会议中心举办&#xff0c;该会议对 Web3 领域在非洲地区的发展进行了探索&#xff0c;旨在推动非洲地区区块链产业的进一步发展&#xff0c;据悉该会议室…

CSS 设置渐变背景 CSS 设置渐变边框

一、css渐变背景添加透明度opacity css渐变背景经常会在项目开发中遇到&#xff0c;此时UI如果给出的是单一的渐变背景&#xff08;没有背景透明度&#xff09;&#xff0c;这个我们会很快的写出代码&#xff0c;如下: <div class"btn">这是一个按钮</div&…

神策数据发布汽车行业 CJO 解决方案,打造客户旅程全新体验

最近&#xff0c;围绕数字化客户经营&#xff0c;神策数据基于“客户旅程编排&#xff08;Customer Journey Orchestration&#xff0c;简称 CJO&#xff09;”理念&#xff0c;发布汽车行业全新解决方案&#xff0c;通过全渠道打通给客户带来一致的、个性化的体验&#xff0c;…

【HTML专栏1】语法规范、基础结构标签

本文属于HTML/CSS专栏文章&#xff0c;适合WEB前端开发入门学习&#xff0c;详细介绍HTML/CSS如果使用&#xff0c;如果对你有所帮助请一键三连支持&#xff0c;对博主系列文章感兴趣点击下方专栏了解详细。 博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;HTML/CS…

无涯教程-JavaScript - DEC2HEX函数

描述 DEC2HEX函数将十进制数转换为十六进制。 语法 DEC2HEX (number, [places])争论 Argument描述Required/Optionalnumber 要转换的十进制整数。 如果number为负数,则将忽略位数,并且DEC2HEX返回10个字符(40位)的十六进制数字,其中最高有效位是符号位。其余的39位是幅度位…

Laravel 模型的关联写入多对多的关联写入 ⑩③

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; THINK PHP &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…

读高性能MySQL(第4版)笔记04_操作系统和硬件优化

1. 从软件本身和它运行的典型工作负载来看&#xff0c;MySQL通常也更适合运行在廉价硬件上 2. 基本资源 2.1. CPU 2.2. 内存 2.3. 磁盘 2.4. 瓶颈 2.5. 网络资源 3. CPU 3.1. 最常见的瓶颈是CPU耗尽 3.2. 检查CPU使用率来确定工作负载是否受CPU限制 3.3. 低延迟&…

Python基础篇(17):模块与包

一、as 关键字的使用 1、as 关键字的作用&#xff1a;给导入的模块取别名 import 测试1 as Test_1 import 测试2 as Test_2Test_1.say_hello() Test_2.say_hello() 二、if __name__ __main__ 1、作用 测试当前模块所编写的代码块&#xff0c;根据业务自主选择需要运行的代…