将外部测试与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.tests。jasmine 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'))
Development
源代码可以在Mercurial存储库中找到 https://code.gocept.com/hg/public/gocept.exttest
请报告您在 https://projects.gocept.com/projects/gocept-exttest/issues
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)
- 第一次释放。