Si scopre che è possibile. Esistono due principali attività di integrazione: risultati del test runner e risultati di copertura del codice. Presumo normali codebase Python 3 e suite di test standard unittest
.
prova corridore
Bamboo si aspetta che i risultati di test corridore in JUnit XML format. C'è lo separate test runner nel Cheese Shop in grado di produrre tale output, ma richiederebbe di scrivere un piccolo codice per eseguirlo, il che non è carino. Il modo migliore per mantenere intatto il codebase è utilizzare le funzioni di pytest.
copertura Codice
Bamboo supporta solo il formato XML di Atlassian Clover. Nota importante: non è necessario il plugin Atlassian Clover abilitato (e la licenza per esso che costa qualche dollaro). Bamboo funziona da solo.
Lo strumento di copertura del codice standard di Python, coverage, produce in qualche modo il formato XML Cobertura , ma c'è uno converter. C'è uno pytest plugin per l'integrazione con lo strumento di copertura.
Soluzione
Ecco il Tox ambiente in cui ho usato pytest di fare sia il lavoro integrazioni di bambù.
[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
noti che sia pytest e l'uso pytest-COV tox.ini
per la configurazione non supportata sulla linea di comando. Ti salva di nuovo dall'avere ulteriore confusione nella radice del tuo repository. pytest prova a leggere automaticamente tox.ini
. pytest-cov bypassa a .coveragerc
, ma poiché è anche un file INI, tox.ini
si adatta.
Sul lato Bamboo aggiungere script task che viene eseguito tox -e bamboo
. Quindi aggiungere JUnit parse task al lavoro. Nel suo dialogo, sotto Specificare le directory dei risultati personalizzati inserire results.xml
.
La configurazione della copertura viene eseguita in un altro modo.
- Aprire Varie scheda del tuo lavoro
- check Usa Clover per raccogliere Code Coverage per questa build
- Select Clover è già integrato in questa build e sarà prodotto un file clover.xml
- Tipo
clover.xml
in Clover XML Località
A questo punto della tua prossima costruzione vedrete copertura totale e due grafici: Copertura storia e Linee di storia codice. È anche bello avere HTML interattivo prodotto dallo strumento di copertura, in modo da poter eseguire il drill-down su una determinata riga di codice.
Le impostazioni effettuate in precedenza (almeno in Bamboo 5.7) ha creato Clover Report (System) in Artefatto scheda di lavoro. Aprilo e imposta htmlcov
su nel campo e *.*
a Copia modello. Bamboo raccoglierà ora i report HTML. Puoi vederlo alla scheda Clover del tuo piano.
Vecchia domanda. Ma ho aggiunto py.test come un eseguibile Bamboo e lo uso semplicemente per eseguire i test (con l'output junit-xml specificato).Quindi il parser del test JUnit deve essere eseguito come processo separato. –
@ SamuelO'Malley puoi pubblicare un esempio di come hai funzionato? – MikeyE
@MikeyE - In realtà ho cambiato il modo in cui è stato fatto da quando questo commento è stato pubblicato. Ora ero un Bamboo Script Task e ho il contenuto come 'py.test --junit-xml results.xml' e dopo che ho' if [$? -ne 0]; quindi echo "Test fallito"; fi' per ingoiare il codice di ritorno. Altrimenti, Bamboo non ti permetterà di mettere in quarantena un singolo risultato del test e segnerà l'intero lavoro come fallito. –