带有进度条和更智能的跟踪回溯的测试运行器
项目描述
在3行内给你的测试添加进度条和更智能的跟踪回溯
pip install nose-progressive cd your_project nosetests --with-progressive
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,没有它,我就没有写这个的动力。
版本历史
- 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
初始发布
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。