Pytest框架 —— 用例标记和测试执行篇!

news2024/11/20 11:31:34

pytest用例标记和测试执行篇

上一篇文章入门篇咱们介绍了pytest的前后置方法和fixture机制,这个章节主要给大家介绍pytest中的标记机制和用例执行的方法。pytest可以通过标记将数据传入于测试函数中,也可以通过标记中对执行的用例做筛选,接下来直接进入正题。

一、pytest中内置的标记

pytest标记使用需要通过pytest.mark.标记来使用,pytest中为应对各种测试场景也内置了很多的标记。

1.1、pytest.mark.parametrize:用例参数化的标记

通过parametrize可以将用例数据和用例执行的逻辑代码分离,并实现根据用例,自动生成测试用例。

Demo:
@pytest.mark.parametrize('item',[11,22,33,44,55,66])
def test_demo(item)
	assert item > 50

1.2、pytest.mark.skip:跳过用例执行

通过skip装饰的用例,在执行的时候会无条件跳过,

参数reason:跳过测试函数的原因。

Demo
# 不写跳过原因
@pytest.mark.skip
def test_demo()
	assert item > 50

# 写跳过原因
@pytest.mark.skip(reason='不需要执行')
def test_demo()
	assert item > 50

1.3、pytest.mark.skipif:根据条件跳过用例

skipif可以根据条件来决定是否跳过用例的执行, 如果条件为True则跳过测试函数执行。

参数 :condition —跳过的条件

参数 : reason —跳过的原因

Demo
a = 10
@pytest.mark.skipif(a > 20,reason='条件不成立,不执行')
def test_demo()
	assert item > 50
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

1.4、pytest.mark.xfail:标记预期失败的用例

xfail可以将测试函数标记为预期执行失败的用例。

参数 :condition — 将测试函数标记为 xfail 的条件(True/False )

参数 : reason — 测试函数被标记为 xfail 的原因

参数 : raises — 预期失败的异常类型

参数 : run — 是否应该实际执行测试函数。如果False,该函数将始终 xfail 并且不会被执行 。

参数 : strict — 严格模式(True/False )

Demo
a = 10
@pytest.mark.xfail(a > 20,reason='条件不成立,不执行' raises=AssertionError )
def test_demo()
	assert item > 50

1.5、pytest.mark.usefixtures:给测试类或模块设置测试夹具

usefixtures标记一般用于给测试类下面的测试方法统一设置测试夹具。

Demo
# TestDome这个测试类的所有测试用例均执行my_fixture这个夹具
@pytest.mark.usefixtures('my_fixture这个夹具')
class TestDome:
    # 函数用例 指定测试夹具
    def test_02(self):
        print('----测试用例:test_01------')

    # 函数用例 指定测试夹具
    def test_03(self):
        print('----测试用例:test_02------')

二、自定义标记

pytest支持通过pytest.ini文件注册自定义的标记。以满足执行用例时,通过标记对用例进行筛选.,

2.1、注册标记

pytest.ini文件注册标记的语法如下:
[pytest]

markers =
    标记1
    标记2

2.2、标记函数

Demo:
# 用例前面加载标签:@pytest.mark.标签名  
@pytest.mark.main
 def test_demo():
    pass

2.3、标记类

Demo:
# 方式一:直接类上面打标记
@pytest.mark.main
class TestClass(object):
    def test_demo1(self):
        assert 10 > 20
  
# 方式二:通过类属性pytestmark,可以同时添加多个标记
class TestClass(object):
    pytestmark = [pytest.mark.main, pytest.mark.main]
  
    def test_demo1(self):
        assert 10 > 20

三、通过标记筛选用例执行

Demo:现有用例如下:
import pytest

@pytest.mark.yuze
@pytest.mark.musen
def test_01():
    print("用例一")

def test_02():
    print("用例二")

@pytest.mark.musen
def test_03():
    print("用例三")

@pytest.mark.musen
def test_04():
    print("用例四")

@pytest.mark.yuze
def test_05():
    print("用例五")

@pytest.mark.yuze
def test_06():
    print("用例六")

上面Demo中有6条测试用例,分别通过pytest.mark.yuze和pytest.mark.musen进行标记了,接下来我们一起来看看如何通过标记选择用例执行。

3.1、通过单个标记筛选

语法:pytest -m '标签名'
Demo: pytest -m musen

执行结果如下:

========================== test session starts ==========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\project\, inifile: pytest.ini
plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2
collected 6 items / 3 deselected / 3 selected                                                                                                               
test_mode.py ...      [100%]
========================== 3 passed, 3 deselected in 0.29s ==========================

可以看到执行结果执行了3条用例,3条未选中。

3.2、同时选中多个标记

语法:pytest -m "标记1 or 标记2"

命令: pytest -m "musen ro yuze"

执行通过musen或者yuze 标记的的用例。执行结果如下:

========================== test session starts ==========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\project\, inifile: pytest.ini
plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2
collected 6 items / 1 deselected / 5 selected                                                                                                               
test_mode.py .....      [100%]
========================== 5 passed, 1 deselected in 0.29s ==========================

从上述结果可以看到,只要加了musen或yuze这两个标记中的任意一个

语法: pytest -m "标记1 and 标记2"

命令: pytest -m "musen and yuze"

执行通过musen和yuze这两个标记同时标记的用例。执行结果如下

========================== test session starts ==========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\project\, inifile: pytest.ini
plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2
collected 6 items / 5 deselected / 1 selected                                                                                                               
test_mode.py .      [100%]
========================== 1 passed, 5 deselected in 0.29s ==========================

END今天的分享就到此结束了!点赞关注不迷路~!

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

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

相关文章

WebGL开发安全培训应用

使用 WebGL 开发安全培训应用可以为员工提供在虚拟环境中体验危险情境、学习安全操作和应急处理技能的机会。以下是开发安全培训应用的一般步骤,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.明确…

Web(10)XSS漏洞

XSS跨站脚本攻击 XSS是什么 XSS(cross-site-scripting) 即是跨站脚本攻击,是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了 HTML 以及用户端…

实战10 角色管理

目录 1、角色后端接口 2、角色列表查询 2.1 效果图 2.2页面原型代码 2.3 角色api代码 role.js 2.4 查询角色列表代码 4、 新增和编辑角色 5、删除角色 6、分配权限 6.1 分配权限思路 6.2 分配权限回显接口 6.3 分配权限回显前端实现 6.4分配权限后端接口 6.4.1 R…

实验八 基于FPGA的分频器的设计

基本任务一:设计一个分频器,输入信号50MHZ,输出信号频率分别为1KHZ,500HZ,1HZ。 m100: 扩展任务二:控制蜂鸣器发出滴滴滴的声音

补题与总结:leetcode第 377 场周赛

文章目录 写在最前面的复盘2977. 转换字符串的最小成本 II(Flody 爆搜优化->dp) 写在最前面的复盘 感谢leetcode,丰富了我为数不多的卡常经验 2是简单思维题,但卡常 4是爆搜优化,也卡常,补题时给卡麻了…

【HBase】——简介

1 HBase 定义 Apache HBase™ 是以 hdfs 为数据存储的,一种分布式、可扩展的 NoSQL 数据库。 2 HBase 数据模型 • HBase 的设计理念依据 Google 的 BigTable 论文,论文中对于数据模型的首句介绍。 Bigtable 是一个稀疏的、分布式的、持久的多维排序 m…

.Net7.0 或更高版本 System.Drawing.Common 上传图片跨平台方案

项目升级.Net7.0以后,System.Drawing.Common开关已经被删除,且System.Drawing.Common仅在 Windows 上支持 ,于是想办法将原来上传图片验证文件名和获取图片扩展名方法替换一下,便开始搜索相关解决方案。 .Net6.0文档:…

Python 高级(四):线程池 ThreadPoolExecutor

大家好,我是水滴~~ 当涉及到需要同时处理多个任务的情况时,使用线程池是一种高效的方法。Python提供了concurrent.futures模块,其中的ThreadPoolExecutor类使得使用线程池变得非常方便。本文将详细介绍Python线程池的概念、使用方法和示例代…

使用 AnyGo 修改 iPhone 手机定位

在当今数字化时代,我们的手机已经成为我们日常生活中不可或缺的一部分。然而,有时我们可能会遇到一些情况,需要修改手机的定位信息。这个需求可能来自于各种不同的原因,包括但不限于保护个人隐私、测试应用程序的地理位置相关功能…

数据仓库【5】:项目实战

数据仓库【5】:项目实战 1、项目概述1.1、项目背景1.2、复购率计算 2、数据描述3、架构设计3.1、数据仓库架构图 4、环境搭建4.1、环境说明4.2、集群规划4.3、搭建流程 5、项目开发5.1、业务数据生成5.2、ETL数据导入5.3、ODS层创建&数据接入5.4、DWD层创建&…

【面试】Java中的多种设计模式(十种主要设计模式)

Java中的多种设计模式(十种主要设计模式) 文章概述 设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。它是软件工程中常见问题的解决方案的一种描述或模板。设计模式可以提供一种通用的、可重用的解决方案,帮助开发…

leetcode 75. 颜色分类(medium)(优质解法)

链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码&#xff1a; class Solution {public void sortColors(int[] nums) {int left-1,rightnums.length,i0;while(i<right){if(nums[i]0){left;swap(nums,left,i);i;}else if(nums…

【学习笔记】Java函数式编程03 Stream流-终结操作

书接上回 3.3.3 终结操作 3.3.3.1 forEach 对集合的每一个元素进行处理 接触很多了不赘述 3.3.3.2 count 用来获取当前流中的元素的个数 比如&#xff0c;打印出所有作家的作品的总数 System.out.println(authors.stream().flatMap(author -> author.getBooks().stre…

第九部分 图论

目录 例 相关概念 握手定理 例1 图的度数列 例 无向图的连通性 无向图的连通度 例2 例3 有向图D如图所示&#xff0c;求 A, A2, A3, A4&#xff0c;并回答诸问题&#xff1a; 中间有几章这里没有写&#xff0c;感兴趣可以自己去学&#xff0c;组合数学跟高中差不多&#xff0c…

2024,华为重塑笔记本的“创新周期”

作者 | 曾响铃 文 | 响铃说 谈及电脑PC&#xff0c;相信不少消费者都会下意识地给行业贴一个标签&#xff1a;夕阳行业。毕竟当下已经是移动互联网时代&#xff0c;传统PC的使用场景不断萎缩&#xff0c;市场研究机构Gartner报告显示&#xff0c;截至2023年第三季度&#xff…

LLM应用于MPC

现有的基于学习的自动驾驶系统&#xff08;AD&#xff09;在理解高级信息和提供可解释性方面存在挑战。为了解决这些问题&#xff0c;这项工作采用LLM作为复杂AD场景的决策组件。作者设计了认知途径&#xff08;cognitive pathway&#xff09;来实现LLM的综合推理&#xff0c;并…

python作业题百度网盘,python作业答案怎么查

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python作业题百度网盘&#xff0c;python作业答案怎么查&#xff0c;今天让我们一起来看看吧&#xff01; 1 以下代码的输出结果为&#xff1a; alist [1, 2, 3, 4] print(alist.reverse()) print(alist) A.[4, 3, 2, …

Python爬虫中的代理IP设置与实战策略

在Python爬虫中&#xff0c;使用代理IP设置是一种常见的策略&#xff0c;主要用于以下几个目的&#xff1a; 1. 避免被目标网站封禁&#xff1a;频繁的请求可能会引起目标网站的注意&#xff0c;导致你的IP被封锁。通过使用代理IP&#xff0c;你可以模拟来自不同地点和设备的请…

【WPF】使用Behavior以及ValidationRule实现表单校验

文章目录 使用ValidationRule实现检测用户输入EmptyValidationRule 非空校验TextBox设置非空校验TextBox设置非空校验并显示校验提示 结语 使用ValidationRule实现检测用户输入 EmptyValidationRule是TextBox内容是否为空校验&#xff0c;TextBox的Binding属性设置ValidationRu…

AR智慧校园三维主电子沙盘系统研究及应用

一 、概述 易图讯科技(www.3dgis.top)自主研发的智慧校园三维主电子沙盘系统&#xff0c;采用B/S架构模式&#xff0c;采用自主可控高性能WebGIS可视化引擎&#xff0c;支持多用户客户端通过网络请求访问服务器地图和专题数据&#xff0c;提供地理信息数据、专题数据的并发访问…