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

pytest的内置插件盘点17. pastebin

本文系《pytest源码剖析》系列内容

17. pastebin

插件路径:_pytest.pastebin

pastebin 指的是在线剪切板,将内容粘贴后会得到一个 URL,

将这个 URL 分享给其他人之后,即可得到你粘贴的内容,

便于大段文字的分享传输

实现的 hook

调用的 hook

定义的 fixture

插件功能

创建命令行参数--pastebin

failed:只发送失败信息

all:发送完整的终端结果

pytest 执行结束时,向 pastebin 发送信息

代码片段

@pytest.hookimpl(trylast=True)def pytest_configure(config: Config) -> None: if config.option.pastebin == "all": tr = config.pluginmanager.getplugin("terminalreporter") if tr is not None: config.stash[pastebinfile_key] = tempfile.TemporaryFile("w+b") oldwrite = tr._tw.write

def tee_write(s, **kwargs): ...

tr._tw.write = tee_write

def create_new_paste(contents: Union[str, bytes]) -> str: import re from urllib.request import urlopen from urllib.parse import urlencode

def pytest_terminal_summary(terminalreporter: TerminalReporter) -> None: if terminalreporter.config.option.pastebin != "failed": return if "failed" in terminalreporter.stats: terminalreporter.write_sep("=", "Sending information to Paste Service") for rep in terminalreporter.stats["failed"]:

通过修改插件terminalreporter,备份全部的输出

使用标准库urllib发送 HTTP 请求,减少了第三方依赖

如果传递了参数--pastebin failed

会为每一个失败的用例创建单独的 URL

简评

pytest 使用的 pastebin 服务商是 https://bpa.st/

国内速度一般,但好歹能够访问

...

为了获得更详细的信息,可以考虑使用参数

pytest -vvs --pastebin all

如果内容太多,长度超过 pastebin 服务商限制,改为

pytest -vvs --pastebin failed

只为失败的用例粘贴内容

每一个用例独立粘贴

...

此插件功能非常简单,整体设计却非常优雅:

通过 hookpytest_configure来修改插件,轻松的获取到全部内容

通过 hookpytest_terminal_summary精准的只获取失败用例的信息,

不仅可以避免获取到其他内容,而且自动将各用例分开

如果是从全部内容提取失败信息,分离各个用例,怕是要麻烦许多

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券