Python Unit Test Reporting to TeamCity
| |jb_project| |license| |pypi_version|
| |versions| |teamcity_ci|
This package integrates Python with the
TeamCity <http://www.jetbrains.com/teamcity/>
__ Continuous Integration
(CI) server. It allows sending "service messages" <https://confluence.jetbrains.com/display/TCDL/Build+Script+Interaction+with+TeamCity>
__
from Python code. Additionally, it provides integration with the
following testing frameworks and tools:
py.test <http://pytest.org/>
__nose <https://nose.readthedocs.org/>
__Django <https://docs.djangoproject.com/en/1.8/topics/testing/advanced/#other-testing-frameworks>
__unittest (Python standard library) <https://docs.python.org/2/library/unittest.html>
__Trial (Twisted) <http://twistedmatrix.com/trac/wiki/TwistedTrial>
__Flake8 <https://flake8.readthedocs.org/>
__Behave <https://behave.readthedocs.io/>
__PyLint <https://www.pylint.org/>
__
Installation
Install using pip:
::
pip install teamcity-messages
or from source:
::
python setup.py install
Usage
This package uses service messages to report the build status to TeamCity.
See https://confluence.jetbrains.com/display/TCDL/Build+Script+Interaction+with+TeamCity
for more details
unittest
If you wish to use the Python default unittest framework, you should
modify the Test runner, e.g.:
.. code:: python
import unittest
from teamcity import is_running_under_teamcity
from teamcity.unittestpy import TeamcityTestRunner
class Test(unittest.TestCase):
...
if __name__ == '__main__':
if is_running_under_teamcity():
runner = TeamcityTestRunner()
else:
runner = unittest.TextTestRunner()
unittest.main(testRunner=runner)
See ``examples/simple.py`` for a full example.
If you are used to running unittest from the command line, instead of
using ``python -m unittest``, you could use
``python -m teamcity.unittestpy``.
nose
~~~~
Test status reporting is enabled automatically under TeamCity build.
py.test
~~~~~~~
Test status reporting is enabled automatically under TeamCity build.
Django
~~~~~~
For Django 1.6+: Use the ``TeamcityDjangoRunner`` runner instead of the
default ``DiscoverRunner`` by changing the following setting in your
settings.py:
.. code:: python
TEST_RUNNER = "teamcity.django.TeamcityDjangoRunner"
If you are using another test runner, you should override the
``run_suite`` method or use the ``DiscoverRunner.test_runner`` property
introduced in Django 1.7.
flake8
~~~~~~
Test status reporting is enabled automatically under TeamCity build.
PyLint
~~~~~~
Add ``--output-format=teamcity.pylint_reporter.TeamCityReporter`` to
the ``pylint`` command line.
tox
~~~
Pass TEAMCITY_VERSION environment variable inside your test virtenv.
TEAMCITY_VERSION environment variable exists during build on TeamCity.
teamcity-messages uses it in order to enable reporting to TeamCity.
::
[testenv]
passenv = TEAMCITY_VERSION
Twisted trial
Add --reporter=teamcity
option to trial command line
Behave
For Behave 1.2.6:
.. code:: python
from behave.formatter import _registry
from behave.configuration import Configuration
from behave.runner import Runner
from teamcity.jb_behave_formatter import TeamcityFormatter
_registry.register_as("TeamcityFormatter", TeamcityFormatter)
configuration = Configuration()
configuration.format = ["TeamcityFormatter"]
configuration.stdout_capture = False
configuration.stderr_capture = False
Runner(configuration).run()
Python version compatibility
----------------------------
See https://pypi.org/project/teamcity-messages for Python version compatibility
Contact information
-------------------
https://github.com/JetBrains/teamcity-messages
TeamCity support: http://www.jetbrains.com/support/teamcity
License
-------
Apache, version 2.0 http://www.apache.org/licenses/LICENSE-2.0
.. |jb_project| image:: http://jb.gg/badges/official.svg
:target: https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub
:alt: Official JetBrains project
.. |license| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg
:target: https://opensource.org/licenses/Apache-2.0
:alt: Apache 2.0 license
.. |versions| image:: https://img.shields.io/pypi/pyversions/teamcity-messages.svg
:target: https://pypi.python.org/pypi/teamcity-messages
:alt: Python versions supported
.. |pypi_version| image:: https://badge.fury.io/py/teamcity-messages.svg
:target: https://pypi.python.org/pypi/teamcity-messages
:alt: PyPI version
.. |teamcity_ci| image:: https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:TeamCityPluginsByJetBrains_TeamCityPythonReporter_Build)/statusIcon.svg
:target: https://teamcity.jetbrains.com/viewType.html?buildTypeId=TeamCityPluginsByJetBrains_TeamCityPythonReporter_Build
:alt: TeamCity Build Status
Change Log
----------
Version 1.32 Tue Sep 27 2022
- flake8: fix flake8 >= 5 by @itsb #266 #264
Version 1.31 Tue Feb 22 2022
- python: supported Python 3.10
- escape unencodable messages by @kri-k #261
Version 1.30 Fri Dec 17 2021
- support pylint >= 2.12 by @Tirzono #259
- pytest: fix assert diffs by @ikonst #247
- pytest: support swapdiff as option by @throwable-one #244
Version 1.29 Fri Jun 25 2021
- python: supported Python 3.9
- support pylint >= 2.8 by @Tirzono #242
- pytest: add an option to swap actual/expected in diff
Version 1.28 Thu Apr 30 2020
- support coverage >= 5.0.1 by @enkelli #225 #218
- python: dropped Python 2.6, 3.5 support. Latest version to support them is 1.27
- python: supported Python 3.8
Version 1.27 Fri Nov 8 2019
- pylint: more compatibility fixes #215
Version 1.26 Tue Nov 5 2019
- drop Python 3.4 support
- pylint: support pylint >= 2.3 by @PetrWolf #215
- unittest: fix test hierarchy for subtests in tests with doc comments by @throwable-one #221
Version 1.25 Mon Apr 15 2019
- pytest: fix comparing asserts by @ikonst #210
- Retry writes to stream on a EAGAIN IOError by @morganwahl #213
Version 1.24 Mon Mar 18 2019
- pylint: initial support by @PetrWolf #171 #200
Version 1.23 Sun Mar 10 2019
- Correct supported python versions, description, keywords
Version 1.22 Sun Mar 10 2019
- python: dropped Python 2.4, 2.5, 3.2, 3.3 support. Latest version to support them is 1.21
- python: supported Python 3.6, 3.7
- behave: initial support
- unittest: subtests support
- various unicode fixes
- nose, unittest: correctly capture stdout to provide better test output
- twisted: format twisted Failure objects by @jackrobison
- various test infrastructure fixes by @sambrightman
- flake8: correctly initialize options by @sambrightman
- various fixes to use teamcity-messages code in JetBrains PyCharm IDE
Version 1.21 Mon Jan 2 2017
- pytest: internal Error during test collection with pytest and teamcity-messages plugin #112
- nose: support capturing test output from successful tests, #113
- Fix possible error when joining bytes and unicode (Victor Makarov, https://github.com/vitek)
Version 1.20 Wed Aug 3 2016
- flake8: 3.x support (Marc Abramowitz, https://github.com/msabramo)
- flake8: --no-teamcity option for 3.x
Version 1.19 Sun Jun 26 2016
- fix flake8 2.6.0 support #103 (Cody Maloney, https://github.com/cmaloney)
Version 1.18 Fri May 27 2016
- pytest: do not report setup fixtures as separate tests (https://github.com/JetBrains/teamcity-messages/issues/91)
- pytest: better test location presentation
- pytest: support for pytest-pep8 and pytest-lint plugins
- nose: make sure to turn reason into string when skipping test #98 (Piyush Gupta, https://github.com/piyushg91)
- twisted: fix twisted failure test reporting #88 (Alexey Larkov, https://github.com/gmlexx)
- flake8: better test name #89 (Marc Abramowitz, https://github.com/msabramo)
- Don't force a newline at the start of service messages #90 (Gary Donovan, https://github.com/garyd203)
Version 1.17 Sat Oct 17 2015
- support coverage >= 4.0
- automatically detect TeamCity in flake8 plugin (Marc Abramowitz, https://github.com/msabramo)
- more messages support (Marc Abramowitz, https://github.com/msabramo)
buildProblem, buildStatus, setParameter, importData, enableServiceMessages, disableServiceMessages etc
Version 1.16 Sat Sep 12 2015
- blocks messages support (Marc Abramowitz, https://github.com/msabramo)
Version 1.15 Fri Aug 28 2015
- Twisted's trial support (Alexey Larkov, https://github.com/gmlexx)
- nose: fix tests reporting in multiprocess environment, thanks to Lewis Coates, https://github.com/lewisc
- Fix UnicodeEncodeError when sys.stdout.encoding is None, thanks to Marc Abramowitz, https://github.com/msabramo
Version 1.14 Sat May 23 2015
- support python 2.4, 2.5
- nose: report skip test reason (Lewis Coates, https://github.com/lewisc)
Version 1.13 Sun Mar 29 2015
- report coverage statistics from py.test pytest-cov plugin (Joseph Lombrozo, https://github.com/djeebus)
- flake8 support (Joseph Lombrozo, https://github.com/djeebus)
Version 1.12 Fri Jan 16 2015
- unittest: fix 2.6 compat
Version 1.11 Fri Jan 16 2015
- nose: handle errors/failures in teardown/setup
- nose: support multiprocess mode
- nose: correctly report captured output
- unittest: support skipped tests in Python 2.6 (by unittest2)
- unittest: support subtests (Python 3.4+)
Version 1.10 Fri Jan 09 2015
- py.test: limit captured stdout/stderr by 1M per test and send it to TeamCity in chunks of 50K chars
- py.test: automatically enable TeamCity reporting under TeamCity build
- py.test: analyze capture flag of capture plugin and set captureStandardOutput parameter of testStarted accordingly
- py.test: report setup failures as a separate test
- py.test: report captured stdout/stderr (Aron Curzon, https://github.com/curzona) https://github.com/JetBrains/teamcity-messages/issues/12
- py.test: fix parallel tests reporting https://github.com/JetBrains/teamcity-messages/issues/11
Version 1.9 Thu Jan 08 2015
- Django support (Ralph Broenink, https://github.com/ralphje)
- Fix test hierarchies on nose and py.test
- py.test: report errors in setup and teardown
- py.test: report collect errors
- py.test: support xfail
- nose: support skipped tests
- unittest: support skip, expected failure and unexpected success
- Totally rewritten integration tests
* Thanks to Ralph Broenink (https://github.com/ralphje) and Leonid Bushuev (https://github.com/leo-from-spb)
Version 1.8 Sat Feb 08 2014
- extensive tests for nose integration (James Carpenter)
- added timestamps to TeamCity service messages (James Carpenter)
Version 1.7 Sun Feb 03 2013
- py.test support (Aaron Buchanan)
- official Python 3 support
Version 1.6 Tue Dec 06 2011
- Bundle forgotten examples/simple.py
Version 1.4 Tue Apr 27 2010
- Fixed http://youtrack.jetbrains.net/issue/TW-11313
Version 1.3 Fri Apr 11 2008
- Added newlines due to http://youtrack.jetbrains.net/issue/TW-4412
Version 1.2 Thu Apr 10 2008
- Fixed tests gold data
Version 1.1 Thu Apr 10 2008
- Fixed README
Version 1.0 Tue Apr 08 2008
- initial release