首页 > 其他分享 >Pytest参数详解 — 基于命令行模式

Pytest参数详解 — 基于命令行模式

时间:2024-10-15 21:20:13浏览次数:8  
标签:输出 命令行 -- 测试用例 测试 Pytest tb 详解

Hey,大家周二好啊!今天我们来聊聊一个非常实用的话题:Pytest的命令行参数。Pytest是一个强大的Python测试框架,它支持简单的单元测试和复杂的功能测试。但是,你真的了解如何充分利用Pytest的命令行参数来优化你的测试流程吗?如果你还不是很清楚,那么这篇文章就是为你准备的!

在Python的世界里,有多种测试框架,但Pytest以其简洁的语法、丰富的插件生态和强大的功能脱颖而出。它支持参数化测试、fixtures(固定装置)、插件系统等,这些都使得编写和运行测试变得更加高效。

Pytest的命令行接口提供了丰富的参数,可以帮助你控制测试的执行方式。这些参数不仅可以帮助你选择特定的测试用例,还可以调整测试的输出格式,甚至集成到持续集成系统中。下面,我们就来一探究竟。

1、--collect-only

查看在给定的配置下哪些测试用例会被执行

2、-k

使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同,可以使用表达式来快速定位,例如:

图片

命令行-k参数.png

3、-m

标记(marker)用于标记测试并且分组,以便快速选中并运行。使用 @pytest.mark 来标记。

  • 可以使用 -m "mark1 and mark2" 同时选中贷有这两个标记的所有测试用例。

  • 使用 -m "mark1 and not mark2" 则会选中有mark1的测试用例,而过滤掉 mark2 的测试用例。

  • 使用 -m "mark1 or mark2" 选中带有 mark1 或者 mark2 的所有测试用例

4、-x

正常情况下 pytest 会运行每一个搜集到的测试用例。如果某个测试用例断言失败,或者触发了异常,那么该测试用例的运行就会到此停止。pytest 会将其标记为失败后继续运行下一个测试用例。但是在 debug 时,如果需要遇到失败立即停止整个会话可以加上 -x。调试完成后可以去掉 -x,可以使用 -tb=no 关闭错误信息回溯。

5、--maxfail=num

-x 是遇到失败就停止运行,而 --maxfail 则可以指定允许失败几次,达到最大失败次数以后停止运行

6、-s 与 --capture=method

-s 等价于 --capture=no ,关闭了输出捕获。正常情况下,任何符合标准的输出流信息都会被捕获。--capture=fd 时,若文件描述符(file descriptor)为1或者2,则会被输出至临时文件中。使用 --capture=sys 时sys.stdout/stderr 将会被输出至内存。

7、-l/--showlocals

在测试失败时会打印出局部变量名和他们的值以避免不必要的 print 语句

8、--if/--ff

当一个或者多个测试用例失败时,如果希望定位到最后一个失败的用例重新运行,可以使用 --lf。--ff 与 --lf 基本相同,不同的在于 --ff 会运行完剩余的测试用例

9、-v

使得输出信息更详细,不加的情况下每个文件显示一行,加了以后每条用例显示一行,测试名与结果都会显示出来而不仅仅是一个点或者一个字符

10、-q

与 -v 相反,简化输出信息。

11、--tb=style

  • --tb=style:决定捕捉到的失败时输出信息的显示方式。

  • --tb=no:屏蔽全部回溯信息

  • --tb=line:打印错误的位置

  • --tb=short:较 no 和 line 更详细,给出错误信息

  • --tb=long:输出最为详细的信息

  • --tb=auto:默认值,如果有多个用例失败,仅打印第一个和最后一个用例的回溯信息,格式为 long

  • --tb=native:只输出 Python 标准库的回溯信息

12、--duration=N

可以加快测试节奏,统计测试过程中哪个阶段时最慢的,包括测试用例的 call、setup、teardown。他会显示最慢的 N 各阶段,耗时越长越靠前,如果 N = 0,则会将所有阶段按照耗时从长到短排序后显示

Pytest的命令行参数是其强大功能的一部分,它们可以帮助你更有效地编写和运行测试。通过掌握这些参数,你可以定制测试流程,使其更加符合你的需求。希望这篇文章能帮助你更好地利用Pytest,提升你的测试效率。如果你有任何问题或想要分享你的Pytest使用经验,欢迎在评论区留言!

别忘了点赞和关注,获取更多Python和测试相关的精彩内容!

标签:输出,命令行,--,测试用例,测试,Pytest,tb,详解
From: https://blog.csdn.net/m0_58552717/article/details/142963509

相关文章

  • 循序渐进丨MogDB 数据库查询重写规则lazyagg详解
    问题概述在MogDB和openGauss中,参数rewrite_rule用于控制查询重写,本文介绍查询重写规则lazyagg。在未设置rewrite_rule=lazyagg的情况下,子查询中有GROUPBY会先进行GROUPBY;lazyagg表示延迟聚合运算,目的是消除子查询中的聚合运算,先关联再GROUPBY;当子查询中有GROUPBY,子......
  • Java 时间格式转换详解
    在Java开发中,时间和日期的处理是非常常见的需求。无论是用户输入的时间数据,还是系统生成的时间戳,我们经常需要对其进行格式化或解析。本文将详细介绍如何在Java中进行时间格式的转换,并分别介绍两种主要的方法:SimpleDateFormat(适用于Java8之前)和 java.time(适用于Java8......
  • 详解Python中的Requests会话管理
    在Python的网络编程中,requests库因其简洁的API和强大的功能而广受欢迎。它简化了HTTP请求的过程,使得开发者可以轻松地发送请求并处理响应。然而,requests库的真正强大之处在于其会话管理功能。通过会话管理,我们可以维护一个会话,在这个会话中发送多个请求,这样可以提高性能并......
  • RocketMq详解:五、SpringBoot+Aop实现RocketMq的幂等
    上一章:《RocketMq详解:四、RocketMq消息的重试》文章目录1什么是幂等2需要进行消息幂等的场景3.如何才能实现消息幂等呢4.RocketMQ场景下如何处理消息幂等4.1消费端常见的幂等操作1.使用唯一标识符2.Redis处理标志位3.分布式锁3.1数据库乐观锁3.2数据库悲观锁3.3Re......
  • GDPR核心要点详解与实践应用
    1.基本原则(第5条)©ivwdcwso(ID:u012172506)GDPR的7个基本原则及其实践应用:合法性、公平性和透明度实例:Netflix清晰说明如何使用用户数据,并获得用户同意。目的限制实例:LinkedIn仅将收集的职业信息用于networking目的,不用于其他未经授权的用途。数据最小......
  • Nuxt.js 应用中的 modules:before 事件钩子详解
    title:Nuxt.js应用中的modules:before事件钩子详解date:2024/10/15updated:2024/10/15author:cmdragonexcerpt:modules:before是Nuxt.js中一个重要的生命周期钩子,在Nuxt应用初始化期间被触发。该钩子允许开发者在安装用户定义的模块之前执行某些操作,如配置或环......
  • 神经网络之卷积篇:详解残差网络(ResNets)(Residual Networks (ResNets))
    详解残差网络ResNets是由残差块(Residualblock)构建的,首先解释一下什么是残差块。这是一个两层神经网络,在\(L\)层进行激活,得到\(a^{\left\lbrackl+1\right\rbrack}\),再次进行激活,两层之后得到\(a^{\left\lbrackl+2\right\rbrack}\)。计算过程是从\(a^{[l]}\)开始,首先进......
  • 用python、JavaScript、JAVA等多种语言的实例代码演示教你如何免费获取股票数据(实时数
    ​近一两年来,股票量化分析逐渐受到广泛关注。而作为这一领域的初学者,首先需要面对的挑战就是如何获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的核心任务是从这些数据......
  • Windows 11 开发详解:工具与高级用法
    1.引言Windows11是微软最新的操作系统,它不仅带来了全新的用户界面和设计理念,还为开发者提供了强大的开发工具和平台支持。在过去的几年中,开发工具和技术栈发生了巨大的变化,Windows11通过其集成的开发环境、虚拟化技术、容器支持以及跨平台开发工具,为开发者提供了一个更加......
  • MT1351-MT1360 码题集 (c 语言详解)
    MT1351·用函数判断素数c语言代码实现#include<stdio.h>intisPrime(intnum){if(num<=1)return0;for(inti=2;i*i<=num;i++){if(num%i==0){return0;}}return1;}intmain(){......