それは可能であることがわかりました。2つの主要な統合タスクがあります。テストランナーの結果とコードカバレッジの結果です。通常のPython3コードベースと標準のunittest
テストスイートを想定しています。
テストランナー
Bambooは、テストランナーの結果がJUnitXML形式であることを期待しています。Cheese Shopには、このような出力を生成できる別のテストランナーがありますが、実行するには小さなコードを作成する必要がありますが、これは適切ではありません。コードベースをそのまま維持するためのより良い方法は、pytestの機能を使用することです。
コードカバレッジ
Bambooは、AtlassianCloverの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
が、コマンドラインでサポートされていない構成に使用されることに注意してください。これにより、リポジトリのルートに余分な混乱が生じるのを防ぐことができます。pytestはtox.ini
自動的に読み込もうとします。pytest-covはにバイパスし.coveragerc
ますが、これはINIファイルでもあるため、tox.ini
適合します。
Bamboo側で、を実行するスクリプトタスクtox -e bamboo
を追加します。次に、 JUnit解析タスクをジョブに追加します。そのダイアログの[カスタム結果ディレクトリの指定]の下にresults.xml
。
カバレッジ構成は別の方法で行われます。
- ジョブの[その他]タブを開きます
- [クローバーを使用してこのビルドのコードカバレッジを収集する]をオンにします
- Select Cloverはすでにこのビルドに統合されており、clover.xmlファイルが作成されます
- CloverXMLの場所
clover.xml
に入力します
次のビルドのこの時点で、合計カバレッジと2つのグラフ(カバレッジ履歴とコード行履歴)が表示されます。また、カバレッジツールによってインタラクティブなHTMLが生成されるので、特定のコード行にドリルダウンできます。
上記の設定(少なくともBamboo 5.7では)により、アーティファクトジョブのタブにクローバーレポート(システム)が作成されました。それを開いて[場所]フィールドに設定し、[パターンをコピー]に設定します。BambooはHTMLレポートを収集します。あなたはあなたの計画のクローバータブでそれを見ることができます。htmlcov
*.*