百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2024-10-26 12:03 25 浏览 0 评论

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==1
  print('\n用例test_1执行成功')
class TestCase():
  @staticmethod
  def test_2(): #函数2
    assert 1 == 1
    print('\n用例test_2执行成功')
  @staticmethod
    def test_3(): #函数3
    print('\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==1
  print('\n用例test_1执行成功')
class TestCase():
  @pytest.mark.version1_1_0
  def test_2(self): #函数2
    assert 1 == 1
    print('\n用例test_2执行成功')
  @pytest.mark.version1_1_1
  def test_3(self): #函数3
    assert 1 == 1
    print('\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!=1
  print('\n用例test_1执行成功')
class TestCase():
  @staticmethod
  def test_2(): #函数2
    assert 1 != 1
    print('\n用例test_2执行成功')
  @staticmethod
  def test_3(): #函数3
    assert 1 != 1
    print('\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']),执行结果如下:

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

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

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

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

相关推荐

PYTHON-简易计算器的元素介绍

[烟花]了解模板代码的组成importPySimpleGUIassg#1)导入库layout=[[],[],[]]#2)定义布局,确定行数window=sg.Window(&#...

如何使用Python编写一个简单的计算器程序

Python是一种简单易学的编程语言,非常适合初学者入门。本文将教您如何使用Python编写一个简单易用的计算器程序,帮助您快速进行基本的数学运算。无需任何高深的数学知识,只需跟随本文的步骤,即可轻松...

用Python打造一个简洁美观的桌面计算器

最近在学习PythonGUI编程,顺手用Tkinter实现了一个简易桌面计算器,功能虽然不复杂,但非常适合新手练手。如果你正在学习Python,不妨一起来看看这个项目吧!项目背景Tkint...

用Python制作一个带图形界面的计算器

大家好,今天我要带大家使用Python制作一个具有图形界面的计算器应用程序。这个项目不仅可以帮助你巩固Python编程基础,还可以让你初步体验图形化编程的乐趣。我们将使用Python的tkinter库...

用python怎么做最简单的桌面计算器

有网友问,用python怎么做一个最简单的桌面计算器。如果只强调简单,在本机运行,不考虑安全性和容错等的话,你能想到的最简单的方案是什么呢?我觉得用tkinter加eval就够简单的。现在开整。首先创...

说好的《Think Python 2e》更新呢!

编程派微信号:codingpy本周三脱更了,不过发现好多朋友在那天去访问《ThinkPython2e》的在线版,感觉有点对不住呢(实在是没抽出时间来更新)。不过还好本周六的更新可以实现,要不就放一...

构建AI系统(三):使用Python设置您的第一个MCP服务器

是时候动手实践了!在这一部分中,我们将设置开发环境并创建我们的第一个MCP服务器。如果您从未编写过代码,也不用担心-我们将一步一步来。我们要构建什么还记得第1部分中Maria的咖啡馆吗?我们正在创...

函数还是类?90%程序员都踩过的Python认知误区

那个深夜,你在调试代码,一行行检查变量类型。突然,一个TypeError错误蹦出来,你盯着那句"strobjectisnotcallable",咖啡杯在桌上留下了一圈深色...

《Think Python 2e》中译版更新啦!

【回复“python”,送你十本电子书】又到了周三,一周快过去一半了。小编按计划更新《ThinkPython2e》最新版中译。今天更新的是第五章:条件和递归。具体内容请点击阅读原文查看。其他章节的...

Python mysql批量更新数据(兼容动态数据库字段、表名)

一、应用场景上篇文章我们学会了在pymysql事务中批量插入数据的复用代码,既然有了批量插入,那批量更新和批量删除的操作也少不了。二、解决思路为了解决批量删除和批量更新的问题,提出如下思路:所有更新语...

Python Pandas 库:解锁 combine、update 和compare函数的强大功能

在Python的数据处理领域,Pandas库提供了丰富且实用的函数,帮助我们高效地处理和分析数据。今天,咱们就来深入探索Pandas库中四个功能独特的函数:combine、combine_fi...

记录Python3.7.4更新到Python.3.7.8

Python官网Python安装包下载下载文件名称运行后选择升级选项等待安装安装完毕打开IDLE使用Python...

Python千叶网原图爬虫:界面化升级实践

该工具以Python爬虫技术为核心,实现千叶网原图的精准抓取,突破缩略图限制,直达高清资源。新增图形化界面(GUI)后,操作门槛大幅降低:-界面集成URL输入、存储路径选择、线程设置等核心功能,...

__future__模块:Python语言版本演进的桥梁

摘要Python作为一门持续演进的编程语言,在版本迭代过程中不可避免地引入了破坏性变更。__future__模块作为Python兼容性管理的核心机制,为开发者提供了在旧版本中体验新特性的能力。本文深入...

Python 集合隐藏技能:add 与 update 的致命区别,90% 开发者都踩过坑

add函数的使用场景及错误注意添加单一元素:正确示例:pythons={1,2}s.add(3)print(s)#{1,2,3}错误场景:试图添加可变对象(如列表)会报错(Pytho...

取消回复欢迎 发表评论: