将外部测试与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 Intellij通过方法中的包查找用法   java中VS代码和打包命名的问题   将java CMS功能集成到具有高度动态内容的网站(Lucene/Mysql/Nosql)的策略   oracle的java类强制转换异常。jdbc。驾驶员OracleConnection   字节码向JVM添加上指令   如何在抽象类中执行java方法?   java是否可以在apache访问日志中排除指定的GET参数?(作者:W7开发环境)   java如何获取已安装音频播放器的列表?   尝试向HS学生展示如何使用Java访问MS数据库   使用正则表达式java对给定行中的特定字符串进行计数   java JOOQ Select查询中的Select计数   方法Java,如何从二维双精度数组中找到特定值?   获取图像URL的java正则表达式   java在切换到新的窗口驱动程序后找不到元素