首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pytest的内置插件盘点8:terminal

8. 内置插件 terminal

插件路径:_pytest.terminal

实现的 hook

调用的 hook

pytest_report_header

pytest_report_collectionfinish

pytest_terminal_summary

pytest_report_teststatus

插件功能

创建命令行参数--verbosity、-v和-q控制报告的详细程度

v越详细,q越多越精简

verbosity通过数字指定详细程度

创建一系列命令行参数,控制是否显示某些内容

创建 ini 配置console_output_style,控制进度的显示形式

创建terminalreporter插件,用于生成终端版测试报告

创建用例的执行结果

failed:失败passed: 成功skipped:跳过deselected:未选中xfailed:预期内失败xpassed:预期外通过warnings:触发警告error:遇到错误

代码片段

group._addoption( "-v", "--verbose", action="count", default=0, dest="verbose", help="Increase verbosity",)group._addoption( "-q", "--quiet", action=MoreQuietAction, default=0, dest="verbose", help="Decrease verbosity",)

group._addoption( "--verbosity", dest="verbose", type=int, default=0, help="Set verbosity. Default: 0.",)

@hookimpl(trylast=True) # after _pytest.runnerdef pytest_report_teststatus(report: BaseReport) -> Tuple[str, str, str]: letter = "F" if report.passed: letter = "." elif report.skipped: letter = "s"

outcome: str = report.outcome if report.when in ("collect", "setup", "teardown") and outcome == "failed": outcome = "error" letter = "E"

return outcome, letter, outcome.upper()

虽然有三个参数,但其实是修改同一个verbose来控制详细程度

根据结果类型,生成字符缩写.、s、F、E

简评

报告的详细程度有 5 级:-2、-1、0、1、2

但 pytest 不是直接判断verbose的值是多少,而是在不同的地方,用不同的方式判断:

1. line 776: 判断是否小于-12. line 660: 判断是否小于03. line 643: 判断是否大于等于04. line 646:判断是否大于等于15. line 556:判断是否大于2

所以读 pytest 的代码真不是一件容易的事情,

要一边看、一边想、一边调试、一边记录

...

console_output_style让 pytest 有两种进度显示方式

第一种是 已执行用例数的百分比(默认)

第二种是 已执行用例数 / 全部用例数

[ 1/27] [ 2/27] [ 4/27][ 9/27][24/27][25/27][27/27]

这种形式很新鲜啊, 我打算用一段时间

...

在unittest中:

凡是出现断言异常,就判定用例失败Failed,

出现其他异常,则判断执行出错Error

但pytest中则是不同:

异常出现在用例执行前的,判定为执行出错Error,

出现在执行过程中的,判定为用例失败Failed,

也即是说,unitest的判定依据是异常类型,pytest的判断依据是执行阶段

从这个角度来看,unittest 比较侧重【对象】,pytest 比较侧重【过程】

...

pytest 中约定的用例执行结果有 8 种,但是本插件只处理了其中 4 种的缩写,

至于剩下的 4 种:

xfailed和xpassed在skip插件中实现

deselected和warnings主要影响终端颜色,不需要缩写

...

本插件主要的功能是创建了配置参数和terminalreporter插件,

报告生成的具体工作,委托给了terminalreporter插件去完成,

按照插件序号,会在本章的第 36 节进行详细介绍

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Ov34DrxpHEWDQBNS22h7HkLQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券