Оказывается, это возможно. Есть две основные задачи интеграции: результаты средства выполнения тестов и результаты покрытия кода. Я предполагаю нормальную кодовую базу Python 3 и стандартный набор тестов unittest
.
Тестовый бегун
Bamboo ожидает, что результаты средства выполнения тестов будут в формате JUnit XML. В Сырном магазине есть отдельное средство запуска тестов, способное производить такой вывод, но вам потребуется написать небольшой код для его запуска, что нехорошо. Лучший способ сохранить целостность кодовой базы - использовать функции pytest.
Покрытие кода
Bamboo поддерживает только формат XML Atlassian Clover. Важное примечание: вам не нужен плагин Atlassian Clover (и лицензия на него, которая стоит несколько долларов). Бамбук работает сам по себе.
Стандартный де-факто стандартный инструмент покрытия кода Python, охват, создает в некотором роде формат XML Cobertura, но есть преобразователь. Существует подключаемый модуль pytest для интеграции с инструментом покрытия.
Решение
Вот среда Tox, в которой я использовал pytest, чтобы обе интеграции с Bamboo работали.
[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
.
Настройка покрытия выполняется другим способом.
- Откройте вкладку Разное вашей вакансии.
- Установите флажок Использовать Clover для сбора данных о покрытии кода для этой сборки
- Выберите Clover уже интегрирован в эту сборку, и будет создан файл clover.xml
- Введите
clover.xml
в Расположение XML Clover.
![введите описание изображения здесь](https://i.stack.imgur.com/aSymz.png)
На этом этапе вашей следующей сборки вы увидите общее покрытие и две диаграммы: История покрытия и Строки истории кода. Также приятно иметь интерактивный HTML, созданный инструментом покрытия, чтобы вы могли перейти к определенной строке кода.
Выполненные выше настройки (по крайней мере, в Bamboo 5.7) создали Clover Report (System) на вкладке Artifact задания. Откройте его и установите htmlcov
в поле Местоположение и *.*
в Копировать шаблон. Bamboo теперь будет собирать отчеты в формате HTML. Вы можете увидеть это на вкладке Clover вашего плана.
person
saaj
schedule
15.09.2016
py.test --junit-xml results.xml
, а после этого у меня естьif [ $? -ne 0 ]; then echo "Test Failed"; fi
, чтобы проглотить код возврата. В противном случае Bamboo не позволит вам поместить в карантин отдельный результат теста и пометит все задание как неудавшееся. - person Samuel O'Malley   schedule 13.02.2018