Pytest自动化测试框架-权威教程06-使用Marks标记测试用例

news2024/11/26 13:28:38

使用Marks标记测试用例

通过使用pytest.mark你可以轻松地在测试用例上设置元数据。例如, 一些常用的内置标记:

  • skip - 始终跳过该测试用例

  • skipif - 遇到特定情况跳过该测试用例

  • xfail - 遇到特定情况,产生一个“期望失败”输出

  • parametrize - 在同一个测试用例上运行多次调用(译者注: 参数化数据驱动)

创建自定义标记或将标记应用于整个测试类或模块很容易。 文档中包含有关标记的示例,详情可参阅[使用自定义标记。

注意:
标记只对测试用例有效,对fixtures方法无效。

在未知标记上引发异常: -strict

当使用--strict命令行参数时,未在pytest.ini文件中注册的任何标记都将引发异常。

标记可以通过以下方式注册:

Copy[pytest]markers =
    slow
    serial

这可用于防止用户意外输错标记名称。 想要强制执行此操作的测试套件应将--strict添加到addopts:

Copy[pytest]addopts = --strict
markers =
    slow
    serial

标记改造和迭代

3.6版本新函数

pytest的标记传统地实现是通过简单地在测试函数的__dict__中添加属性来进行标记。结果,标记意外的随着类的集成而传递。此外,使用@pytest.mark装饰器应用的标记和通过node.add_marker添加的标记存储的位置不同,用于检索它们的API也

不一致。

这样,如果不深入了解测试代码内部结构,技术上几乎无法正确使用参数化数据,从而导致在高级的使用方法中出现细微且难以理解的bug。

根据标记声明/更改的方式,你都可以获得一个MarkerInfo对象,其中也可能会包含来自同级类的标记。当使用参数化标记,或node.add_marker时,会丢弃之前的使用装饰器声明的MarkDecorators标记。MarkerInfo对象实际上是使用同一标记名的多个标记的合并视图,当然,MarkerInfo也可以像单个标记一样使用。

最重要的是,即使标记是在类/模块上声明的,实际上,标记只能在函数中访问。原因是模块,类和函数/方法无法以相同的方式访问标记。

在pytest 3.6版本中引入了一个访问标记的新API,以解决初始设计中的问题,提供_pytest.nodes.Node.iter_markers()方法以一致的方式迭代标记并重新进行内部处理,这很好地解决了初始设计的问题。

升级代码

不推荐使用原有的Node.get_marker(name)函数,因为它返回一个内部MarkerInfo对象,该对象包含应用于该节点的所有标记的合并名称和所有参数。

通常,有两种方案可以处理标记:

标记互相覆盖。 顺序很重要,但你只需要将你的标记视为单独的标记即可。 例如。 对于测试用例中的log_level('debug')会覆盖模块级别的log_level('info')。

在这种情况下,可以使用Node.get_closest_marker(name):

Copy# 替换这个:
marker = item.get_marker("log_level")
if marker:
    level = marker.args[0]

# 通过这个:
marker = item.get_closest_marker("log_level")
if marker:
    level = marker.args[0]

在特定条件下使用标记。 例如,skipif(condition)标记,意味着你只想测试所有非condition条件的用例,顺序不重要。你可以将这个标记视为一个满足该条件的集合使用。

在这种情况下,迭代每个标记并单独处理它们的*args和**kwargs参数。

Copy# 替换这个:
skipif = item.get_marker("skipif")
if skipif:
    for condition in skipif.args:
        # eval condition
        ...

# 通过这个:for skipif in item.iter_markers("skipif"):
    condition = skipif.args[0]
    # eval condition

如果你不确定或遇到任何难题,你可以考虑提出一个待解决问题。

注意:
在未来的Pytest主要版本中,我们将引入基于类的标记,在这些标记处,标记将不再局限于Mark的实例。

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

电商项目实战

web测试项目

web+App+h5+小程序 测试项目

接口自动化测试实战项目

Linux实战项目

面试资料

我们进阶学习自动化测试必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

以上资料,对于想要测试进阶的朋友们来说应该会很有帮助,需要的小伙伴可以后台私信找我免费领取

总结

我见过很多leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了好几年,更夸张的是7、8年工作内容的重复性比较高,没有什么技术含量的工作。

凡事要趁早,特别是技术行业,一定要提升技术功底,丰富自动化项目实战经验,这对于你未来几年职业规划,以及测试技术掌握的深度非常有帮助。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!

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

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

相关文章

自旋锁,读写锁以及他们的异同

自旋锁 自旋锁是一种用于多线程编程的同步机制。它是一种基于忙等待的锁,当线程尝试获取锁时,如果锁已被其他线程占用,则该线程会一直循环检查锁是否被释放,直到获取到锁为止。 在自旋锁的实现中,使用了CPU的硬件特性…

ArcGIS制图之阴影效果的表达与运用

一、运用制图表达进行投影表达 在专题图的制作过程中,经常需要将目标区域从底图中进行突显,运用制图表达制作图层投影可以较好地实现这一目的。具体步骤如下: 1.将目标图层存储于数据库中并加载至窗口(shapefile格式数据无法支持…

Android Looper简介

本文基于安卓11。 Looper是一个用具,在安卓程序中,UI线程是由事件驱动的(onCreate, onResume, onDestory),Looper就是处理这些事件的工具,事件被描述为消息(Message),Lo…

【PHP代码注入】PHP代码注入漏洞

漏洞原理RCE为两种漏洞的缩写,分别为Remote Command/Code Execute,远程命令/代码执行PHP代码注入也叫PHP代码执行(Code Execute)(Web方面),是指应用程序过滤不严,用户可以通过HTTP请求将代码注入到应用中执行。代码注入(代码执行)…

python甜橙歌曲音乐网站平台源码

wx供重浩:创享日记 对话框发送:python音乐 获取完整源码源文件说明文档配置教程等 在虚拟环境下输入命令“python manage.py runserver”启动项目,启动成功后,访问“http://127.0.0.1:5000”进入甜橙音乐网首页,如图1所…

YOLOS调试记录

YOLOS是由华中科大提出的将Transformer迁移到计算机视觉领域的目标检测方法,其直接魔改ViT!本文首次证明,通过将一系列固定大小的非重叠图像块作为输入,可以以纯序列到序列的方式实现2D目标检测。 模型结构 下面来调试一下该项目…

【微信小程序】-- 页面事件 - 上拉触底 - 案例(二十七)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…

javaScript基础面试题 ---对象考点

1、对象是通过new操作符构建出来的,所以对象之间不相等 2、对象注意引用类型,如果是引用类型,就可能会相等 3、现在对象本身查找 -> 构造函数中找 -> 对象原型中找 -> 构造函数原型中找 -> 对象上一层原型… 1、对象是通过new操作…

被骗进一个很隐蔽的外包公司,入职一个月才发现,已经有了社保记录,简历污了,以后面试有影响吗?...

职场的套路防不胜防,一不留神就会掉坑,一位网友就被“骗”进了外包公司,他说公司非常隐蔽,入职一个月才发现是外包,但已经有了社保记录,简历污了,不知道对以后面试有影响吗?楼主说&a…

Mysql迁移Postgresql

目录原理环境准备操作系统(Centos7)Mysql客户端安装Psql客户端安装数据库用户导表脚本dbmysql2pgmysqlcopy测试在mysql中建表导表测试查看pg中的表原理 Mysql抽取:mysql命令重定向到操作系统文件,处理成csv文件; PG装载:copy方式…

【大数据源码】Hadoop源码解读 Namenode 启动加载FsImage的过程

Namenode 启动前言启动 Namenode 组件启动脚本Namenode.initializeFSNamesystem.loadFromDiskFsImage.recoverTransitionReadFSImageFormat.loadFSImageFormatProtobuf.load反序列化加载FsImage文件内容FsImage内存数据结构前言 NameNode是HDFS中负责元数据管理的组件&#xf…

PhpStudy下载安装使用教程,图文教程(超详细)

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 PhpStudy一、官网下载二、安装三、简单使用四、粉丝福利PhpStudy:让天下没有难…

bable和AST概述

这里写目录标题bable定义Babel概述Babel 中重要的对象VistorAST定义Javascript 语法的AST(抽象语法树)bable 定义 Babel 是我们知道的将 ES6、ES7等代码转译为 ES5 代码且能安全稳定运行最好的工具同时它允许开发者开发插件,能够在编译时期…

关于 interface{} 会有啥注意事项?上

学习 golang ,对于 interface{} 接口类型,我们一定绕不过,咱们一起来看看 使用 interface{} 的时候,都有哪些注意事项吧 interface {} 可以用于模拟多态 xdm 咱们写一个简单的例子,就举动物的例子 写一个 Animal 的…

【LeetCode】剑指 Offer(17)

目录 题目:剑指 Offer 34. 二叉树中和为某一值的路径 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer …

Spring Cache简单介绍和使用

目录 一、简介 二、使用默认ConcurrentMapManager (一)创建数据库和表 (二)创建boot项目 (三)使用Api 1、EnableCaching 2、CachePut 3、cacheable 4、CacheEvict 三、使用redis作为cache 一、简…

云计算基础——云计算认知

云计算的总体框架在服务方面,主要以提供用户基于云的各种服务为主,共包含3个层次:1.软件即服务(Software as a Service,简称SaaS),这层的作用是将应用主要以基于Web 的方式提供给客户;2.平台即服务(Platform as a Serv…

STL讲解——模拟实现vector

STL讲解——模拟实现vector vector深度剖析 在STL源码中,发现vector定义的并不是 start、size、capacity,而是start、finish、end_of_storage. 这样就可以得到size()和capacity()。 sizefinish-start capacityend_of_storage-start 扩容可能是本地扩容也…

Entity Framework简单使用

我喜欢比较老派的database first , 所以先创建sql server的数据库,比如dbname叫做:Blogging这里我省略了。 在visual studio里面创建一个控制台程序, 然后添加ado.net项目 选择“gen from database” 然后新建你的数据库连接&…

基于粒子群优化算法的分布式电源选址定容【IEEE33节点】(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…