teamcity-messages 1.33
Send test results to TeamCity continuous integration server from unittest, nose, py.test, twisted trial, behave (Python 2.6+)
License: Apache 2.0
Keywords: unittest teamcity test nose behave flake8 py.test pytest jetbrains

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.33 Thu Oct 17 2024
  - python: supported Python 3.12
  - coverage: fix coverage 7.5+ #282

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