testtube是一个基于python的连续测试运行程序。TestBube的Stand命令可以基于TUBE.PY配置文件,监视文件更改的目录,并在发生更改时执行预配置的测试集。

testtube的Python项目详细描述


试管

构建状态coverage status //pypi.python.org/pypi/testtube/" rel="nofollow"> 最新版本downloads /a>

通过自动运行项目测试,省去alt和tab键 无论何时文件发生更改,都可以使用套件。

安装

pip install testtube

testtube使用python 2.6、2.7、3.2、3.3和3.4、3.5和pypypy进行测试。

用法

<H4>1。配置试管

配置testtube的最简单方法是在 testtube的监视命令( stir )将在 (这通常是项目的根目录)。tube.py文件需要定义 一个名为 patterns 的iterable,包含1的元组。指定规则 表达式来测试已更改文件和2的路径。包含 当路径与相应的正则表达式匹配时要运行的测试列表。

下面是一个例子tube.py文件:

fromtesttube.helpersimportFrosted,Nosetests,Pep257,Flake8PATTERNS=(# Run pep257 check against a file if it changes, excluding files that have# test_ or tube.py in the name.# If this test fails, don't make any noise (0 bells on failure)(r'((?!test_)(?!tube\.py).)*\.py$',[Pep257(bells=0)]),# Run flake8 and Frosted on the entire project when a python file changes.# If these checks fail, abort the entire test suite because failure might# be due to a syntax error. There's no point running the subsequent tests# if there is such an error.(r'.*\.py$',[Flake8(all_files=True),Frosted(all_files=True)],{'fail_fast':True}),# Run the test suite whenever python or test config files change.(r'(.*setup\.cfg$)|(.*\.coveragerc)|(.*\.py$)',[Nosetests()]))# Don't process any file changes that match these rulesIGNORE_PATTERNS=(r'.*sample/[^/]*$',)

在上面的示例中, 模式 包含一系列模式,并与 可调用测试的列表。第二个测试组,叫做Flake8和Frosted, 包括可选的测试组配置。

还指定了一个名为 ignore_patterns 的iterable。任何匹配的路径 无论这些模式是否与 在 模式中定义的试验组

最简单的测试就是返回 true false 在将路径传递到已更改的文件和常规文件之后 路径与相应测试匹配的表达式match对象 组的正则表达式。这个例子使用了几个附带的助手 试管。这些帮助程序是可调用的对象,可以在 当它们被实例化时,有多种方式。

testtube附带了许多这样的助手,可以在 帮助程序.py 。 它们的目的是避免用户指定自己的测试 是可能的。如果它们不足以用于特定项目,请参见 编写自定义测试

包括助手:

  • PEP8
  • 松饼
  • 磨砂
  • PEP257
  • 鼻测试
  • pythonsetuppytest(匹配文件更改时运行python setup.py)
  • 清除屏幕(清除屏幕)

帮助程序在实例化时通常接受以下参数:

  • 所有文件 :对整个源目录运行测试 而不仅仅是更改的文件(这是默认行为)
  • 快速失败 :如果测试 失败。
  • 铃铛 :失败时,试管将听到3次通知用户的声音 除非另有规定
  • 名称 :th的名称e测试报告输出中的测试

下面生成一个pep8测试,配置为对所有文件运行, 失败时中止对其测试组的处理,警告用户5次 可以听到,并在测试报告输出中显示为"follow pep8 dude":

fromtesttube.helpersimportPep8helper=Pep8(all_files=True,fail_fast=True,bells=5,name='follow pep8 dude')

注意,helper一旦实例化,就只是返回

# Once configured, helpers are callables (they act like methods) that# accept a path to a python file and a regex match object (though the# match object isn't a requirement).helper('/path/to/some/file.py',None)

下面是完全合并到tube.py文件中的相同示例:

fromtesttube.helpersimportPep8PATTERNS=[[# Patternr'.*\.py$',# list of callable tests to run[Pep8(all_files=True,fail_fast=True,bells=5,name='follow pep8 dude')]]]

根据需要,可以通过重写 具体方法。见 帮助程序.py 有关详细信息。

除了配置帮助程序外,还可以配置测试组:

  • Fail_Fast :中止后续测试组的处理(如果全部 配置组中的测试未通过。

在第一个示例tube.py文件中,配置了第二个测试组 如果 flake8 frosted 失败,

<H4>2。搅拌< < /H4>

一旦tube.py文件就位,告诉testtube监视项目 变化:

$ stir
testtube is now watching /Path/to/CWD/ for changes...

默认情况下,stir将监视当前工作目录并配置 它本身有一个名为tube(tube.py)的设置模块。如果tube.py文件是 放置在项目根目录中,则不需要指定 假设stir从同一目录执行的任何参数。如果路径需要 要定制一点, 搅拌 -h 将照亮道路:

$ stir -h
usage: stir [-h] [--src_dir SRC_DIR] [--settings SETTINGS]

Watch a directory and run a custom set of tests whenever a file changes.

optional arguments:
  -h, --help           show this help message and exit
  --src_dir SRC_DIR    The directory to watch for changes. (Defaults to CWD)
  --settings SETTINGS  Path to a testtube settings file that defines which
                       tests to run (Defaults to "tube.py" - your settings
                       file must be importable and the path must be relative
                       to your CWD)

编写自定义测试

如果包含的帮助程序不满足项目的特定需要,则自定义测试 可以直接在tube.py中定义。只需定义一个接受两个 参数并将其添加到 模式列表中:

defmytest(changed_file,match_obj):print"Oh snap, %s just changed"%changed_filePATTERNS=((r'.*',[mytest]),)

如果自定义测试需要像内置帮助程序那样进行配置,或者 需要进行系统调用,扩展基类helper ( testtube.helpers.helper )并根据需要自定义行为 通常是最简单的方法。下面是tube.py文件,它定义了 可配置测试,每次 python文件更改:

fromtesttube.helpersimportHelperclassProjectTree(Helper):# The built in helper class is designed to make writing tests that make# system calls easy. Overriding `command` is all that's usually# necessarycommand='tree'all_files=Truedef__init__(self,**kwargs):# TreeOutput only works on all files, so override any contrary confkwargs['all_files']=Truesuper(ProjectTree,self).__init__(kwargs)PATTERNS=((r'.*\.py$',[ProjectTree(bells=1)]),)

注意,这个例子要求在系统上安装tree ( $brew安装树 适用于OS X用户)。

注意事项

  • r'.*\.py' r'.*\.py$' 之间的区别是显著的。 如果没有后面的 $ ,testtube将在每次pyc时运行测试 文件更改。这很可能没用。
  • 当testtube当前没有重新加载它自己的配置时 变化。如果tube.py被修改,则需要重新启动testtube。

当地发展

使用包含的requirements.txt文件安装开发需求:

pip install testtube
0

使用当前位于 使用包含的tube.py文件进行自我监控的开发。使用试管 帮助建立测试管。这可以通过将签出安装为 可编辑的。从项目根目录执行以下操作,然后使用 stir 命令通常是:

pip install testtube
1

请注意,要使代码更改生效,需要重新启动TestTube。

其他一切

版权所有(c)Thomas Welfley。见 许可证 有关详细信息。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
数组解析来自输入java的不同类型的数据   多用户上传java文件   java MalformedChunkCodingException:分块流意外结束   http在建立与网站的连接时,如何确保域级SSL证书存在于信任存储中?   java如何在安卓中播放服务器上的音频   java我可以使用jmock替换工厂返回的实现吗?   java JsonParsing:UTF8编码:JsonParseException:非法的无引号字符   java Hibernate与JPA注释问题惰性对象   JavaSpringWebApplistener问题   java mongodb集群更新减缓了spring boot上的整体测试   java图像接收(web)服务器   Android aapt工具无法正确生成R.Java   java摩托罗拉Android 2.2摄像头忽略额外的输出参数   java在Web应用程序中显示R脚本图形   java将日期与当前日期进行比较会产生NumberFormatException   java应用程序在ViewPager上强制关闭?   java如何放置这些XMLAPI。罐子,斯塔克萨皮斯。jar或xercesImpl。jar:到我的pom,xml   JavaGlassFish 4.1,JPA2.1持久性。xml   java什么是SAML元数据?   Checkstyle Java泛型:“?”前面没有空格