跳转到主要内容

持续测试运行器

项目描述

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 (14.4 kB 查看哈希)

上传时间 Python 2

支持者: