将外部测试与python unittests集成的助手。

gocept.exttest的Python项目详细描述


从python的unittest.TestCase运行外部命令提供的测试。

Usage

exttest提供了一个公共函数makeSuite,它返回 unittest.TestSuite并接受一个参数:外部 运行二进制文件。(任何其他参数都将传递给外部命令 作为命令行参数。)

下面是一个简单的示例:

import gocept.exttest
def test_suite():
    return gocept.exttest.makeSuite(
        'bin/external_test_runner', '--some-arg', '--another-arg')

makeSuite调用外部命令以请求测试用例列表和 测试函数(具体协议见下文),并返回TestSuite 包含相应测试方法的TestCase对象的。每次测试 方法将调用外部命令来运行其测试,并转换结果。 由外部命令返回到unittest模块的约定 (例如,对于失败的测试,引发AssertionError等)。

Requirements

外部命令需要了解两个命令行参数: --list--run<test-specification>

--list必须返回可用测试用例和测试函数的列表 格式化为json:

$ bin/external_test_runner --list
[{"case": "MyExternalTestCase",
  "tests": ["test_one", "test_two"]}

--run用于运行一个特定的测试,返回格式化为 json:

$ bin/external_test_runner --run MyExternalTestCase.test_two
[{"name": "MyExternalTestCase.test_two",
  "status": "FAIL",
  "message": "Test failed.",
  "traceback": "..."}]

注意:选择测试结果的自定义json格式是为了在 与javascript集成(见下文);我们必须评估 可以使用JUnitReport中常用的xml格式。

如果未给定--list--run,则应运行外部命令 所有测试:

$ bin/external_test_runner
[{"name": "MyExternalTestCase.test_one",
  "status": "SUCCESS",
  "message": "Test passed."},
 {"name": "MyExternalTestCase.test_two",
  "status": "FAIL",
  "message": "Test failed.",
  "traceback": "..."}]

Example: JavaScript

运行测试

我们构建了gocept.exttest来将javascript unittests与python集成 单元测试。我们决定使用Jasmine作为javascript单元测试 框架,通过jasmine-node在node.js下运行。(为了使用茉莉花 使用gocept.exttest,我们扩展了jasmine节点来支持--list/ -run参数和json输出格式。)

在构建环境中,安装node.js和jasmine node,如下所示:

[buildout]
parts =
   nodejs
   test

[nodejs]
recipe = gp.recipe.node
npms = ${buildout:directory}/../jasmine-node
scripts = jasmine-node

[test]
recipe = zc.recipe.testrunner
eggs = your.package
environment = env

[env]
jasmine-bin = ${buildout:directory}/bin/jasmine-node

你需要从 https://github.com/wosc/jasmine-node直到更改被合并到上游。(在 示例${buildout:directory}/../jasmine-node用于 位置。)

写作测试

例如,假设javascript测试应该位于 your.package.testsjasmine node支持用两种语言编写的测试 javascript和coffeescript(通过指定--coffee命令行 参数),并要求测试文件的名称中包含_spec

示例测试可能如下所示(有关详细信息,请参阅Jasmine documentation

require 'my_app.js'

describe 'MyApp', ->
 it 'has read Douglas Adams', ->
   expect(new MyApp().calculate_the_answer()).toEqual(42)

然后按如下方式连接测试(传递到外部命令的路径 通过环境变量进行测试:

import gocept.exttest
def test_suite():
   return gocept.exttest.makeSuite(
       os.environ.get('jasmine-bin'),
       '--coffee',
       '--json',
       pkg_resources.resource_filename('your.package', 'tests'))

Changelog

1.1(未发布)

  • 什么都没变。

1.0(2012-01-24)

  • 重新编制的文件。

0.1.4(2012-01-20)

  • 包装说明。

0.1.3(2012-01-20)

  • 改进了文档。

0.1.2(2012-01-19)

  • 修理损坏的释放装置。

0.1.1(2012-01-19)

  • 修复损坏的释放(0.1)。

0.1(2012-01-19)

  • 第一次释放。

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

推荐PyPI第三方库


热门话题
如何下载多个。java中的PDF文件   linux Java打开文件,形成实际用户主页~/   java如何在时间线内维护TableView选择?   java Hibernate注释@Where vs@WhereJoinTable   Java读/写访问异常FileNotFoundException(访问被拒绝)   继承在Java中是否可以扩展最后一个类?   Android HttpClient使用java使应用程序崩溃。lang.OutOfMemoryError:pthread_create   java为什么即使我在proguardproject中添加了jar文件,也会出现这种错误。txt?   如果添加JButton,swing Java FocusListener和KeyListener将无法工作   java使用solrj检索json格式的SolrDocument   使用Microsoft Visual Studio代码进行Java编程   java NoClassDefFoundError:org/apache/log4j/Logger   哈希集中包含相等对象的java   java中的参数化构造函数是否需要有一个主体?   java类似于NetBeans不必要的代码检测器   Java实践问题   java Blackberry“[projectname].调试文件丢失”和“I/O错误:找不到程序”jar