Updates the documentation for nova unit tests

unit_tests.rst is outdated and does not reflect the recent changes
in the run_tests.sh script. Fix required an update of the usage
output of run_tests.sh as well as changes to some references.
Nova now uses testrepository and flake8.

There were also changes to the examples shown in the section
"Running a subset of tests". All the updated examples were tested.

Removes white spaces at the of end 3 lines.

Change-Id: I3fa040d5682ad94d861cef2a64b19b4da947318b
Closes-Bug: #1219040
This commit is contained in:
pmoosh 2013-10-16 21:48:22 -07:00
parent a49caf53c0
commit 73b82dda9d

View File

@ -12,10 +12,10 @@ Run the unit tests by doing::
./run_tests.sh ./run_tests.sh
This script is a wrapper around the `nose`_ testrunner and the `pep8`_ checker. This script is a wrapper around the `testr`_ testrunner and the `flake8`_ checker.
.. _nose: http://code.google.com/p/python-nose/ .. _testr: https://code.launchpad.net/testrepository
.. _pep8: https://github.com/jcrocholl/pep8 .. _flake8: https://github.com/bmcustodio/flake8
Flags Flags
----- -----
@ -30,22 +30,33 @@ This will show the following help information::
Usage: ./run_tests.sh [OPTION]... Usage: ./run_tests.sh [OPTION]...
Run Nova's test suite(s) Run Nova's test suite(s)
-V, --virtual-env Always use virtualenv. Install automatically if not present -V, --virtual-env Always use virtualenv. Install automatically if not present
-N, --no-virtual-env Don't use virtualenv. Run tests in local environment -N, --no-virtual-env Don't use virtualenv. Run tests in local environment
-s, --no-site-packages Isolate the virtualenv from the global Python environment -s, --no-site-packages Isolate the virtualenv from the global Python environment
-x, --stop Stop running tests after the first error or failure. -f, --force Force a clean re-build of the virtual environment. Useful when dependencies have been added.
-f, --force Force a clean re-build of the virtual environment. Useful when dependencies have been added. -u, --update Update the virtual environment with any newer package versions
-p, --pep8 Just run pep8 -p, --pep8 Just run PEP8 and HACKING compliance check
-P, --no-pep8 Don't run pep8 -P, --no-pep8 Don't run static code checks
-c, --coverage Generate coverage report -c, --coverage Generate coverage report
-h, --help Print this usage message -d, --debug Run tests with testtools instead of testr. This allows you to use the debugger.
--hide-elapsed Don't print the elapsed time for each test along with slow test list -h, --help Print this usage message
--hide-elapsed Don't print the elapsed time for each test along with slow test list
--virtual-env-path <path> Location of the virtualenv directory
Default: $(pwd)
--virtual-env-name <name> Name of the virtualenv directory
Default: .venv
--tools-path <dir> Location of the tools directory
Default: $(pwd)
Because ``run_tests.sh`` is a wrapper around nose, it also accepts the same Note: with no options specified, the script will try to run the tests in a virtual environment,
flags as nosetests. See the `nose options documentation`_ for details about If no virtualenv is found, the script will ask if you would like to create one. If you
prefer to run tests NOT in a virtual environment, simply pass the -N option.
Because ``run_tests.sh`` is a wrapper around testrepository, it also accepts the same
flags as testr. See the `testr user manual`_ for details about
these additional flags. these additional flags.
.. _nose options documentation: http://readthedocs.org/docs/nose/en/latest/usage.html#options .. _testr user manual: https://testrepository.readthedocs.org/en/latest/MANUAL.html
Running a subset of tests Running a subset of tests
------------------------- -------------------------
@ -57,34 +68,19 @@ To run the tests in the ``nova/tests/scheduler`` directory::
./run_tests.sh scheduler ./run_tests.sh scheduler
To run the tests in the ``nova/tests/test_libvirt.py`` file:: To run the tests in the ``nova/tests/virt/libvirt/test_libvirt.py`` file::
./run_tests.sh test_libvirt ./run_tests.sh test_libvirt
To run the tests in the `HostStateTestCase` class in To run the tests in the ``CacheConcurrencyTestCase`` class in
``nova/tests/test_libvirt.py``:: ``nova/tests/virt/libvirt/test_libvirt.py``::
./run_tests.sh test_libvirt:HostStateTestCase ./run_tests.sh test_libvirt.CacheConcurrencyTestCase
To run the `ToPrimitiveTestCase.test_dict` test method in To run the `ValidateIntegerTestCase.test_invalid_inputs` test method in
``nova/tests/test_utils.py``:: ``nova/tests/test_utils.py``::
./run_tests.sh test_utils:ToPrimitiveTestCase.test_dict ./run_tests.sh test_utils.ValidateIntegerTestCase.test_invalid_inputs
Suppressing logging output when tests fail
------------------------------------------
By default, when one or more unit test fails, all of the data sent to the
logger during the failed tests will appear on standard output, which typically
consists of many lines of texts. The logging output can make it difficult to
identify which specific tests have failed, unless your terminal has a large
scrollback buffer or you have redirected output to a file.
You can suppress the logging output by calling ``run_tests.sh`` with the nose
flag::
--nologcapture
Virtualenv Virtualenv
---------- ----------
@ -114,21 +110,6 @@ If you do not wish to use a virtualenv at all, use the flag::
-N, --no-virtual-env -N, --no-virtual-env
Database
--------
Some of the unit tests make queries against an sqlite database [#f3]_. By
default, the test database (``tests.sqlite``) is deleted and recreated each
time ``run_tests.sh`` is invoked (This is equivalent to using the
``-r, --recreate-db`` flag). To reduce testing time if a database already
exists it can be reused by using the flag::
-n, --no-recreate-db
Reusing an existing database may cause tests to fail if the schema has
changed. If any files in the ``nova/db/sqlalchemy`` have changed, it's a good
idea to recreate the test database.
Gotchas Gotchas
------- -------
@ -137,7 +118,7 @@ Gotchas
If you are running the unit tests from a shared folder, you may see tests start If you are running the unit tests from a shared folder, you may see tests start
to fail or stop completely as a result of Python lockfile issues [#f4]_. You to fail or stop completely as a result of Python lockfile issues [#f4]_. You
can get around this by manually setting or updating the following line in can get around this by manually setting or updating the following line in
``nova/tests/fake_flags.py``:: ``nova/tests/conf_fixture.py``::
FLAGS['lock_path'].SetDefault('/tmp') FLAGS['lock_path'].SetDefault('/tmp')