跳转到主要内容

带有进度条和更智能的跟踪回溯的测试运行器

项目描述

在3行内给你的测试添加进度条和更智能的跟踪回溯

pip install nose-progressive
cd your_project
nosetests --with-progressive
https://github.com/erikrose/nose-progressive/raw/master/in_progress.png

nose-progressive是一个nose插件,它在一个固定的进度条中显示进度,从而为测试失败的紧凑显示腾出屏幕(以及滚动回溯缓冲区)空间,它以美丽且有用的方式格式化并显示它们。它会在错误和失败出现时立即显示,并避免将它们滚动出屏幕,以显示更不有用的输出。它还提供了一些其他以人为中心的功能,以加快调试过程。

nose-progressive的指导原则是尽快将有用信息显示在屏幕上,并尽可能长时间地保留它们,同时仍然指示进度。

功能

进度条

nose-progressive在屏幕底部的固定进度条中指示进度。它支持广泛的终端类型,并能优雅地处理终端尺寸变化。与标准的点状测试运行器不同,您可以始终看到正在运行的测试。

跟踪回溯:及时、美观且实用

nose与其他大多数测试运行器一样,通常要等到测试结束时才显示错误和失败的跟踪回溯,这在需要花费许多分钟才能完成的测试套件中会浪费很多时间。我们会在跟踪回溯出现时立即显示它们,这样您就可以立即追踪它们,并且我们以更好的方式格式化它们。

  • 合理使用颜色和其他格式可以使跟踪信息易于浏览。在调试时,滑动到函数名列表以保持位置变得特别容易。

  • 省略“跟踪信息(最后调用)”行,使用相对路径(可选),以及其他许多调整,可以使屏幕空间更加紧凑。

  • 以可以反馈给nose的格式识别失败的测试,使其易于重新运行

    FAIL: kitsune.apps.wiki.tests.test_parser:TestWikiVideo.test_video_english

    要重新运行上述操作,请这样做

    nosetests --with-progressive kitsune.apps.wiki.tests.test_parser:TestWikiVideo.test_video_english
  • 测试本身的结构总是首先出现;我们跳过来自测试工具等设置的结构。这有助于将注意力集中在关键地方。此外,就像unittest本身一样,我们隐藏了进入像assertEquals()assertRaises()这样的简单比较辅助器的任何结构。

    (我们在这方面比unittest做得更好。我们不会在测试之后立即隐藏unittest的结构;我们只剪掉最后一个连续的unittest结构。这使得您可以在mock库的装饰器中包装测试,mock库伪装成unittest,同时仍然看到跟踪信息。)

  • 编辑器快捷方式(见下文)可以让您直接跳转到编辑器中的任何问题行。

编辑器快捷方式

对于跟踪信息中的每个框架,nose-progressive提供了一个编辑器快捷方式。这是一个文件系统路径和行号的组合,该组合格式被vi、emacs、BBEdit命令行工具以及许多其他编辑器所理解。

vi +361 apps/notifications/tests.py  # test_notification_completeness

只需三击(或相应操作)选择行,并将其复制粘贴到命令行。您将直接到达所选编辑器中的有问题的行。作为奖励,编辑器快捷方式比标准跟踪信息格式更紧凑。

您可以通过设置以下任一选项来设置要使用的编辑器,nose-progressive将按顺序检查

  • 命令行选项 --progressive-editor

  • NOSE_PROGRESSIVE_EDITOR 环境变量

  • $EDITOR 环境变量

自定义错误类

nose-progressive完全支持像Skip和Deprecated这样的自定义错误类。我们像对待正常错误和失败一样,在实时中记录引发它们的测试

TODO: kitsune.apps.sumo.tests.test_readonly:ReadOnlyModeTest.test_login_error

然而,当一个错误类不被视为失败时,我们不会显示它,除非使用了--progressive-advisories选项,即使在那种情况下,我们也不会显示跟踪信息(因为通常重要的信息是测试被跳过了,而不是跳过的行)。这源于我们优先考虑有用信息的理念。

自定义错误类在运行后的计数中进行总结,包括失败和错误

4 tests, 1 failure, 1 error, 1 skip in 0.0s
         ^^^^^^ Bold ^^^^^^

代表失败的错误类的非零计数以粗体显示,以吸引眼球并对应于滚动回溯中的粗体细节。只需跟随粗体,您就会找到您的错误。

Django支持

nose-progressive可以通过django-nose运行您的Django测试。只需安装django-nose,然后像这样运行测试

./manage.py test --with-progressive --logging-clear-handlers

安装

pip install nose-progressive

或者,获取最新、未发布的版本

pip install -e git://github.com/erikrose/nose-progressive.git#egg=nose-progressive

升级

要从较旧版本的nose-progressive升级,假设您没有从git安装它

pip install --upgrade nose-progressive

使用

简单的方法

nosetests --with-progressive

我最喜欢的方法,它会抑制测试抛出的任何嘈杂日志消息,除非它们失败

nosetests --with-progressive --logging-clear-handlers

要默认使用nose-progressive,请将with-progressive=1添加到.noserc

选项

常规选项

--progressive-editor

用于跟踪信息中快捷方式的编辑器。默认值为$EDITOR,然后是“vi”。等效环境变量:NOSE_PROGRESSIVE_EDITOR

--progressive-abs

在回溯中显示路径为绝对路径,而不是相对于当前工作目录的相对路径。这允许您将其复制并粘贴到不同 cwd 的 shell 或其他程序中。等效环境变量:NOSE_PROGRESSIVE_ABSOLUTE_PATHS

--progressive-advisories

在测试运行期间显示即使是非失败的定制错误,如 Skip 和 Deprecated。等效环境变量:NOSE_PROGRESSIVE_ADVISORIES

--progressive-with-styling

nose-progressive 自动在其输出被导向非终端时省略加粗和颜色格式。指定 --progressive-with-styling 将强制输出这种格式。等效环境变量:NOSE_PROGRESSIVE_WITH_STYLING

--progressive-with-bar

nose-progressive 自动在其输出被导向非终端时省略进度条。指定 --progressive-with-bar 将强制输出进度条。此选项意味着 --progressive-with-styling。等效环境变量:NOSE_PROGRESSIVE_WITH_BAR

颜色选项

这些选项都接受一个从 0 到 15 的数字表示的 ANSI 颜色。

--progressive-function-color=<0..15>

回溯中函数名称的颜色。等效环境变量:NOSE_PROGRESSIVE_FUNCTION_COLOR

--progressive-dim-color=<0..15>

回溯中淡化文本(如编辑器快捷方式)的颜色。等效环境变量:NOSE_PROGRESSIVE_DIM_COLOR

--progressive-bar-filled=<0..15>

进度条填充部分的颜色。等效环境变量:NOSE_PROGRESSIVE_BAR_FILLED_COLOR

--progressive-bar-empty=<0..15>

进度条空部分的颜色。等效环境变量:NOSE_PROGRESSIVE_BAR_EMPTY_COLOR

高级格式化

如果您无法通过上述选项得到所需结果——例如,如果您的编辑器需要不同的行号语法——您可以替换控制回溯中编辑器快捷方式行的整个模板。您甚至可以在大多数终端中 调整可点击的 URL 直接跳转到您的编辑器中的正确行,无需复制和粘贴。

--progressive-editor-shortcut-template='<template>'

<template> 是一个 格式化字符串,由 str.format() 接受。等效环境变量:NOSE_PROGRESSIVE_EDITOR_SHORTCUT_TEMPLATE

默认模板是…

'  {dim_format}{editor} +{line_number:<{line_number_max_width}} {path}{normal}{function_format}{hash_if_function}{function}{normal}'

以下是可用的键

dim_format

淡化文本的终端格式化序列。受 --progressive-dim-color 影响。

editor

您的编辑器,通过 --progressive-editor$EDITOR 设置。

function

此堆栈帧引用的函数名称。

function_format

函数名称的终端格式化序列。受 --progressive-function-color 影响。

hash_if_function

如果此帧有一个具有名称的函数,则显示“ # ”;否则为空。用于在行末注释掉函数名称很有用。

line_number

此堆栈帧引用的指令的行号。

line_number_max_width

正在格式化的回溯中行号的字符宽度最大值。对于对齐列很有用。

normal

关闭所有特殊格式的终端转义序列。是 term.normal 的快捷方式。

path

此堆栈帧引用的文件路径。受 --progressive-abs 影响。

term

一个 blessings 终端对象,通过它可以访问任何终端功能,即使是复合功能,如 term.bold_blue_on_bright_red。这是您通往超越颜色等简单事物的狂野与疯狂之地的逃生门。

注意事项和已知错误

  • ipdb 一起使用时,会制造一些外观上的混乱。可以考虑使用 pdbpp

  • 某些日志处理器如果它们不打印完整的行,会将进度条向上涂抹。我计划通过一些猴子补丁修复这个问题,但在此期间,传递 --logging-clear-handlers 可以绕过这个问题。

遇到麻烦?请转到 问题跟踪器

感谢

感谢 Kumar McMillan 提供的 nose-nicedots 插件,它为路径格式化提供了灵感和起点。感谢我的 support.mozilla.com 团队成员编写了这么多测试,使得这一切成为必要。感谢 Jeff Balogh 的 django-nose,没有它,我就没有写这个的动力。

作者

Erik Rose,在等待测试完成时 ;-)

版本历史

1.5.2
  • 更优雅地处理 KeyboardInterrupt。 (Alexander Artemenko)

  • 以更兼容的方式查找异常消息与 Python 3.4。 (Paul Weaver)

  • 使用 logcapture 插件时,优雅地处理代理的 SyntaxErrors。 (Lucas Taylor)

  • 将 LICENSE 添加到 MANIFEST.in。 (Sanny Kumar)

1.5.1
  • 避免在 invoke 内运行 nose-progressive 时出现 TypeError,这会掩盖终端大小。

  • 修复在 Fedora 的 mock 工具中运行 setup.py 时出现的 Unicode 错误。

1.5
  • 添加 --progressive-editor-shortcut-template 选项,让您可以完全自定义编辑器快捷键。现在我们支持任何具有跳转到行选项的文本编辑器,无论它的拼写方式如何。

  • 停止支持 Python 2.5。我们需要现代字符串格式化。

  • 添加对 Python 3.2.3 及更高版本的优先级支持。事实证明我的 tox 配置是错误的。

  • 容忍 traceback 组件中的 Nones,特别是文件名和代码提取。 (Kyle Gibson)

1.4.3
  • 修复在 Python 3 中不显示进度条的问题。

  • 添加对 Python 3.3 的真实、tox 测试支持。功能可能工作,但需要移植测试才能通过。3.2 可能会稍后提供。3.1 及更早版本不会提供支持,因为它的 stdlib 还没有准备好 curses 操作。

1.4.2
  • 在统计测试后清除 TestLoader 的路径缓存(新于 nose 1.3.0)。这解决了在 nose 1.3.0 下找不到要运行的测试的问题。

  • 使进度条测试更稳健,以避免在 OS X 10.8 或其他 terminfo 不完全符合测试环境的平台上错误地失败。

1.4.1
  • 修复在 pdb 断点处有时发生的 “AttributeError: ‘dict’ object has no attribute ‘raw_input’” 错误。感谢 David Baumgold 找出原因!

1.4
  • 将最后的 “OK!” 字符变为绿色和加粗。这有助于我更快地识别它。

  • 当使用 --with-id--verbosity=2 或更高时发出警告。 (Jason Ward)

  • 添加实验性的 Python 3 支持。功能可能工作,但需要移植测试才能通过。

  • 允许其他 nose 插件处理测试加载器。 (Ratnadeep Debnath)

  • 在生成的测试名称中显示参数值。 (Bruno Binet)

  • 容忍跳过测试中的边缘情况,而不会崩溃。 (Will Kahn-Greene)

  • 在打印回溯时容忍无法使用 UTF-8 解码的字符:特别是在文件名和源代码中。 (感谢 Bruno Binet 提供的补丁,启发了我对这里的重新思考。)

1.3
  • 重做进度条。现在它由美丽的终端魔法构成,而不是等号。当你的终端至少支持16种颜色时,它看起来最好,但对于颜色较少的情况,也有单色回退。或者,你可以使用几个新的命令行选项来自定义颜色。

  • 修复了在回溯文本中出现非ASCII字符时发生的Unicode编码错误。(Naoya INADA)

1.2.1
  • 在格式化器中容忍空回溯。这避免了在测试框架之前发生的崩溃的恶化。

1.2
  • 修复了Python 2.5的支持。(David Warde-Farley)

  • 修复了Python 2.7中跳过的测试的显示问题。

  • 要求nose 0.11.0或更高版本。在此之前,当涉及测试生成器时,有时测试计数不起作用。(David Warde-Farley)

  • 默认情况下,不在终端输出时隐藏进度条。这让你可以将nose-progressive的输出重定向到文件或其他进程,并获得一个漂亮的回溯列表。

  • 添加了一个选项,强制显示终端格式化,即使输出重定向到非终端。

  • 将终端格式化库提取为自己的包

  • 开始使用tox进行多版本Python下的测试。

1.1.1
  • 修复了会导致格式化器在许多SyntaxErrors上崩溃的错误。这还改进了在有SyntaxError时识别测试框架的启发式方法:现在,只要错误发生在测试框架以下的帧中,我们就可以找到它。

1.1
  • 现在可以单独设置nose-progressive使用的编辑器,而不是从$EDITOR shell变量中设置。

1.0
  • 每个堆栈帧现在都是编辑器快捷方式。这不仅使其更容易导航,而且在高度和宽度上都更短。

  • 重新格式化回溯以获得正义。细微的颜色引导眼睛沿着函数名列表向下。

  • 在打印回溯时隐藏unittest-internal和其他预测试堆栈帧。更少的帧 = 屏幕上的噪音更少 = 思考更少 = 胜利!

  • 添加了一个选项,在回溯中使用绝对路径。

0.7
  • 为语法错误选择正确的堆栈帧作为编辑器快捷方式。由于语法错误不会进入回溯本身,因此必须特别处理语法错误。

  • 显示$EDITOR环境变量的实际值,而不仅仅是“$EDITOR”。我希望这会使其更明显地知道如何使用它,并且如果$EDITOR未设置,它还提供了默认值。此外,如果$EDITOR有标志,例如bbedit -w,它也不会崩溃。

0.6.1
  • 修复了测试没有定义模块时触发的崩溃。现在–failed应该始终正常工作。

0.6
  • 主要重构。nose-progressive现在有自己的测试运行器和测试结果类。这使得它与capture插件和其他生成输出的插件完全兼容。

  • 完全支持自定义错误类,如Skips和Deprecations。它们在测试运行期间打印出来,如果它们代表失败,则加粗,并在运行后汇总到计数中。

  • 不再弄脏进度条,因为直接写入stderr或stdout的测试。

  • 将$EDITOR添加到编辑器快捷方式:不再需要输入!

  • 与没有地址()方法的测试一起工作。

  • 与从test_address()返回null文件名的测试一起工作。

  • 不再覆盖pdb提示(不再?)。

  • 当测试生成器的@with_setup装饰器失败时,不要隐藏回溯。

0.5.1
  • 修复了当堆栈帧或测试的函数为None时发生的错误。

0.5
  • 猜测测试的帧,并将其作为编辑器快捷方式输出。不再指向eq_()!

  • 更可靠地确定编辑器快捷方式路径名,例如在从egg分发目录运行测试时。

  • 强调摘要中指示错误或失败的部分。

0.4
  • 将经过的时间添加到最终摘要中。

  • 如果没有测试失败,则打印“OK!”。我似乎需要这种明确的肯定来避免在测试运行后思考。

  • 在测试失败输出中,交换行号和文件名的顺序。这样除了emacs和vi,还可以与BBEdit命令行工具一起使用。

0.3.1
  • Cowboy尝试通过将entry_point更改为nose.plugin.0.10来修复错误时的崩溃问题。

0.3
  • 进度条现在不仅与django-nose兼容,还与普通的nosetests兼容。对此表示歉意!

  • 在进度条中停止打印两次测试名称。

  • 添加基本的终端调整大小(SIGWINCH)支持。扩展是很好的,但收缩仍然有点难看。欢迎提出建议。

0.2
  • 真正的进度条!

  • 当传递--no-skips时,不要在结束时崩溃。

  • 打印异常,而不仅仅是跟踪信息。这很重要。:-)

  • 当请求的测试不存在时,不要崩溃。

0.1.2
  • 更多文档调整。现在包的long_description包含README。

0.1.1
  • 添加不使用git安装的说明。

  • 将readme中的包名更改为带连字符的名称。没有行为更改。

0.1
  • 初始发布

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

nose-progressive-1.5.2.tar.gz (32.8 kB 查看散列值)

上传时间:

构建分发

nose_progressive-1.5.2-py2-none-any.whl (38.9 kB 查看散列值)

上传时间: Python 2

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面