辅助将外部测试与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.tests。 jasmine-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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c6853ae3241a52174323377c71f252522b7d1dce680d767edbfc780c7627e862 |
|
MD5 | f0e99d93a0d0eb1ce69844d7b3434756 |
|
BLAKE2b-256 | dc75449d8b549c07db227c9c6e09b6814aae2b88148593c70dcb93ccaaa5744f |