管理Pytest输出
r 标记可用于在测试会话结束时显示”简短测试摘要信息“,在大规模测试套件中,使失败、跳过、xfail等更清晰、更容易了解默认为fE,以列出失败和错误运行结果-r选项后面可以接受多个字符,上面使用的a意味着”除了通过的其他都展示“可用完整字符列表f - 失败E - 错误s - 跳过x - xfailed(预期失败)x - xpassed(预期失败但实际通过)p - 通过P - 通过并有输出用于(取消
一.修改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版本更改)
更多推荐
所有评论(0)