diff options
-rw-r--r-- | doc/source/index.rst | 47 | ||||
-rw-r--r-- | pbr/testr_command.py | 18 | ||||
-rw-r--r-- | pbr/version.py | 5 | ||||
-rw-r--r-- | setup.cfg | 2 | ||||
-rw-r--r-- | tox.ini | 4 |
5 files changed, 62 insertions, 14 deletions
diff --git a/doc/source/index.rst b/doc/source/index.rst index a2b4342..4c80aa6 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -390,6 +390,53 @@ environment, you can use:: testing = quux:python_version=='2.7' + +Testing +------- + +pbr overrides the ``setuptools`` hook ``test`` (i.e. ``setup.py +test``). The following sequence is followed: + +#. If a ``.testr.conf`` file exists and `testrepository + <https://pypi.python.org/pypi/testrepository>`__ is installed, PBR + will use it as the test runner. See the ``testr`` documentation + for more details. + + .. note:: + + This is separate to ``setup.py testr`` (note the extra ``r``) which + is provided directly by the ``testrepository`` package. Be careful + as there is some overlap of command arguments. + +#. Although deprecated, if ``[nosetests]`` is defined in ``setup.cfg`` + and `nose <http://nose.readthedocs.io/en/latest/>`__ is installed, + the ``nose`` runner will be used. + +#. In other cases no override will be installed and the ``test`` + command will revert to `setuptools + <http://setuptools.readthedocs.io/en/latest/setuptools.html#test-build-package-and-run-a-unittest-suite>`__. + +A typical usage would be in ``tox.ini`` such as:: + + [tox] + minversion = 2.0 + skipsdist = True + envlist = py33,py34,py35,py26,py27,pypy,pep8,docs + + [testenv] + usedevelop = True + setenv = + VIRTUAL_ENV={envdir} + CLIENT_NAME=pbr + deps = . + -r{toxinidir}/test-requirements.txt + commands = + python setup.py test --testr-args='{posargs}' + +The argument ``--coverage`` will set ``PYTHON`` to ``coverage run`` to +produce a coverage report. ``--coverage-package-name`` can be used to +modify or narrow the packages traced. + Additional Docs =============== diff --git a/pbr/testr_command.py b/pbr/testr_command.py index e5ed026..cd179a2 100644 --- a/pbr/testr_command.py +++ b/pbr/testr_command.py @@ -26,16 +26,18 @@ # license you chose for the specific language governing permissions and # limitations under that license. -"""setuptools/distutils commands to run testr via setup.py +"""setuptools/distutils command to run testr via setup.py -Currently provides 'testr' which runs tests using testr. You can pass ---coverage which will also export PYTHON='coverage run --source <your package>' -and automatically combine the coverage from each testr backend test runner -after the run completes. +PBR will hook in the Testr class to provide "setup.py test" when +.testr.conf is present in the repository (see pbr/hooks/commands.py). + +If we are activated but testrepository is not installed, we provide a +sensible error. + +You can pass --coverage which will also export PYTHON='coverage run +--source <your package>' and automatically combine the coverage from +each testr backend test runner after the run completes. -To use, just use setuptools/distribute and depend on testr, and it should be -picked up automatically (as the commands are exported in the testrepository -package metadata. """ from distutils import cmd diff --git a/pbr/version.py b/pbr/version.py index e775267..474faf1 100644 --- a/pbr/version.py +++ b/pbr/version.py @@ -22,8 +22,6 @@ import itertools import operator import sys -import pkg_resources - def _is_int(string): try: @@ -435,6 +433,9 @@ class VersionInfo(object): record associated with the package, and if there is no such record falls back to the logic sdist would use. """ + # Lazy import because pkg_resources is costly to import so defer until + # we absolutely need it. + import pkg_resources try: requirement = pkg_resources.Requirement.parse(self.package) provider = pkg_resources.get_provider(requirement) @@ -41,8 +41,6 @@ autodoc_tree_excludes = [entry_points] distutils.setup_keywords = pbr = pbr.core:pbr -distutils.commands = - testr = pbr.testr_command:Testr egg_info.writers = pbr.json = pbr.pbr_json:write_pbr_json console_scripts = @@ -11,7 +11,7 @@ setenv = CLIENT_NAME=pbr deps = -r{toxinidir}/test-requirements.txt commands = - python setup.py testr --testr-args='{posargs}' + python setup.py test --testr-args='{posargs}' [tox:jenkins] sitepackages = True @@ -24,7 +24,7 @@ commands = python setup.py build_sphinx [testenv:cover] commands = - python setup.py testr --coverage + python setup.py test --coverage [testenv:venv] commands = {posargs} |