Pytest框架中用例用例执行常用参数介绍

pytest 支持通过命令行参数来定制测试运行的方式。以下是一些常用的 pytest 执行参数介绍。

学习目录

-q 或 --quiet: 安静模式,只显示进度和摘要

-s : 选项允许在测试的输出中捕获 stdout 和 stderr。

-v : 选项会使 pytest 的输出更加详细。

-k :只运行能匹配到给定参数表达式的测试用例。

-m :运行符合给定标记的测试。

-x 或 --exitfirst:一旦有一个测试失败,就停止运行其他测试。

--lf 或 --last-failed:只重新运行上次失败的测试。

--tb=style:选择用例失败时的回溯打印风格。

--collect-only:只收集测试用例,但不执行。

--junitxml=path:创建一个 JUnit 格式的 XML 文件来存储测试结果

我们先创建python文件test_case3.py,创建3条用例。

import pytest
#函数1
def test_1():assert 1==1print('\n用例test_1执行成功')
class TestCase():@staticmethoddef test_2(): #函数2assert 1 == 1print('\n用例test_2执行成功')@staticmethoddef test_3(): #函数3print('\n用例test_3执行成功')

通过pyton.main函数+参数的方式来执行用例,看下不同参数的效果如何

-q 或 --quiet: 安静模式,只显示进度和摘要

pytest.main(["-q","test_case3.py"])

执行结果如下:

-s : 选项允许在测试的输出中捕获输出。

默认情况下,pytest 会捕获这些输出,这样如果你在测试函数或方法中打印了一些内容,那么这些内容在标准的 pytest 输出中是不可见的。但是,如果你使用了 -s 选项,那么这些打印内容就会在控制台中显示。

pytest.main(["-s","test_case3.py"])

执行结果如下:

-v : 选项会使 pytest 的输出更加详细。

显示每个测试的开始和结束以及测试通过的详细信息。

包括显示每个测试的开始和结束、每个测试模块的导入等。它提供了关于测试运行进度的更多信息,这在调试或查看测试结果时可能很有用。pytest.main(["-v","test_case3.py"])

执行结果如下:

将-s和-v结合使用:

pytest.main(["-s","-v","test_case3.py"])

执行后输出更详细

-k :只运行能匹配到给定参数表达式的测试用例。

-k 参数后面跟着一个表达式,该表达式可以包含测试名称中的任何字符串。pytest 会运行所有名称匹配该表达式的测试用例。

  • 运行名称中包含a的测试用例

       比如 -k "a"

  • 运行名称中包含a或b的测试用例

       比如 -k "a or b"

  • 运行名称中包含a和b的测试用例

       比如 -k "a and b"

  • 运行名称中包含a但不包含b的测试用例

        比如 -k "a and not b"

注意事项

  • -k 参数是大小写敏感的,所以 "a" 和 "A" 会被视为不同的字符串。
  • 如果测试名称很长或很复杂,并且你想要匹配的是这些名称中的某个特定部分,那么使用 -k 参数可能会变得有些繁琐。在这种情况下,考虑使用 @pytest.mark 装饰器来标记测试用例,并使用 -m 参数来根据标记运行测试可能会更简洁和清晰。
  • -k 参数只是根据测试名称进行匹配

例如给定参数-k "tes_1 or test_2" 会运行名称中包含 "test_1" 或 "test_2" 的测试用例。

pytest.main(['-v','-k test_1 or test_2','test_case3.py'])

执行结果如下:只执行了test_1 和test_2用例

-m :运行符合给定标记的测试。

我们可以使用 @pytest.mark 装饰器为测试用例添加标记。例如标记测试用例为version1_1_0,我们可以使用 -m version1_1_0来只运行这些测试用例。

使用方式跟-k参数类似,可以填and 或者or等表达式符号。

举例:将test_1和test_2标记为version1_1_0,将test_3标记为version1_1_1

#函数1
@pytest.mark.version1_1_0
def test_1():assert 1==1print('\n用例test_1执行成功')
class TestCase():@pytest.mark.version1_1_0def test_2(self): #函数2assert 1 == 1print('\n用例test_2执行成功')@pytest.mark.version1_1_1def test_3(self): #函数3assert 1 == 1print('\n用例test_3执行成功')

pytest.main(['-v','-m version1_1_0','test_case3.py']),执行结果如下:

--maxfail=n:在n个用例失败之后停止测试执行。

将上面的三条用例我们改为使用assert 1!=1断言失败,此时用例都会报错

import pytest
#函数1
def test_1():assert 1!=1print('\n用例test_1执行成功')
class TestCase():@staticmethoddef test_2(): #函数2assert 1 != 1print('\n用例test_2执行成功')@staticmethoddef test_3(): #函数3assert 1 != 1print('\n用例test_3执行成功')

使用--maxfail=1表示失败1条后终止测试执行

pytest.main(['-v','--maxfail=1','test_case3.py']),执行结果如下

-x 或 --exitfirst:一旦有一个测试失败,就停止运行其他测试。

这与 --maxfail=1 类似,但更简洁。还是上面的用例,改为-x参数执行

pytest.main(['-v','-x','test_case3.py'])

执行结果如下:跟--maffail=1一样的结果

--lf 或 --last-failed:只重新运行上次失败的测试。

举例:结合上面的用例执行情况test_1用例执行失败了

我们修改test_1测试用例为assert 1==1,然后添加参数--lf

pytest.main(['-v','--lf','test_case3.py'])

执行结果如下:选择了上次执行失败的test_1用例重新执行

--tb=style:选择用例失败时的回溯打印风格。

例如,--tb=short 会打印较短的回溯,只显示文件名、行号和错误消息。其他选项包括 long(默认)、no(不显示回溯)和 line(每行一个回溯)。

  • --tb=short

pytest.main(['-v','--tb=short','test_case3.py']),执行结果如下

  • --tb=long

pytest.main(['-v','--tb=long','test_case3.py']),执行结果如下

  • --tb=line

pytest.main(['-v','--tb=line','test_case3.py']),执行结果如下

--collect-only:只收集测试用例,但不执行。

可以帮助我们查看将要运行的测试用例列表,而不实际运行它们。

执行收集测试用例

pytest.main(['-v','--collect-only','test_case3.py']),执行结果如下:

--junitxml=path:创建一个 JUnit 格式的 XML 文件来存储测试结果。

举例将执行结果存放在test1.xml中。

pytest.main(['-v','--junitxml=test1.xml','test_case3.py']),执行结果如下:

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DIYP对接骆驼后台IPTV管理,退出菜单中显示用户名已经网络信息,MAC,剩余天数,套餐名称等

演示:https://url03.ctfile.com/f/1779803-1042599473-4dc000?p8976 (访问密码: 8976) 后台加上EPG,增加一些播放源的动态端口替换。 前台app上,退出菜单中显示用户名已经网络信息,MAC,剩余天数,套餐名称…

QT之常用控件

一个图形化界面当然需要有各种各样的控件,QT也不例外,在QT designer中就有提供各种各样的控件,用以开发图形化界面。 而想使用好一个QT控件,就需要了解这些控件。 QWidget 在QT中,所有控件都继承自 QWidget 类&…

中间件模版引擎

文章目录 中间件1.自定义中间件1)全局2)局部中间件 2.内置中间件(静态资源目录) Art-template1.模板语法1)输出2)原文输出3)条件判断4)循环5)子模版6)模版继承7&#xff…

git远程仓库限额的解决方法——大文件瘦身

Git作为世界上最优秀的分布式版本控制工具,也是优秀的文件管理工具,它赋予了项目成员对项目进行远程协同开发能力,因此受到越来越多的行业从业人员的喜爱。很多优秀的项目管理平台,比如国内的Gitee,国外的Github&#…

Django表单革命:打造安全、高效、用户友好的Web应用

Django表单处理,听起来是不是有点枯燥?别急,阿佑将带你领略Django表单的艺术之美。我们将以轻松幽默的语言,一步步引导你从表单的创建到管理,再到验证和自定义,让你在不知不觉中掌握Django表单的精髓。文章…

SpringMVC:转发和重定向

1. 请求转发和重定向简介 参考该链接第9点 2. forward 返回下一个资源路径,请求转发固定格式:return "forward:资源路径"如 return "forward:/b" 此时为一次请求返回逻辑视图名称 返回逻辑视图不指定方式时都会默认使用请求转发in…

留给“端侧大模型”的时间不多了

端侧大模型(Edge AI models),也就是只在设备本地(如智能手机、IoT设备、嵌入式系统等)运行的大模型,过去一两年来非常流行。 具体表现在,终端设备厂商,如苹果、荣耀、小米、OV等&…

【操作与配置】VS2017与MFC环境配置

【操作与配置】VS2017与MFC环境配置 概述 Visual Studio 是一款强大且多功能的集成开发环境(IDE),适用于软件开发人员和团队。使用此应用程序,您可以构建和调试现代Web应用程序,并利用扩展帮助探索几乎任何编程语言。…

重学java 55. 集合 Set接口

我救自己万万次,铮铮劲草,绝不动摇 —— 24.6.2 一、Set集合介绍 Set和Map密切相关的 Map的遍历需要先变成单列集合,只能变成set集合 二、HashSet集合的介绍和使用 1.概述 HashSet是Set接口的实现类 2.特点 a、元素唯一 b、元素无序 c、无索引…

devicemotion 或者 deviceorientation在window.addEventListener 事件中不生效,没有输出内容

问题&#xff1a;devicemotion 或者 deviceorientation 在window.addEventListener 事件中不生效&#xff0c;没有输出内容 原因&#xff1a; 1、必须在Https协议下才可使用 2、必须用户手动点击click事件中调用 &#xff0c;进行权限申请 源码&#xff1a; <!DOCTYPE h…

Docker 部署 mysql 服务

linux用法 Container&#xff08;容器&#xff09;集合成 Services&#xff08;服务&#xff09; 交互集合成 Stack&#xff08;堆栈&#xff09;卸载可能存在的旧版本 sudo apt-get update使apt可以通过HTTPS使用存储库&#xff08;repository&#xff09; sudo apt-get ins…

961操作系统知识总结

部分图片可能无法显示&#xff0c;参考这里&#xff1a;https://zhuanlan.zhihu.com/p/701247894 961操作系统知识总结 一 操作系统概述 1. 操作系统的基本概念 重要操作系统类型&#xff1a;批处理操作系统(批量处理作业&#xff0c;单道批处理/多道批处理系统&#xff0c;用…

7. MySQL 视图、索引

文章目录 【 1. 视图 View 】1.1 视图原理1.2 创建视图 CREATE VIEW1.2.1 创建基于单表的视图1.2.2 创建基于多表的视图 1.3 查看视图1.3.1 查看视图的内容1.3.2 查看视图的详细信息 1.4 修改视图 ALTER VIEW1.4.1 修改视图内容1.4.2 修改视图名称 1.5 删除视图 DORP VIEW 【 2…

使用python下载股票数据至sqlite数据库

代码下载地址&#xff1a; https://download.csdn.net/download/weixin_44600457/89389489

PCIe总线-事物层之TLP路由介绍(七)

1.概述 下图是一个PCIe总线系统示意图。此时RC发出一个TLP&#xff0c;经过Switch访问EP&#xff0c;TLP的路径为红色箭头所示。首先TLP从RC的下行OUT端口发出&#xff0c;Switch的上行IN端口接收到该TLP后&#xff0c;根据其路由信息&#xff0c;将其转发到Switch的下行OUT端…

Re73 读论文:ULMFiT Universal Language Model Fine-tuning for Text Classification

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;Universal Language Model Fine-tuning for Text Classification 模型简称&#xff1a;ULMFiT 模型全名&#xff1a;Universal Language Model Fine-tuning ArXiv网址&#xff1a;https…

513.找树左下角的值

给定一个二叉树&#xff0c;在树的最后一行找到最左边的值。 示例 1: 示例 2: 思路&#xff1a; 深度最大的叶子结点一定是最后一行。 优先左边搜索&#xff0c;记录深度最大的叶子节点&#xff0c;此时就是树的最后一行最左边的值 代码&#xff1a; class Solution:def fi…

语言模型的校准技术:增强概率评估

​ 使用 DALLE-3 模型生成的图像 目录 一、说明 二、为什么校准对 LLM 模型至关重要 三、校准 LLM 概率的挑战 四、LLM 的高级校准方法 4.1 语言置信度 4.2 增强语言自信的先进技术 4.3 基于自一致性的置信度 4.4 基于 Logit 的方法 五、代理模型或微调方法 5.1 使用代…

Python 网络爬虫:深入解析 Scrapy

大家好&#xff0c;在当今数字化时代&#xff0c;获取和分析网络数据是许多项目的关键步骤。从市场竞争情报到学术研究&#xff0c;网络数据的重要性越来越被人们所认识和重视。然而&#xff0c;手动获取和处理大量的网络数据是一项繁琐且耗时的任务。幸运的是&#xff0c;Pyth…

Stable Diffusion安装记录II

文章目录 前言0 更改python路径&#xff08;跳过&#xff09;1 Torch is not able to use GPU1.1 确认显卡1.2 安装nvdia驱动 1.3 检查CUDA1.4更改启动脚本 2 依赖安装2.1 pip install报错2.2 git报错2.3 卡在installing requirements 3 启动咯~3.1 clip报错 4 成功运行4.1 遗留…