Gracias a un nuevo feature propuesto en la comunidad, podemos crear plugins independientes del código de Tempest para correr test cases personalizados en Openstack, este método se llama “Tempest Test Plugin Interface”.  Con esto cualquier proyecto podrá correr un conjunto de pruebas externas como parte de una corrida de Tempest, ahora solo nos debemos de preocupar por crear el plugin para agrupar nuestros test cases y olvidarnos de la complejidad de integrarlos en la estructura del código de Tempest. Mas independencia!

Estructura del plugin

Básicamente el plugin es un Python package que contiene test cases y se instala en tu ambiente local o virtual (venv), entonces al momento de instalar el paquete, Tempest los auto-descubrirá y registrará sin tener que hacer algo extra.

setup.cfg
setup.py
README.rst
plugin_dir/
  __init__.py
  config.py
  plugin.py
  tests/
    __init__.py
    api/
      __init__.py
      base.py
      test_something.py
    scenario/
      __init__.py

A continuación explico la función de cada archivo para que programes el plugin acorde a tus necesidades:

  • setup.cfg: Describe los metadatos de tu package, como: nombre, versión, autor, etc. Lo mas importante en este archivo es especificar el entrypoint, que es la ubicacion de la clase principal para que Tempest pueda registrarla.Veamos el siguiente ejemplo, donde my-plugin es el nombre que le darás a tu plugin, plugin_dir es el nombre de la carpeta en la estructura de archivos y MyTempestPlugin es el nombre que le des a tu clase principal en el archivo de plugin.py
    [entry_points]
    tempest.test_plugins =
    my-plugin = plugin_dir.plugin:MyTempestPlugin
  • setup.py: Se especifican los requerimientos globales del plugin, en este caso solo es necesario pbr.
  • README.rst: Información acerca del proyecto.
  • plugin_dir: Carpeta principal, generalmente se usa que lleve el nombre del plugin. Ejemplo: my_plugin.
    • config.py: Contiene variables de configuracion que las pruebas del plugin necesiten.
    • plugin.py: Es la clase del plugin, usada como entrypoint por Tempest.
    • tests: Aquí es donde vivirán los test cases.
      • api: Todos los test cases relacionados con pruebas de api.
      • scenario: Todos los test cases relacionados con pruebas de escenario.

En mi Github tengo un repositorio de un plugin básico que corre un “Hello World” test case, puedes revisarlo como referencia.

Instalación

Cuando corramos Tempest, automáticamente descubrirá los plugins instalados. Entonces lo único que necesitamos es instalar el Python package que contiene a nuestro plugin.

  1. Actualizar  pipsetuptools:
    $ pip install -U pip
  2. Instalar el package desde su carpeta raíz:
    $ sudo pip install -e .
Instalación en virtual environments

Si vas a correr Tempest desde un virtualenv debes de asegurarte de que el Python package que contiene al plugin esta instalado en el  venv.

$ . ~/tempest/.venv/bin/activate
$ ~/tempest/.venv/bin/pip install -e ~/my_plugin/

Validar que el plugin se instaló en el virtual environment:

$ ~/tempest/.venv/bin/pip list

Como correr los tests?

Para correr las pruebas usaremos el test runner de Openstack, testr.

  1. Validemos que Tempest descubrió el plugin:
    $ testr list-tests | grep mi_plugin

    Este comando mostrará una lista de todos los test cases dentro del plugin.

  2. Para correr los test cases lo puedes hacer por su nombre (de uno por uno), usando expresiones regulares o corriendo algún set  donde los test cases usen ese nombre como decorador (smoke, telemetry, volume, etc).
    $ testr run mi_plugin.tests.api.test_something.TestSomething.test_something_status
    $ testr run --subunit smoke | subunit-2to1 | ./tools/colorizer.py