【python自动化一】pytest的基础使用

1.pytest简述

pytest‌ 是一个功能强大且灵活的Python测试框架,其主要是用于流程控制,具体用于UI还是接口自动化根据个人需要而定。且其具有丰富插件,使用时较为方便。咱们具体看下方的内容,本文按照使用场景展开,不完全按模块划分,减少割裂感。

2.安装pytest

安装命令(已安装python及pip):

pip install -U pytest  # cmd命令行中直接输入即可

在这里插入图片描述
查看是否已经安装成功:

pytest --version

在这里插入图片描述
参考文档:
链接: pytest文档

3.新建工程

1.新建工程

这里我们使用编译器pycharm直接新建一个工程
在这里插入图片描述
这个工程用的虚拟环境,这里我们为这个工程再安装一次pytest

在这里插入图片描述
当然,要是希望系统装的依赖可以使用,或者其他项目可以共用依赖,可以将这两个选项勾选上,就不用再额外安装了
在这里插入图片描述
这里我们先介绍下pytest的文件、类、方法的命名规范(当然也可以有其他的规则,这个我们后面再说,我们这里只定义一个规则)
1 pytest的测试类文件,文件名小写,且必须以test_开头,多个单词以_连接
2 测试类名必须以Test开头,大驼峰格式
3 测试方法名必须以test_开头,多个单词以_连接,全小写
上述都是针对测试方法和测试类,普通的方法类不要包含test字样,其它规则保持一致即可

2.新建测试类

在这里插入图片描述
如图所示,我们这边新建一个文件test_app1.py,文件中新建了一个测试类TestA,类中创建了4个方法,其中test开头的两个方法是有默认执行按键(向右的三角)的。这就是我们上面说的文件、类、函数的命名规则

3.运行方式

1.主函数运行

我们直接点击下方的主函数运行当前测试文件中的测试方法
在这里插入图片描述
可以看到这边执行了两个测试方法

2.命令行运行

我们在下方命令行中输入

pytest 文件名

在这里插入图片描述
可以看到这里也显示有两个用例通过,但是注意这里是没有print信息打印的哦,我们在pytest后加-s即可打印print信息
在这里插入图片描述

3.使用pytest.ini配置文件运行

pytest.ini文件是整个工程的配置文件,通常创建在工程的根目录下,里面的配置我们在执行工程时会自动调用。
这里我们先介绍下pytest.ini的常用配置:

参数作用
[pytest]用于标志这个文件是pytest的配置文件
addopts命令行参数,多个参数用空格间隔,例如上面的-s就可以加在这个参数后面
testpaths执行用例的范围,如果工程中有多个目录,可以在这里配置
python_files改变默认的文件搜索规则,这里指的就是以test开头的文件名
python_classes改变默认的类名搜索规则,这里指的就是以Test开头的类名
python_functions改变默认的方法名搜索规则,这里指的就是以test开头的方法名
markers用例标记;当用例较多时,可用这个参数分类标记用例,执行时可按标记执行相应的用例

在这里插入图片描述

这里我们在pytest.ini中配置了执行参数-s,然后我们在命令行中直接执行pytest,它会自动带参数执行自动化工程(主函数和命令行执行都会默认带pytest.ini下配置的参数),这里我们没有配置python_files,python_classes,python_functions参数,但是它还是执行了这两个方法,说明它是按照默认规则来执行的。
这里我们也可以修改规则来是适配我们特殊的规则
例如:
我们修改下文件方法的搜索适配规则
在这里插入图片描述
然后我们新建一个文件
在这里插入图片描述
直接输入pytest,查看执行结果,可以看到只执行了两个符合规则的用例
在这里插入图片描述
然后我们再加入testpaths这个参数
在这里插入图片描述
可以看到执行的下面这个文件夹中的用例
在这里插入图片描述
我们虽然可以修改用例的匹配规则,但建议不修改。修改后不一定所有人都能完全按照新规则编写,而且有时候新规则和默认规则会有冲突,不会完全修改默认规则(这里面还是有点坑的,慎踩),所以不建议修改。
然后我们再补充一点命令行执行参数,即加在addopts参数后的
具体可参考这篇文档
https://docs.pytest.org/en/stable/reference/reference.html#command-line-flags

4.流程控制

1.类中定义的setup和teardown方法

和多数自动化测试框架一样,pytest也支持在类中增加setup和teardown方法,直接上个例子

在这里插入图片描述
在类中我添加了方法和类的setup和teardown方法
这里可以看到其执行顺序为

class_setup
method_setup
method1
method_teardown
method_setup
method2
method_teardown
class_teardown

2.用fixture来实现前后置操作

我们先介绍下装饰器@pytest.fixture()
其函数名为:

def fixture(
    fixture_function: FixtureFunction | None = None,
    *,
    scope: _ScopeName | Callable[[str, Config], _ScopeName] = "function",
    params: Iterable[object] | None = None,
    autouse: bool = False,
    ids: Sequence[object | None] | Callable[[Any], object | None] | None = None,
    name: str | None = None,
)

其中我们主要关注的参数为:

参数作用
scope作用域,Literal[‘session’, ‘package’, ‘module’, ‘class’, ‘function’]
params方法入参,用例可从这个参数里取到入参
autouse是否自动生效
ids可和上方的params配合使用。作为每个参数的标识
name用于对fixture函数的重命名

下面我们介绍各个参数的具体用法

1.scope

scope为该方法的作用范围

取值说明
function函数级,即每个用例前后都会调用
class类级,每个类前后都会调用
module模块级,每个py文件前后都会调用
package包级,每个模块包前后会调用
session会话级,即执行自动化工程前后会调用

这里我们举两个例子:
1、我们scope取值为function,可以看到每个用例前都执行了一次
在这里插入图片描述2、我们scope取值为class,可以看到每个类前都执行了一次,注意:这里有两个方法是不在类下面的,这两个方法之前也执行了fixture方法,说明类外的用例方法前都是执行scope作用域为class的fixture
在这里插入图片描述
3、接下来我们讲一下module、package和class级的,要注意这几个都是会在多个文件前后执行的。上面我们介绍的fixture方法是写在一个py文件中的,在执行时不会作用到其他py文件中去,哪怕scope取值为function和class也一样,我们有时候在每个用例或每个类前后都要执行公共操作,这样每个文件里写一个方法,显然很不方便。这里引入一个文件:

conftest.py

如果我们希望多个py文件可以共享fixture方法,可以将fixture方法放在conftest.py文件中,这样工程中所有的文件都会共享到这些fixture方法
在这里插入图片描述
这里可以看到两个py文件都使用了这些方法
在这里插入图片描述
当然,除了工程根目录下可以建conftest.py文件,其他目录或者包下也可以存放conftest.py,但是要注意作用域范围,一般执行的优先级为(根目录>二级目录>三级目录…)
这里有两点要注意:
1.conftest.py文件名不能写错,写错无法找到fixture方法
2.fixture方法名不能一样,否则会冲突,只执行一个
4.这里我们再讲一下scope为session的
在这里插入图片描述
这里我们看到只在整个工程执行之前执行了一次,平时我们自己执行工程也就会执行一次,比如像一些登录或初始化的动作可以写在这个方法里;但是我们大批量执行自动化时,可能自动化工程分散在多个执行机或多个批次执行时,那这个方法就会执行多次,即每次输入执行pytest时,执行一次session方法

2.autouse

默认值为False,即默认不执行,如果设置为True,则默认调用
可以看到上面举scope的例子的时候,autouse都是赋值的True,这样它就会默认在每个类/方法前自动调用了。
我们不赋值时,就是默认不调用了,如果我们某些方法需要调用呢,可以手动调用;手动调用则直接在用例方法中传入fixture方法名即可(这里为了方便截图,我还是把fixture方法写在同一个py文件中)

在这里插入图片描述
可以看到,这里只有test_2方法前执行了fixture方法。
如果这里的作用域是class呢,同一个class中多次手动调用fixture方法,它只会在第一次调用时执行
在这里插入图片描述
到这里,我们只介绍了如何执行前置步骤,如果我们需要后置步骤,或者前置步骤中需要传值出来呢
要想传值出来,我们有两种方法

1.关键字return

在这里插入图片描述
可以看到我们调用函数名即可获取其返回值
此外,fixture函数可以多层调用,假如我们有两个fixture方法,第二个方法调用第一个方法
在这里插入图片描述
可以看到,第二个方法调用了第一个方法,test_2用例方法又调用了第二个方法,其先执行的是第一个fixture方法,即先执行最内层被调用的方法,一层一层向外执行,如果需要用到这种场景,可以参考

2.关键字yield

yield关键字可以用来返回值和操作后置步骤,yield后跟返回值,yield下面则跟后置步骤

在这里插入图片描述
可以看到,我们这里的fixture作用域是class,且是自动调用的,所以在test_1那里就调用了前置步骤,test_2处调用了其返回值,test_3后即整个class后调用了后置步骤

3.params和ids

params可以向fixture中传入参数,并且可以与ids一起使用,作为每个参数的标识。
fixture将params列表中传入的每一组值都会执行一遍,与此对应的testcase也都会执行多遍,具体调用如下,用request关键字来承接入参,并使用request.param来获取入参
在这里插入图片描述
在这里插入图片描述
可以看到test_2方法执行了3次,每次都输出了从fixture方法中获取的值,并且可以看到我这边params中传入的值不是一个类型的,所以params整个是一个大数组,具体每个数组位是什么类型的值都不影响,且类型不一样也可以。
这时候我们可以再加个ids
在这里插入图片描述
可以看到这里就显示ids了,我们后面集成allure显示报告时也会用到(实际使用看个人需要了,一般场景下可不用)

4.name

fixture方法的重命名,一般我们调用fixture方法时,直接写其方法名即可,如果使用了name参数,则调用时只能使用name后赋值的新函数名,使用原函数名会报错
这里我们重命名一下fixture函数,但是调用时还调用原函数名,就报错找不到这个函数
在这里插入图片描述
我们调用重命名的setup,即可调用成功
在这里插入图片描述

综上所述:fixture方法用得比较多的就是scope和autouse两个参数,其他几个参数请根据各自场景选用。

注:本文纯手打,有疏漏之处可留言指出。后续会继续更新自动化工程的其他部分。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于米尔全志T527开发板的FacenetPytorch人脸识别方案

本篇测评由优秀测评者“小火苗”提供。 本文将介绍基于米尔电子MYD-LT527开发板(米尔基于全志 T527开发板)的FacenetPytorch人脸识别方案测试。 一、facenet_pytorch算法实现人脸识别 深度神经网络 1.简介 Facenet-PyTorch 是一个基于 PyTorch 框架实…

ECharts柱状图-交错正负轴标签,附视频讲解与代码下载

引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个柱状图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供…

【Linux】线程池设计 + 策略模式

🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 线程池 1-1 ⽇志与策略模式1-2 线程池设计1-3 线程安全的单例模式1-3-1 什么是单例模式1-3-2 单例模式的特点1-3-3 饿汉实现⽅式和懒汉实现⽅式1-3-4 饿汉…

Spring Boot 3 集成 Spring Security + JWT

文章目录 Spring Boot 3 集成 Spring Security JWT准备工作引入依赖设计表结构生成基本代码白名单配置 JWT配置配置参数jwt密码、过期时间等自定义未授权和未登录结果返回创建JWT过滤器 改写SecurityConfig登录验证启动查看接口未登录登录 总结 Spring Boot 3 集成 Spring Sec…

tauri使用github action打包编译多个平台arm架构和inter架构包踩坑记录

这些error的坑,肯定是很多人不想看到的,我的开源软件PakePlus是使用tauri开发的,PakePlus是一个界面化将任何网站打包为轻量级跨平台软件的程序,利用Tauri轻松构建轻量级多端桌面应用和多端手机应用,为了实现发布的时候…

【娱乐项目】竖式算术器

Demo介绍 一个加减法随机数生成器,它能够生成随机的加减法题目,并且支持用户输入答案。系统会根据用户输入的答案判断是否正确,统计正确和错误的次数,并显示历史记录和错题记录。该工具适合用于数学练习,尤其适合练习基…

D86【python 接口自动化学习】- pytest基础用法

day86 pytest配置testpaths 学习日期:20241202 学习目标:pytest基础用法 -- pytest配置testpaths 学习笔记: pytest配置项 主目录创建pytest.ini文件 [pytest] testpaths./testRule 然后Terminal里直接命令:pytest&#xff…

LeetCode1556. 千位分隔数 LeetCode9. 回文数

题目一、1556. 千位分隔数 给你一个整数 n,请你每隔三位添加点(即 "." 符号)作为千位分隔符,并将结果以字符串格式返回。 示例 1: 输入:n 987 输出:"987"示例 2&#xff…

网络编程(UDP\TCP回显服务器)

目录 套接字socket TCP和UDP特点比较 特点 比较 UDP回显服务器/客户端的编写 UDP的socket api 回显服务器 客户端 TCP回显服务器/客户端的编写 TCP的socket api 回显服务器 客户端 优化服务器 1.关闭服务器创建的socket对象 2.引入线程池,为多个客户…

基于python的某音乐网站热门歌曲的采集与分析,包括聚类和Lda主题分析

一项目背景 在当前竞争激烈的市场环境下,分析酷狗音乐上的热门歌曲及其用户行为趋势,对平台运营、歌曲推荐和音乐创作具有重要意义。尤其是通过对酷狗音乐平台热门歌曲的数据采集与分析,可以深入理解用户偏好、歌曲流行的规律以及市场需求的…

论文阅读之方法: Single-cell transcriptomics of 20 mouse organs creates a Tabula Muris

The Tabula Muris Consortium., Overall coordination., Logistical coordination. et al. Single-cell transcriptomics of 20 mouse organs creates a Tabula Muris. Nature 562, 367–372 (2018). 论文地址:https://doi.org/10.1038/s41586-018-0590-4 代码地址…

国产多点低压差分(M-LVDS)线路驱动器和接收器,可替代DS91D176/SN65MLVD201

MS2111 是多点低压差分 (M-LVDS) 线路驱动器和接收器。经过优化,可运行在高达 200Mbps 的信号速率下。所有部件均符合 MLVDS 标准 TIA / EIA-899 。该驱动器的输出支持负载低至 30Ω 的多点总线。 MS2111 的接收器属于 Type-2 , 可在 -1V 至 …

【推荐算法】推荐系统的评估

这篇文章是笔者阅读《深度学习推荐系统》第五章推荐系统的评估的学习笔记,在原文的基础上增加了自己的理解以及内容的补充,在未来的日子里会不断完善这篇文章的相关工作。 文章目录 离线评估划分数据集方法客观评价指标P-R曲线ROC/AUCmAPNDCG A/B 测试分…

专题1:AI大模型在汽车行业的应用现状与展望

前言: 本文是《大模型在汽车行业的典型应用实践》100w字长文预告的一篇,本文没有泛泛的去做行业应用现状的介绍,而是通过引入行业调研报告的方式,进行详解,用事事和数据来说话,具有很好的参考意义。 一、…

开源ISP介绍(1)——开源ISP的Vivado框架搭建

开源github链接:bxinquan/zynq_cam_isp_demo: 基于verilog实现了ISP图像处理IP 国内Gitee链接:zynq_cam_isp: 开源ISP项目 基于以上开源链接移植项目到正点原子领航者Zynq7020开发板,并对该项目的Vivddo工程进行架构详解,后续会…

【Java基础面试题009】Java的I/O流是什么?

相关知识补充:黑马-字符集、IO流(一).pdf Autism_Btkrsr/Blog_md_to_pdf - 码云 - 开源中国 (gitee.com) 黑马-IO流(二).pdf Autism_Btkrsr/Blog_md_to_pdf - 码云 - 开源中国 (gitee.com) 回答重点 Java的I/O&…

Python Tkinter 模块

Python 支持多种图形界面的第三方库,包括 TkQtwxWidgets… Python 提供的 Tkinter 模块,就是 Tk GUI 工具包的接口。 Tkinter Tk 是图形库,支持多种操作系统,使用 Tcl 语言开发; Tk 会调用操作系统提供的本地 GUI …

详细介绍下oracle建库过程中核心脚本dbcore.bsq

在我们搭建oracle 11g数据库过程中,当我们设置好安装参数后,最后一步进行数据库安装时,oracle安装进程实际上调用的是$ORACLE_HOME/rdbms/admin/sql.bsq脚本进行建库。今天我们将详细介绍下其中的核心脚本dbcore.bsq。 一、建库脚本 我们先看…

解决`-bash: ./configure:/bin/sh^M:解释器错误: 没有那个文件或目录`的问题

解决`-bash: ./configure:/bin/sh^M:解释器错误: 没有那个文件或目录`的问题 一、错误原因分析二、解决方法方法一:使用`dos2unix`工具方法二:使用`sed`命令方法三:使用`tr`命令方法四:在文本编辑器中转换方法五:在Windows系统中使用适当的工具三、预防措施四、总结在使…

linux安全-firewalld防火墙-基础讲解

目录 一、 防火墙技术分类 二、 firewalld 三、 firewalld支持的类型的NAT 四、 富语言 五、 firewalld配置方式 六、 firewall-cmd命令 七、 小实验 这篇文章将对 firewalld 防火墙的基础知识进行介绍 firewalld简介:firewalld的作用是为包过滤机制提供匹配…