Tempest - The OpenStack Integration Test Suite
==============================================

The documentation for Tempest is officially hosted at:
https://docs.openstack.org/tempest/latest/

This is a set of integration tests to be run against a live OpenStack
cluster. Tempest has batteries of tests for OpenStack API validation,
scenarios, and other specific tests useful in validating an OpenStack
deployment.

Design Principles
-----------------

Tempest Design Principles that we strive to live by.

- Tempest should be able to run against any OpenStack cloud, be it a
  one node DevStack install, a 20 node LXC cloud, or a 1000 node KVM
  cloud.
- Tempest should be explicit in testing features. It is easy to auto
  discover features of a cloud incorrectly, and give people an
  incorrect assessment of their cloud. Explicit is always better.
- Tempest uses OpenStack public interfaces. Tests in Tempest should
  only touch public OpenStack APIs.
- Tempest should not touch private or implementation specific
  interfaces. This means not directly going to the database, not
  directly hitting the hypervisors, not testing extensions not
  included in the OpenStack base. If there are some features of
  OpenStack that are not verifiable through standard interfaces, this
  should be considered a possible enhancement.
- Tempest strives for complete coverage of the OpenStack API and
  common scenarios that demonstrate a working cloud.
- Tempest drives load in an OpenStack cloud. By including a broad
  array of API and scenario tests Tempest can be reused in whole or in
  parts as load generation for an OpenStack cloud.
- Tempest should attempt to clean up after itself, whenever possible
  we should tear down resources when done.
- Tempest should be self-testing.

Quickstart
----------

To run Tempest, you first need to create a configuration file that will tell
Tempest where to find the various OpenStack services and other testing behavior
switches. Where the configuration file lives and how you interact with it
depends on how you'll be running Tempest. There are 2 methods of using Tempest.
The first, which is a newer and recommended workflow treats Tempest as a system
installed program. The second older method is to run Tempest assuming your
working dir is the actually Tempest source repo, and there are a number of
assumptions related to that. For this section we'll only cover the newer method
as it is simpler, and quicker to work with.

#. You first need to install Tempest. This is done with pip after you check out
   the Tempest repo::

    $ git clone https://opendev.org/openstack/tempest
    $ pip install tempest/

   This can be done within a venv, but the assumption for this guide is that
   the Tempest CLI entry point will be in your shell's PATH.

#. Installing Tempest may create a ``/etc/tempest dir``, however if one isn't
   created you can create one or use ``~/.tempest/etc`` or ``~/.config/tempest`` in
   place of ``/etc/tempest``. If none of these dirs are created Tempest will create
   ``~/.tempest/etc`` when it's needed. The contents of this dir will always
   automatically be copied to all ``etc/`` dirs in local workspaces as an initial
   setup step. So if there is any common configuration you'd like to be shared
   between local Tempest workspaces it's recommended that you pre-populate it
   before running ``tempest init``.

#. Setup a local Tempest workspace. This is done by using the tempest init
   command::

    $ tempest init cloud-01

   which also works the same as::

    $ mkdir cloud-01 && cd cloud-01 && tempest init

   This will create a new directory for running a single Tempest configuration.
   If you'd like to run Tempest against multiple OpenStack deployments the idea
   is that you'll create a new working directory for each to maintain separate
   configuration files and local artifact storage for each.

#. Then ``cd`` into the newly created working dir and also modify the local
   config files located in the ``etc/`` subdir created by the ``tempest init``
   command. Tempest is expecting a ``tempest.conf`` file in etc/ so if only a
   sample exists you must rename or copy it to tempest.conf before making
   any changes to it otherwise Tempest will not know how to load it. For
   details on configuring Tempest refer to the
   `Tempest Configuration <https://docs.openstack.org/tempest/latest/configuration.html#tempest-configuration>`_

#. Once the configuration is done you're now ready to run Tempest. This can
   be done using the `Tempest Run <https://docs.openstack.org/tempest/latest/run.html#tempest-run>`_
   command. This can be done by either
   running::

    $ tempest run

   from the Tempest workspace directory. Or you can use the ``--workspace``
   argument to run in the workspace you created regardless of your current
   working directory. For example::

    $ tempest run --workspace cloud-01

   There is also the option to use `stestr`_ directly. For example, from
   the workspace dir run::

    $ stestr run --exclude-regex '\[.*\bslow\b.*\]' '^tempest\.(api|scenario)'

   will run the same set of tests as the default gate jobs. Or you can
   use `unittest`_ compatible test runners such as `stestr`_, `pytest`_ etc.

   Tox also contains several existing job configurations. For example::

    $ tox -e full

   which will run the same set of tests as the OpenStack gate. (it's exactly how
   the gate invokes Tempest) Or::

    $ tox -e smoke

   to run the tests tagged as smoke.

.. _unittest: https://docs.python.org/3/library/unittest.html
.. _stestr: https://stestr.readthedocs.org/en/latest/MANUAL.html
.. _pytest: https://docs.pytest.org/en/latest/

Library
-------

Tempest exposes a library interface. This interface is a stable interface and
should be backwards compatible (including backwards compatibility with the
old tempest-lib package, with the exception of the import). If you plan to
directly consume Tempest in your project you should only import code from the
Tempest library interface, other pieces of Tempest do not have the same
stable interface and there are no guarantees on the Python API unless otherwise
stated.

For more details refer to the `library documentation
<https://docs.openstack.org/tempest/latest/library.html#library>`_

Release Versioning
------------------

`Tempest Release Notes <https://docs.openstack.org/releasenotes/tempest>`_
shows what changes have been released on each version.

Tempest's released versions are broken into 2 sets of information. Depending on
how you intend to consume Tempest you might need

The version is a set of 3 numbers:

X.Y.Z

While this is almost `semver`_ like, the way versioning is handled is slightly
different:

X is used to represent the supported OpenStack releases for Tempest tests
in-tree, and to signify major feature changes to Tempest. It's a monotonically
increasing integer where each version either indicates a new supported OpenStack
release, the drop of support for an OpenStack release (which will coincide with
the upstream stable branch going EOL), or a major feature lands (or is removed)
from Tempest.

Y.Z is used to represent library interface changes. This is treated the same
way as minor and patch versions from `semver`_ but only for the library
interface. When Y is incremented we've added functionality to the library
interface and when Z is incremented it's a bug fix release for the library.
Also note that both Y and Z are reset to 0 at each increment of X.

.. _semver: https://semver.org/

Configuration
-------------

Detailed configuration of Tempest is beyond the scope of this
document, see `Tempest Configuration Documentation
<https://docs.openstack.org/tempest/latest/configuration.html#tempest-configuration>`_
for more details on configuring Tempest.
The ``etc/tempest.conf.sample`` attempts to be a self-documenting
version of the configuration.

You can generate a new sample tempest.conf file, run the following
command from the top level of the Tempest directory::

    $ tox -e genconfig

The most important pieces that are needed are the user ids, OpenStack
endpoints, and basic flavors and images needed to run tests.

Unit Tests
----------

Tempest also has a set of unit tests which test the Tempest code itself. These
tests can be run by specifying the test discovery path::

    $ stestr --test-path ./tempest/tests run

By setting ``--test-path`` option to ./tempest/tests it specifies that test discover
should only be run on the unit test directory. The default value of ``test_path``
is ``test_path=./tempest/test_discover`` which will only run test discover on the
Tempest suite.

Alternatively, there is the py39 tox job which will run the unit tests with
the corresponding version of python.

One common activity is to just run a single test, you can do this with tox
simply by specifying to just run py39 tests against a single test::

    $ tox -e py39 -- -n tempest.tests.test_microversions.TestMicroversionsTestsClass.test_config_version_none_23

Or all tests in the test_microversions.py file::

    $ tox -e py39 -- -n tempest.tests.test_microversions

You may also use regular expressions to run any matching tests::

    $ tox -e py39 -- test_microversions

Additionally, when running a single test, or test-file, the ``-n/--no-discover``
argument is no longer required, however it may perform faster if included.

For more information on these options and details about stestr, please see the
`stestr documentation <https://stestr.readthedocs.io/en/latest/MANUAL.html>`_.

Python 3.x
----------

Starting during the Pike cycle Tempest has a gating CI job that runs Tempest
with Python 3. Any Tempest release after 15.0.0 should fully support running
under Python 3 as well as Python 2.7.

Legacy run method
-----------------

The legacy method of running Tempest is to just treat the Tempest source code
as a python unittest repository and run directly from the source repo. When
running in this way you still start with a Tempest config file and the steps
are basically the same except that it expects you know where the Tempest code
lives on your system and requires a bit more manual interaction to get Tempest
running. For example, when running Tempest this way things like a lock file
directory do not get generated automatically and the burden is on the user to
create and configure that.

To start you need to create a configuration file. The easiest way to create a
configuration file is to generate a sample in the ``etc/`` directory ::

    $ cd $TEMPEST_ROOT_DIR
    $ oslo-config-generator --config-file \
        tempest/cmd/config-generator.tempest.conf \
        --output-file etc/tempest.conf

After that, open up the ``etc/tempest.conf`` file and edit the
configuration variables to match valid data in your environment.
This includes your Keystone endpoint, a valid user and credentials,
and reference data to be used in testing.

.. note::

    If you have a running DevStack environment, Tempest will be
    automatically configured and placed in ``/opt/stack/tempest``. It
    will have a configuration file already set up to work with your
    DevStack installation.

Tempest is not tied to any single test runner, but `stestr`_ is the most commonly
used tool. Also, the nosetests test runner is **not** recommended to run Tempest.

After setting up your configuration file, you can execute the set of Tempest
tests by using ``stestr``. By default, ``stestr`` runs tests in parallel ::

    $ stestr run

To run one single test serially ::

    $ stestr run --serial tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_reboot_non_existent_server
