一.修改python回溯打印

展示回溯本地变量

pytest --showlocals

展示本地变量

pytest -l

隐藏本地变量(如果命令行允许地话)

pytest --no-showlocals

默认情况下,在文件描述符级别捕获

pytest --capture=fd

在sys级别捕获

pytest --capture=sys

不捕获

pytest --capture=no

不捕获(快捷方式)

pytest -s

捕获到日志,但也输出到系统级别

pytest --capture==tee-sys

默认第一个和最后一个地长回溯

pytest --tb=auto

详细的回溯格式

pytest --tb=long

短的格式回溯

pytest --tb=short

每次失败只有一行

pytest --tb=line

Python标准库格式

pytest --tb=native

没有任何追溯

pytest --tb=no

在错误是打印非常长的回溯(比 --tb=long更长),会确保在**KeyboardInterrupt**(Ctrl+C)时打印堆栈回溯,如果测试运行时间过长,并且通过Ctrl+C中断找出测试”挂起“的位置,默认情况下不会显示任何输出(因为KeyboardInterrupt被pytest捕获)

二.详细报告

简洁-少冗余模式

pytest --quiet(简洁模式pytest -q)

增加冗长,显示单个测试名称,显示详细信息

pytest -v

更详细,从测试输出显示更多细节

pytest -vv

不是标准模式,可以在某些设置中用于更详细的内容

pytest -vvv

-v 标志控制pytest输出的详细程度,包括:测试会话进度、测试失败时的断言细节、--fixtures时的fixture细节

现有如下代码

运行代码

注:

  • 文件中的每个测试在输出中显示为一个字符:.表示通过,F表示失败
  • test_words_fail失败,输出一个简短的摘要,指出两个列表的所有不同
  • test_numbers_fail失败,字典项左右差异的摘要,相同的项被省略
  • test_long_text_fail失败,并且in语句的右侧被截断,使用……,比内部阙值(目前240个字符)长

运行添加-v,输出更详细的报告

注:

  • 文件中的每个测试在输出中独占一行
  • test_words_fail现在完整显示两个失败的列表,此外还显示哪个索引不同
  • test_numbers_fail现在显示两个字典的文本差异,已截断
  • test_long_text_fail不再截断in语句的右侧,因为内部截断阙值现在更大(目前2400个字符)

细粒度详细程度

指定应用程序范围的详细程度级别之外,可以独立控制特定的方面,通过在配置文件中为输出的特定方面设置详细程度级别来完成

verbosity_assertions:控制执行pytest时断言输出的详细程度,pytest --no-header值为2时运行,将与之前的示例具有相同的输出,但文件中的每个测试在输出中显示为一个字符

verbosity_test_cases:控制执行pytest时测试执行输出的详细程度,pytest --no-header值为2时运行,将与第一个详细程度示例具有相同的输出,但文件中的每个测试在输出中独占一行

三.生成详细摘要报告

-r 标记可用于在测试会话结束时显示”简短测试摘要信息“,在大规模测试套件中,使失败、跳过、xfail等更清晰、更容易了解

默认为fE,以列出失败和错误

运行结果

-r选项后面可以接受多个字符,上面使用的a意味着”除了通过的其他都展示“

可用完整字符列表

  • f - 失败
  • E - 错误
  • s - 跳过
  • x - xfailed(预期失败)
  • x - xpassed(预期失败但实际通过)
  • p - 通过
  • P - 通过并有输出

用于(取消)选择组的特殊字符

  • a - 除了p、P之外的所有
  • A - 所有
  • N - 无,这可用于不显示任何内容(因为fE是默认值)

可用使用多个字符,如:只查看失败和跳过的测试

使用p会列出通过的测试,而P会添加一个额外的”PASSES“部分,其中包含通过但有捕获输出的测试

注:默认情况下,如果跳过的测试参数化变体红线相同的跳过原因,它们将被分组在一起,可用使用 --no-fold-skipped分别打印每个跳过的测试

四.修改截断限制

默认的截断限制是8行或640个字符,以先到达者为准,要设置自定义截断限制,可用使用pytest.ini文件选项

这将导致pytest将断言截断为10行或90个字符,以先达到者为准

将turncation_limit_lines和truncation_limit_chars都设置为0将禁用截断,但是,只设置其中一个只将禁用已知截断模式,但保留另一种模式

五.创建JUnitXML格式文件

要创建可由Jenkins或其他持续可集成服务器读取的结果文件,要使用这个命令调用pytest --junit-xml=path,以在path处创建XML文件

要设置根测试套件XML项的名称,可用在配置文件中配置junit_suite_name选项

Junit XML规范表明”time“属性应报告总测试执行时间,包括setup和teardown(1,2),这是pytest的默认行为,仅要报告调用持续时间,要配置junit_duration_report选项

1.record_property

如果想为测试记录额外信息,可用使用record_property fixture

这将在生成的testcase标签中添加一个额外的属性example_key="1"

也可以将此功能与自定义标记集成

注:使用此功能将破坏最新JUnitXML模式的模式验证,与某些CI服务器一起使用时,会出现问题

2.record_xml_attribute

要向testcase元素添加额外的XML属性,可用使用record_xml_attribute fixture,可以用于覆盖现有值

与record_property不同,这不会添加新的子元素,相反,这将在生成的testcase标签内添加一个属性assertions="REQ-1234"并用”classname=custom_classname“覆盖默认的classname

注:record_xml_attribute是一个实验性功能,当使用CI工具解析XML报告时,使用此功能而不是record_xml_property可能会有所帮助,然而,一些解析器对允许的元素和属性非常严格,许多工具使用XSD模式来验证传入的XML,请确保您使用的属性名称被解析器允许

3.record_testsuite_property

在测试套件级别添加一个properties节点,其中可能包含与所有测试相关的属性,可以使用record_testsuite_property会话级fixture

record_testsuite_property会话级fixture可用于添加与所有测试相关的属性

该fixture是一个可调用对象,接受在生成的XML的测试套件级别添加的<property>标签的name和value

name必须是字符串,value将被转换为字符串并正确进行XML转义

与record_Property和record_xml_attribute相反,生成的XML与最新的xunit标志兼容

六.将测试报告发送到在线粘贴服务

为每个测试失败创建URL:pytest --pastebin=failed

这将把测试运行信息提交到远程Paste服务,并为每个失败提供一个URL

为整个测试会话日志创建URL:pytest --pastebin=all

如果创建URL因任何原因失败,将生成警告而不是使整个测试套件失败(5.2版本更改)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐