Herramienta de Gestión de Pruebas

Sumario

La herramienta tmt tiene por objeto proporcionar una manera eficiente y confortable para crear, ejecutar, depurar y activar pruebas en la Integración Continua.

Implementa la Especificación de Prueba de Metadatos las cuales permiten almacenar todos los datos de ejecución de pruebas necesarias directamente dentro de un repositorio git. La misma configuración puede ser utilizada para habilitar pruebas en el IC Fedora, IC RHEL y Packit. Las pruebas pueden ser ejecutadas fácilmente en su entorno prefereido, p.ej. en máquina virtual, contenedor o directamente en el hospedaje local.

Primeros Pasos

Instalar

Instala tmt en su portátil:

sudo dnf install -y tmt       # características básicas, ejecutando pruebas en localhost
sudo dnf install -y tmt+all   # instala todo los subpaquetes tmt disponibles incluyendo todas las dependencias

Además puede instalar solo complementos de suministro seleccionados:

sudo dnf install -y tmt+provision-container   # dependencias adicionales para ejecutar pruebas dentro de contenedores
sudo dnf install -y tmt+provision-virtual     # admite para ejecutar pruebas dentro de una máquina virtual utilizando testcloud

consulte la sección tmt install para más opciones de instalación.

Repo Git

Echa un vistazo a las ramas git deseadas utilizando fedpkg:

fedpkg clone -a bash
cd bash
git checkout f32

O clone su repo del proyecto GitHub:

git clone https://github.com/teemtee/tmt/
cd tmt
git checkout -b enable-tests

Test Smoke

Activemos un test simple smoke utilizando la plantilla de plan mínimo:

$ tmt init --template mini
Tree '/tmp/bash' inicializado.
Aplicando plantilla 'mini'.
Directorio '/tmp/bash/plans' creado.
Plan '/tmp/bash/plans/ejemplo.fmf' creado.

Edita el plan nuevamente creado como necesitaba, p.e. como esto:

summary:
    Test smoke básico para bash
execute:
    script: bash --version

Ejecutar Pruebas

Pruebas de Ejecución

Ejecuta todas las pruebas disponibles de forma segura dentro de una máquina virtual:

tmt run

Ejecute solo pruebas coincidentes con nombre dado o lugar bajo el directorio actual:

tmt run test --name smoke
tmt run test --name .

Muestra resultados de prueba detallado desde la última ejecución tmt ejecutada por el usuario actual:

tmt run --last report -fvvv

Ejecutando pruebas activadas utilizando el Interfaz de Pruebas Estándar en tests/tests.yml no están admitidas aún pero estamos trabajando con ello.

Seleccione Pasos

Elija explícitamente cuales pasos serían ejecutados:

tmt ejecuta discover

Esto proporcionará un resumen de pruebas el cual sería ejecutado. Para listar pruebas individuales active el modo verborreo:

tmt run discover --verbose
tmt run discover -v

Opciones de Abaste

Elija local como el método de previsión pero ejecute pasos --all:

tmt run --all provision --how local

Ejecute dentro de un contenedor o máquina virtual:

tmt run --all provision --how container --image fedora
tmt run --all provision --how virtual --image fedora-32

Marque todos los complementos propuestos disponibles:

tmt run provision --help

Preparar Opciones

Instala paquetes adicionales en el invitado:

tmt run --all prepare --how install --package httpd

Obtiene el último paquete desde repositorio copr proporcionado:

tmt run --all prepare --how install --copr @teemtee/tmt --package tmt

Utilice el rpm local de compilación reciente o todos los rpms desde directorio local proporcionado:

tmt run --all prepare --how install --package tmp/RPMS/noarch/tmt-0.20-1.fc32.noarch.rpm
tmt run --all prepare --how install --directory tmp/RPMS/noarch

Comprueba todas las opciones a preparar:

tmt run prepare --help

Crear Prueba

Con el fin de crear tests más complejos utilicemos la plantilla de plan base:

tmt plan create /plans/basic --template base
tmt plan create /plans/basic -t base

Actualiza sumario como necesite, conserva método descubierto para fmf y elija si las pruebas serían ejecutadas como guiones shell (tan solo compruebe el código de salida) o pruebas beakerlib(investiga diario para resultados de test):

resumen:
    Comprueba características de bash básicas
descubre:
    como: fmf
ejecuta:
    como: tmt

Test Intérprete

Con el fin de crear un esqueleto de prueba de intérprete simple utilice la plantilla del intérprete:

$ tmt test create /tests/smoke
Plantilla (shell o beakerlib): shell
Directorio '/tmp/bash/tests/smoke' creado.
Test metadata '/tmp/bash/tests/smoke/main.fmf' creado.
Test script '/tmp/bash/tests/smoke/test.sh' creado.

Actualiza archivo de metadatos:

sumario: comprueba versión de bash
contacto: Petr Šplíchal <psplicha@redhat.com>
test: ./test.sh

Ajuste el guion de test como desea:

#!/bin/sh -eux
tmp=$(mktemp)
bash --version > $tmp
grep 'GNU bash' $tmp
grep 'Free Software Foundation' $tmp
rm $tmp

Utilice tmt run para verificar el test está trabajando como esperaba.

Test BeakerLib

Utilice la plantilla beakerlib para crear un test nuevo de beakerlib:

$ tmt test create /tests/smoke -t beakerlib
Directorio '/tmp/bash/tests/smoke' creado.
Test metadata '/tmp/bash/tests/smoke/main.fmf' creado.
Test guion '/tmp/bash/tests/smoke/test.sh' creado.

Actualiza test metadatos y código como necesario, utilice tmt run para verificar que todo está funcionando bien.

Solicitudes de extracción

Cuando crea la petición de extracción asegúrese que añada todos los archivos creados incluyendo el directorio .fmt especial.

git add .
git commit

Fedora

Con el fin de probar sus cambios en Fedora CI no es necesaria ninguna configuración adicional. Asegure que su push los cambios dentro de su repositorio bifurcado como rpms/tests con espacio de nombre fedora no permite forzar push o retirar ramificación.

git remoto añade bifurcación ssh://psss@pkgs.fedoraproject.org/forks/psss/rpms/tmt.git
git empuja bifurcación -u activa-pruebas

GitHub

Con el fin de probar una solicitud pull en GitHub activa la integración Empaquetar-como-un-Servicio y añade un archivo de configuración .packit.yaml:

tareas:
- tarea: tests
  disparador: pull_request
  metadatos:
    destinos:
    - fedora-all

Para más detalles consulte la documentación de Testing Farm. Una vez que la integración esté activada empuje la rama, cree una solicitud pull nueva como usual y espere los resultados:

git push origin -u enable-tests

Plantillas

Cuando crea una solicitud pull para activar pruebas en un repositorio sin ninguna configuración tmt, incluya una pareja de consejos y enlaces para aquellos quienes no son familiares con la nueva herramienta:

Esta solicitud de pull activa pruebas en el Fedora CI utilizando `tmt` la cual
además permite fácilmente ejecutar y depurar pruebas desde su portátil:

Ejecute pruebas directamente en su host local:

    sudo dnf install -y tmt
    tmt run --all provision --how local

Ejecuta pruebas en una máquina virtual:

    sudo dnf install -y tmt+provision-virtual
    tmt run

Comprueba la documentación para aprender más sobre la herramienta:
https://docs.fedoraproject.org/es/ci/tmt

Gestionar Pruebas

Explorar pruebas disponibles, convierte metadatos antiguos, comparte código de prueba.

Explorar Pruebas

Con el fin de consultar cuales pruebas están disponibles:

tmt test ls

Para mostrar más detalles sobre pruebas individuales:

tmt test show

Para consultar una vista previa de todos los metadatos:

tmt

Explora todas las opciones disponibles e instrucciones utilizando --help.

Compartir Pruebas

Código de test no tiene que residir en el mismo repo git (p.e. dist git rpms espacio-nombre). Es posible almacenar pruebas en un repo dedicado y compartido a través de versiones de componentes o producto. Solo necesitas para referencia el repositorio en el paso de descubrimiento. Utilice la plantilla de plan completo para obtener rápidamente iniciado:

tmt plan create /plans/upstream -t full

Actualiza el repositorio url para apuntar al lugar derecho:

smario

Características de línea de instrucción esencial discover: como: fmf url: https://github.com/teemtee/tmt execute: como: tmt

Ahora será capaz de ejecutar pruebas desde el repo remoto, Consulte el paso descubierto de documentación para detalles.

Varios consejos

Comandos Múltiples

Además pueden ser proporcionadas múltiples instrucciones de intérprete bajo el atributo guion:

sumario:
    Test smoke básico para bash
execute:
    guion:
        - bash --version
        - bash -c 'echo $((1+1+1))' | grep 3

Consulte el método de guion de documentación para detalles.

Instalando dependencias

Pueden instalarse los paquetes requeridos utilizando el atributo prepare:

    sumario: Prueba smoke básica para python3-m2crypto
    preparar:
        como: instalar
        paquete:
          - python3-setuptools
          - python3-m2crypto
ejecute:
script: python3 -c "import M2Crypto"

Consulte el paso preparación de documentación para detalles.

Múltiples Repositorios

En el paso descubierto también es posible referenciar múltiples repositorios. De esta manera puede por ejemplo ejecutar fácilmente ambos upstream y pruebas fedora como parte de un plan único:

descubrir:
  - nombre: fedora
    como: fmf
    url: https://src.fedoraproject.org/tests/selinux.git
  - nombre: upstream
    como: fmf
    url: https://github.com/SELinuxProject/selinux-testsuite

Además consulte el ejemplo de configulación múltiple en el repo tmt para obtener una mejor idea.

Planes Múltiples

Es posible utilizar planes múltiples para pruebas relevantes de grupo juntos o para ser capaz de ejecutar fácilmente un subconjunto de pruebas. Por ejemplo, tengamos un plan /plans/features el cual cubre todas las pruebas de funcionalidad desde el repositorio git local:

descubrir:
    como: fmf
ejecuta:
    como: tmt

Y un plan separado /plans/integration para activar pruebas de integración con otro componente:

descubrir:
    como: fmf
    url: https://src.fedoraproject.org/rpms/ltrace.git
ejecutar:
    como: tmt

Ejecutando todas las pruebas desde el plan dado es entonces muy fácil:

tmt run plan --name /plans/features

Cuando ejecute en el IC, los resultados desde tales planes son reportados como un único resultdb testcase y son mostrados en peticiones pull como un único indicador. Con el fin de activar resultado deparado por cada plan, crea un archivo ci.fmf dentro de la raíz del repositorio git con el contenido siguiente:

resultsdb-testcase: separar

Una vez que separación de informe fue activado, puede activar la compuerta para planes seleccionados únicamente. Nombre de plan se convierte en parte del nombre de resultsdb testcase el cual es utilizado dentro de la configuración gating.yaml. Consulte la documentación de compuerta en Utilizar Planes Múltiples para más detalles.

Ruta Minimal

Aquí está un ejemplo de una ruta de creación de test minimal:

dnf install -y tmt+all
git clone https://src.fedoraproject.org/rpms/bash
cd bash
tmt init -t mini
vim plans/example.fmf
tmt run

Un ejemplo ligeramente extendido con test adaptado y plantilla de plan y ejecutando directamente prueba en el host local:

dnf install -y tmt+all
git clone https://src.fedoraproject.org/rpms/bash
cd bash
tmt init
tmt plan create --template base plans/smoke
tmt test create --template beakerlib tests/smoke
vim plans/smoke.fmf tests/smoke/*
tmt run --all provision -h local
git add .
git commit -m "Enable basic tests"
git push

Consejos de Virtualización

Con el fin de ejecutar con seguridad las pruebas bajo una máquina virtual iniciada en su portátil solo necesita instalar el paquete tmt+provision-virtual. Por defecto la conexión de la sesión es utilizada tal que ningún otro paso sería necesario, tan solo ejecute pruebas utilizando la instrucción tmt run. Consulte el upstream de Consejos de Virtualization para más opciones.

Preguntas

¿Esta herramienta sustituye/dejar de utilizar STI?

No, actualmente no hay plan de desmantelar STI. Ambas aproximaciones tmt y sti para configuración IC puede ser utilizada en paralelo.

¿Son estas pruebas compatibles en IC Fedora?

Sí, el mantenimiento CI Fedora está habilitado para todas las ramas activas y las pruebas de espacio de nombres también.

¿Cuales distribuciones de Linux soportan la herramienta?

Como un sistema bajo test (en el cual las pruebas son ejecutadas) todas las versiones Fedora soportadas, CentOS 6+ y Red Hat Enterprise Linux 6+ pueden ser utilizadas. Para el probador de pruebas (donde la instrucción tmt es ejecutada) todas las versiones de Fedora soportadas, CentOS 8+ o Red Hat Enterprise Linux 8+ son requeridas.