持续测试运行器
项目描述
cctrial是一个用于以持续方式使用twisted trial的工具。
cctrial会在所有测试都通过之前重新运行失败的测试。
cctrial为特定的工作流程设计,有助于进行破坏大量测试的大重构。
cctrial智能模式只能运行导入修改文件的测试。
cctrial不是为了替换trial,而是用于所有其他用例。
安装
在您的虚拟环境中安装cctrial
pip install cctrial
Linux特定设置
由于cctrial大量使用watchdog库中的inotify,您可能需要增加inotify配额
sudo sysctl fs.inotify.max_user_watches=100000
sudo sh -c 'echo fs.inotify.max_user_watches=100000>>/etc/sysctl.conf'
工作流程描述
运行
cctrial -j2 -f my.package
它将监控所有使用pip install -e或./setup.py develop安装软件包的目录。只有在监视目录中的某个文件被修改后,才会重新运行。
运行完整的单元测试套件。
收集所有失败的测试(如果有的话)。
重新运行出现失败最频繁的测试。在cctrial工作流程中,您总是逐个修复测试,从可能修复最多错误的测试开始。
当当前测试最终通过时,将重新运行最初失败的测试。
在所有测试通过后,将重新运行完整的测试套件
附加功能
自定义报告器,旨在尽可能在终端屏幕上集中信息。
在运行过程中,始终更新一行状态,告诉您当前的测试、失败次数等信息。
在运行后,打印总结问题
只有在修复测试循环期间,才会打印当前测试用例的日志、失败详情以及测试用例的stdout/stderr。
桌面通知支持。这需要在OSX上的terminal-notifier或在具有freedesktop能力的系统(例如linux、xBSD)上的notify-send上。
用于在git后提交钩子中仅运行适当测试的钩子模式。
截图
% cctrial buildbot.test.regressions
Running 38 tests.
-------------------------------------------------------------------------------
Ran 38 tests in 1.400s
PASSED (successes=38)
buildbot.test.regressions.test_unpickling.StatusPickles.test_upgrade 38/ 38 0F 0E 0S 0T 0!
waiting for filesystem change...
引入错误后
Running 38 tests.
=============================================================================== 4 cases: [ERROR]
Traceback (most recent call last):
File "/Users/ptardy/dev/bb/buildbot-heroku/buildbot/master/buildbot/test/regressions/test_import_unicode_changes.py", line 31, in make_dbc
self.db = DBConnector(master, self.basedir)
exceptions.TypeError: __init__() takes exactly 2 arguments (3 given)
-------------------------------------------------------------------------------
Ran 38 tests in 0.272s
FAILED (errors=4, successes=34)
buildbot.test.regressions.test_unpickling.StatusPickles.test_upgrade 38/ 38 0F 4E 0S 0T 0!
re-run: testAsciiChange (buildbot.test.regressions.test_import_unicode_changes.TestUnicodeChanges)
Running 1 tests.
=============================================================================== 1 case: [ERROR]
Traceback (most recent call last):
File "/Users/ptardy/dev/bb/buildbot-heroku/buildbot/master/buildbot/test/regressions/test_import_unicode_changes.py", line 31, in make_dbc
self.db = DBConnector(master, self.basedir)
exceptions.TypeError: __init__() takes exactly 2 arguments (3 given)
-------------------------------------------------------------------------------
Ran 1 tests in 0.001s
FAILED (errors=1)
Logs: Log opened.
--> buildbot.test.regressions.test_import_unicode_changes.TestUnicodeChanges.testAsciiChange <--
cleaning database sqlite://
Main loop terminated.
please fix: testAsciiChange (buildbot.test.regressions.test_import_unicode_changes.TestUnicodeChanges)
waiting for filesystem change...
修复错误后
re-run: testAsciiChange (buildbot.test.regressions.test_import_unicode_changes.TestUnicodeChanges)
Running 1 tests.
-------------------------------------------------------------------------------
Ran 1 tests in 0.001s
PASSED (successes=1)
Running 4 tests.
-------------------------------------------------------------------------------
Ran 4 tests in 0.610s
PASSED (successes=4)
buildbot.test.regressions.test_import_unicode_changes 4/ 4 0F 0E 0S 0T 0!
Running 38 tests.
-------------------------------------------------------------------------------
Ran 38 tests in 1.400s
PASSED (successes=38)
buildbot.test.regressions.test_unpickling.StatusPickles.test_upgrade 38/ 38 0F 0E 0S 0T 0!
waiting for filesystem change...
设计说明
重新运行测试的问题在于无法重复使用相同的Python环境。使用内置的‘reload’真的应该避免。
cctrial使用DistTrialRunner来实现reload。工作器在一个独立的Python环境中运行,并在运行之间重新启动。
为了优化启动时间
在等待文件系统更改的同时准备工作器。import twisted.internet.reactor需要600毫秒。
我们只发现一次测试,buildbot的测试发现需要2160毫秒
智能模式试图变得聪明...
最佳选项是运行所有测试的覆盖率模式,并查看哪些文件被测试。这将在一开始需要大量的开销。
我们选择了更简单的选项:对于所有测试用例,我们查看其模块导入语句。对于所有由测试用例导入的模块,我们决定测试用例测试了定义这些模块的文件。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
构建分发
cctrial-1.2.7-py2-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a12be9f949ee336175498c39a0907327c97db8cdd4bdcb3437b93de87a8d433e |
|
MD5 | 11fd8e1c764eb66804f02b18ef2c5a68 |
|
BLAKE2b-256 | 3906b9e5199d7e1d92aa654f0b1fb2b8d71510c057c7456e9fcb26727c7afbf4 |