跳转到主要内容

辅助将外部测试与Python的unittests集成。

项目描述

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

用法

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

以下是一个简单的示例

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

makeSuite 调用外部命令以获取测试用例和测试函数的列表(下面将详细说明协议),并返回一个包含相应测试方法的 TestCase 对象的 TestSuite。每个测试方法将调用外部命令以运行其测试,并将外部命令返回的结果转换为 unittest 模块的约定(例如,对于失败的测试引发 AssertionError 等)。

要求

外部命令需要理解两个命令行参数: --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": "..."}]

注意:为了与 JavaScript 集成简化,选择了自定义 JSON 格式来表示测试结果(参见下文);我们需要评估是否可以使用 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": "..."}]

示例:JavaScript

运行测试

我们构建了 gocept.exttest 以集成 JavaScript 单元测试与 Python 单元测试。我们决定使用 Jasmine 作为 JavaScript 单元测试框架,通过 jasmine-node 在 node.js 下运行。(为了使用 jasmine 与 gocept.exttest,我们扩展了 jasmine-node 以支持 --list / -run 参数和 JSON 输出格式。)

在您的 buildout 环境中,安装 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 检出 jasmine-node 分支,直到更改合并到上游。(在示例中,使用 ${buildout:directory}/../jasmine-node 作为其位置。)

编写测试

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

一个示例测试可能如下所示(请参阅 Jasmine 文档 获取详细信息)

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'))

开发

源代码可在 mercurial 存储库中找到,网址为 https://code.gocept.com/hg/public/gocept.exttest

请将您发现的任何错误报告到 https://projects.gocept.com/projects/gocept-exttest/issues

变更日志

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)

  • 第一个版本。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

gocept.exttest-1.0.tar.gz (7.8 kB 查看哈希值)

上传时间 源代码

由以下支持:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面