事实证明这是可能的。有两个主要的集成任务:测试运行器结果和代码覆盖率结果。我假设普通的 Python 3 代码库和标准unittest
测试套件。
测试赛跑者
Bamboo 期望JUnit XML 格式的测试运行器结果。Cheese Shop 上有单独的测试运行器能够产生这样的输出,但它需要你编写一些代码来运行它,这并不好。保持代码库完整的更好方法是使用pytest的功能。
代码覆盖率
Bamboo 仅支持 Atlassian Clover 的 XML 格式。这里的重要说明是,您不需要启用 Atlassian Clover 插件(以及需要花费一些钱的许可)。竹子自己工作。
Python 事实上的标准代码覆盖工具coverage产生了某种 Cobertura XML 格式,但是有一个转换器。有一个用于与覆盖工具集成的pytest 插件。
解决方案
这是我使用 pytest 使 Bamboo 集成工作的Tox环境。
[tox]
envlist = py34
skipsdist = True
[testenv]
setenv = LANG=C.UTF-8
basepython = python3.4
deps = -r{toxinidir}/requirements.txt
[testenv:bamboo]
commands =
py.test --junitxml=results.xml \
--cov=project_name --cov-config=tox.ini --cov-report=xml \
--cov-report=html project_name/test
coverage2clover -i coverage.xml -o clover.xml
deps =
{[testenv]deps}
pytest
pytest-cov
coverage2clover
# read by pytest
[pytest]
python_files = *.py
# read by coverage
[run]
omit=project_name/test/*,project_name/__main__.py
请注意,pytest 和 pytest-cov 都tox.ini
用于命令行不支持的配置。它再次使您免于在 repo 的根目录中产生额外的混乱。pytest 尝试tox.ini
自动读取。pytest-cov 绕过.coveragerc
,但因为它也是一个 INI 文件,所以tox.ini
适合。
在 Bamboo 端添加一个运行的脚本任务tox -e bamboo
。然后将JUnit 解析任务添加到作业中。在其对话框中,在指定自定义结果目录下放置results.xml
。
覆盖配置以其他方式完成。
- 打开工作的其他选项卡
- 选中使用 Clover 收集此构建的代码覆盖率
- Select Clover 已集成到此构建中,并且将生成一个 clover.xml 文件
- 输入
clover.xml
Clover XML 位置
此时,在您的下一个构建中,您将看到总覆盖率和两个图表:覆盖历史和代码行历史。覆盖工具生成交互式 HTML 也很不错,因此您可以深入到特定的代码行。
上面所做的设置(至少在 Bamboo 5.7 中)在Artifact作业的选项卡中创建了Clover Report (System) 。打开它并设置为Location字段,并设置为Copy pattern。Bamboo 现在将收集 HTML 报告。您可以在计划的Clover选项卡上看到它。htmlcov
*.*