在我的公司,我们目前使用Atlassian的竹为我们的持续集成工具。 目前,我们使用Java为我们所有的项目,所以它的伟大工程。
但是,我们使用一个Django + Python的为我们的新应用之一考虑。 我想知道是否可以使用竹本。
首先,让我说,我已经熟悉的竹低水平,因为我只用过它,而不是将其配置(不是像变了一个构建了svn检出目录简单的改变等)。
显然,不只是在运行构建(因为Python项目并没有真正建立)很多点,但我希望能够用竹运行测试套件,以及利用竹子部署最新的代码到我们的各种测试环境,我们与我们的Java项目做的方式。
竹是否支持与Python项目这种类型的东西?
竹本质上只是运行一个shell脚本,所以这也很容易为:
./manage.py test
因为它通常是:
mvn clean install
要么:
ant compile
您可能需要按摩,Django的测试运行到传统的JUnit XML输出的输出,让竹子可以给你多少测试通过漂亮的图表。 看看这篇文章关于使用xmlrunner.py得到Python和工作哈德森 。 也看看NoseXUnit 。
你甚至可以添加对PIP和virtualenv中的引导在一个干净的环境很容易,这是很酷:
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py --root=${bamboo.build.working.directory}/tmp --ignore-installed
export PATH=${bamboo.build.working.directory}/tmp/usr/local/bin:$PATH
export PYTHONPATH=${bamboo.build.working.directory}/tmp/usr/local/lib/python2.7/dist-packages:$PYTHONPATH
pip install --root=${bamboo.build.working.directory}/tmp --ignore-installed virtualenv
virtualenv virtual_tmp
cd virtual_tmp
. bin/activate
echo Pip is located `which pip`
pip install django
pip install djangorestframework
警告, source bin/activate
作为内嵌脚本任务被存储到SH文件(所以不工作bash
在运行它sh
兼容模式)。
编辑
更妙的是,我们可以在它上面运行单元测试,用能的竹JUnit的解析XML输出:
pip install unittest-xml-reporting
python manage.py test --noinput --testrunner="xmlrunner.extra.djangotestrunner.XMLTestRunner"
事实证明,这是可能的。 有两种主要的集成任务:测试运行结果和代码覆盖率结果。 我认为正常的Python代码库3和标准unittest
的测试套件。
测试运行
竹期望在测试运行结果的JUnit XML格式 。 有独立的测试运行的奶酪店能够产生这样的输出,但它需要你写一些代码来运行它,这是不是很好。 这使代码库完好更好的办法是使用pytest的功能。
代码覆盖率
竹只支持Atlassian的三叶草的XML格式。 这里重要的一点是,你并不需要启用Atlassian的四叶草插件(和它的许可花费一些钱)。 竹制品自身。
Python的事实上的标准代码覆盖工具, 覆盖范围 ,一定程度上产生的Cobertura XML格式,但有一个转换器 。 有一个pytest插件与覆盖工具集成。
解
这里的弓形虫 ,我用pytest以使两个竹集成的工作环境。
[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冠状病毒绕过来.coveragerc
,而是因为它也是一个INI文件, tox.ini
配合。
竹边添加脚本任务运行tox -e bamboo
。 然后加入JUnit的解析任务的工作。 在它的对话,在指定自定义结果目录把results.xml
。
覆盖配置做其他的方式。
- 你的工作打开其他选项卡
- 选中使用三叶草收集代码覆盖率此版本
- 选择四叶草已经集成到这个版本和clover.xml文件将被制作
- 类型
clover.xml
到四叶草XML位置
在你下一次构建了这一点,你会看到全覆盖和两个图表: 覆盖历史和历史记录码线 。 这也是不错的通过覆盖工具产生交互的网页,这样你就可以深入到特定的代码行。
(至少在竹5.7)以上所做的设置已经在神器任务的选项卡创建三叶草报告(系统)。 打开它,并设置htmlcov
到位置字段,以及*.*
复制模式 。 竹现在将收集的HTML报告。 你可以在你的计划的三叶草标签上看到它。
如果你使用pytest你可以简单地使用py.test --junitxml=/path/to/results/xml/file.xml