pytest测试框架之mark标记功能详细介绍

news2024/11/24 7:17:43

mark标记

​ 在实际工作中,我们要写的自动化用例会比较多,也不会都放在一个py文件中,如果有几十个py文件,上百个方法,而我们只想运行当中部分的用例时怎么办?

​ pytest提供了一个非常好用的mark功能,可以给测试用例打上各种各样的标签,运行用例时可以指定运行某个标签。mark功能作用就是灵活的管理和运行测试用例。

​ 标签既可以打到方法上,也可以打到类上,标记的两种方式:

  • 直接标记类或方法或函数:@pytest.mark.标签名
  • 类属性:pytestmark = [pytest.mark.标签名, pytest.mark.标签名],需要注意的是属性名称是固定的
python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#f92672">import</span> pytest


<span style="color:#61aeee">@pytest.mark.beta	</span><span style="color:#b18eb1"><em># 可以给类打标签</em></span>
<span style="color:#f92672">class</span> <span style="color:#e6c07b">TestLogin</span>:	<span style="color:#b18eb1"><em># 标记类</em></span>

<span style="color:#61aeee">    @pytest.mark.qc</span>
<span style="color:#61aeee">    @pytest.mark.beta	</span><span style="color:#b18eb1"><em># 也可以多个标签</em></span>
    <span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_login</span>(<span style="color:#a6e22e">self</span>):</span>	<span style="color:#b18eb1"><em># 标记方法</em></span>
        <span style="color:#f92672">pass</span>

<span style="color:#61aeee">@pytest.mark.smoke		</span><span style="color:#b18eb1"><em># 单个标签</em></span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_register</span>():</span>	<span style="color:#b18eb1"><em># 标记函数</em></span>
        <span style="color:#f92672">pass</span>

<span style="color:#f92672">class</span> <span style="color:#e6c07b">TestClass</span>:
    <span style="color:#b18eb1"><em># 加一个 pytestmark的类属性</em></span>
    pytestmark = [pytest.mark.qc, pytest.mark.beta]	<span style="color:#b18eb1"><em># 标签存放在一个列表</em></span>

pytest.main()</span></span>

注册标签名

​ 我们要想运行已经打好标记的函数,还需要对标签名进行注册,告诉pytest有哪些标签,如果不进行注册运行时(pytest的高级版本)可能会报警告让你进行注册。

​ 我们只需要在项目根目录下创建一个pytest.ini文件,注意文件名是不可修改的,否则pytest会找不到。内容格式如下:

python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#b18eb1"><em># pytest.ini</em></span>
<span style="color:#b18eb1"><em># 只能修改=右边的值</em></span>
[pytest]	
python_files = demo_*.py	<span style="color:#b18eb1"><em># 模块名以demo_开头</em></span>
python_functions = demo_*	<span style="color:#b18eb1"><em># 方法名以demo_开头</em></span>
python_classes = Demo*	<span style="color:#b18eb1"><em># 类名名以Demo开头</em></span>

<span style="color:#b18eb1"><em># 注册标签</em></span>
markers =
    qc
    beta
    smoke</span></span>

运行指定的标签

通过命令行执行

​ 单个标签:pytest -m "标签名" (-m意思是执行标签mark),不想执行某个标签可以用not来取反,即pytest -m "not 标签名"

​ 多个标签:可以加上判断,pytest -m "qc and beta" 或者 pytest -m "qc or beta" 效果是一样的

​ 注意:标签名一定要加双引号,单引号是会报错的。

通过代码执行

​ 这里普及一下,main()方法是可以接收不定长参数的,因此可以把要执行的命令放在一个列表中

python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#f92672">if</span> __name__ == <span style="color:#98c379">'__main__'</span>:
    pytest.main([<span style="color:#98c379">'-m qc and beta'</span>, <span style="color:#98c379">'-s'</span>])	<span style="color:#b18eb1"><em># 标签名不需要加引号</em></span></span></span>

​ 关于pytest的指令,可以通过控制台执行pytest --help查看,上面举例中-s命令是指打印更加详细的信息,如果程序运行过程当中的print()信息打印不出来,可以加上-s可选参数,它是-- capture=no的缩写。

skip跳过标记

​ 在维护测试用例的过程中,可能在一个阶段某些用例已经不需要了,或者在指定条件下是不需要运行的,那么我们就可以通过mark.skip跳过这些函数或者类,两种跳过方式:

  • 直接跳过: @pytest.mark.skip(reason = “原因”),这里原因是可选参数
  • 条件跳过,即满足某个条件才跳过:@pytest.mark.skipif(a == 1, reason = “原因”)
python
<span style="background-color:#282c34"><span style="color:#abb2bf">db_host = <span style="color:#98c379">'localhost'</span>

<span style="color:#61aeee">@pytest.mark.skip(<span style="color:#3388aa">"和现在的需求不符合"</span>)	</span><span style="color:#b18eb1"><em># 不满足当下了,或别人编写的暂时不能删的</em></span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_yuz</span>(<span style="color:#a6e22e">self</span>):</span>
    <span style="color:#f92672">pass</span>

<span style="color:#61aeee">@pytest.mark.skipif(db_host == <span style="color:#3388aa">'localhost'</span>, reason=<span style="color:#3388aa">'只测试线上环境,不测试本地环境'</span>)</span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_develop_env</span>(<span style="color:#a6e22e">self</span>):</span>
    <span style="color:#f92672">pass</span></span></span>

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

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

相关文章

机械厂工厂360全景展示拍摄制作,以便随时随地进行展示和更新

随着5G互联网技术的不断发展&#xff0c;线上全景虚拟展示已经成为了一种重要的展示方式。在工业领域中&#xff0c;厂区线上全景虚拟展示的应用也越来越广泛。 厂区线上vr全景虚拟展示是VR全景制作公司公司借助VR全景和web3d开发技术把企业的环境、研发、生产、产品、质检、仓…

06-2_Qt 5.9 C++开发指南_自定义对话框及其调用

本篇介绍到的对话框及其调用实例较为复杂但十分详细&#xff0c;如果做了解可以先参考&#xff1a;QT从入门到实战x篇_13_模态和非模态对话框创建。 文章目录 1. 对话框的不同调用方式2. 对话框QWDialogSize 的创建和使用2.1 创建对话框QWDialogSize2.2 对话框的调用和返回值 …

【数据结构功法】第八话 · 树与二叉树的基本概念

目录 &#x1f37a;知识点9&#xff1a;树的概念与性质 &#x1f36f;9.1 树的逻辑结构与性质 &#x1f34a;1.树的逻辑结构 &#x1f34a;2.树的相关术语 &#x1f34a;3.树的性质 &#x1f4dc;习题检测 &#x1f36f;9.2 二叉树的的定义与性质 &#x1f34a;1.二叉树…

微信如何多号定时群发?

微信作为国内最大的网络社交平台&#xff0c;目前用户已超过11亿。 掐点给朋友送生日祝福,给领导同事送新年祝福&#xff0c;提醒朋友的待办事项等等&#xff0c;这些定时发送功能一直都是微博 QQ&#xff0c;邮箱的专属&#xff0c;如果微信也能定时发送该多好&#xff1f;其…

【CSS3】CSS3 动画 ① ( CSS3 动画简介 | CSS3 动画实现步骤 | 动画定义 | 代码示例 )

文章目录 一、CSS3 动画简介二、CSS3 动画实现步骤三、动画定义四、代码示例 一、CSS3 动画简介 " 动画 " 是 CSS3 相较于 CSS 的 颠覆性 特性 之一 ; 在 CSS3 中 , 可以设置 多个 动画节点 , 精确地 控制 一个动画 或 若干动画 , 实现 复杂 的 动效 ; 动画可以实现…

CSS—选择器

目录 一、CSS简介 二、HTML页面中常用的元素 三、CSS语法规则 四、常用的选择器 五、选择器参考 一、CSS简介 CSS (Cascading Style Sheets&#xff0c;层叠样式表&#xff09;&#xff0c;是一种用来为结构化文档&#xff08;如 HTML 文档或 XML 应用&#xff09;添加样式…

Zabbix6.0监控

文章目录 一、Zabbix简介1&#xff09;zabbix 是什么&#xff1f;2&#xff09;zabbix 监控原理3&#xff09;Zabbix 6.0 新特性1、Zabbix server高可用防止硬件故障或计划维护期的停机2、Zabbix 6.0 LTS新增Kubernetes监控功能&#xff0c;可以在Kubernetes系统从多个维度采集…

【uniapp 小程序开发语法篇】资源引入 | 语法介绍 | UTS 语法支持(链接格式)

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; uni-app | 小程序开发 开发工具&#xff1a;HBuilderX 小程序开发语法篇 引用组件easycom Js文件引入NPM支持 Css文件引入静态资源引入css 引入静态资源如何引入字体图标&#xff1f;css 引入字体图标示例nvue 引入字体…

深入解析微店详情API:提升电商平台的技术实力

了解微店详情API的基本概念和功能&#xff1a; 微店详情API是用于通过商品ID获取商品详情数据的接口。它提供了丰富的商品信息&#xff0c;包括商品名称、价格、描述、规格、图片等。我们将介绍API的请求和响应结构&#xff0c;以及常见的参数和返回字段。 最佳实践&#xff1…

低版本Qt Creator安装方式

文章目录 一. 说明二.安装方法 一. 说明 安装最新的QT后自带的Qt Creator再打开的时候会很慢&#xff0c;并且打开项目后点击代码文件切换速度也会很慢&#xff0c;安装低版本的Qt Creator未出现这个问题&#xff0c;故选择安装低版本Qt Creator 二.安装方法 下载低版本Qt C…

中断子系统--硬件层(GICv3)

目录 综述 硬件层--GICV3 中断类型 中断状态 Distributor组件 中断使能配置 中断触发方式配置 中断优先级配置  中断分组标记 GIC处理中断流程 综述 由上面的block图&#xff0c;我们可知linux kernel的中断子系统分成4个部分&#xff1a; 硬件层&#xff1a;最下层…

学习总结(TAT)

好久都没交总结了&#xff0c;今天把之前的思路和错误整理了一下&#xff1a; 在服务器和客户端两侧&#xff0c;不可以同时先初始化获取输入流&#xff0c;否则会造成堵塞&#xff0c;同时为这位作者大大打call&#xff1a; (3条消息) 关于Java Socket和创建输入输出流的几点…

龙芯积极研发二进制翻译,提升软硬件兼容性,提高LoongArch架构

根据8月8日Phoronix报道&#xff0c;龙芯正在积极研发龙芯二进制翻译功能&#xff08;Loongson Binary Translationm&#xff0c;LBT&#xff09;以提高LoongArch架构与其他处理器&#xff08;如MIPS/x86/Arm&#xff09;的二进制翻译能力&#xff0c;这重要举措将显著提升龙芯…

【沁恒蓝牙mesh】CH58x flash分区之利用随机数作为蓝牙mesh地址

本文主要介绍了 沁恒蓝牙芯片 CH58x 的flash 分区与数据存储管理&#xff0c;利用随机数作为蓝牙mesh地址&#xff0c;蓝牙mesh采用自组网 &#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知识点的小菜鸟。&#x1f60e;&#…

【容器化】Oceanbase镜像构建及使用

通过该篇文章可以在国产X86-64或ARM架构上构建商业版oceanbase,只需要替换pkg安装包即可。下面截图主要以国产X86-64安装为例,作为操作截图: 镜像构建目录说明 pkg:用来存放安装包及脚本,抛出rpm其他是脚步,这些rpm包可以下载不同系统架构的包,构建镜像时该目录只需要保…

45.杜芬方程解仿真解曲线(matlab程序)

1.简述 Dufing方程是一种重要的动力系统山&#xff0c;是反映工程物理系统中非线性现象和混沌动力学行为的极其重要的方程式。通过Duffing方程可以探讨铁磁谐振电路中的分岔、拟周期运动、子谐波振荡。而在非线性与混沌系统的研究中&#xff0c;Duffing方程展示了丰富的混沌动力…

12.操作符详解(位操作符、逗号表达式、下标访问操作符、函数调用操作符、操作数的优先级)

这里写目录标题 1.位操作符1.1左移操作符&#xff08;<<&#xff09;1.2右移操作符&#xff08;>>&#xff09;1.3按位与操作符&#xff08;&&#xff09;1.4按位或操作符&#xff08;|&#xff09;1.5异或操作符&#xff08;^&#xff09;1.6取反操作符&#…

SPF9139全力适配ios16与鸿蒙3.0,超实用数据提取、分析、恢复能力UP!

​ 如今&#xff0c;群聊已成为人们必不可少的沟通窗口 家人群&#xff0c;好友群&#xff0c;班级群 粉丝群&#xff0c;交友群&#xff0c;工作群 …… 各类群聊铺天盖地般涌来的同时 也有一些群聊沦为了 赌博、传播淫秽视频、发表不当言论 等违法犯罪行为滋生之地 与…

滑动窗口——缓冲区大小

文章目录 作用处理过程三次握手四次挥手的全部流程 窗口理解为缓冲区的大小&#xff0c;滑动窗口的大小会随着发送数据和接收数据而变化。 通信双方都有发送缓冲区和接收缓冲区。 服务器&#xff1a; 发送缓冲区 接收缓冲区 客户端&#xff1a; 发送缓冲区 接收缓冲区 作用 处…

C++项目,出现debug能正常编译release编译报错的情况

编写了一个DLL库文件&#xff0c;发现可以正常编译生成debug的库&#xff0c;但是release的部分编译报错。列举过程中出现的错误解决办法&#xff1a; 1.报错点&#xff1a;fatal error C1189: #error: Building MFC application with /MD[d] … fatal error C1189: #error: B…