Bienvenido a la web de la Oficina del Software Libre y Conocimiento Abierto de la Universidad de Cádiz

Test suites con QMTest

Hoy me he llevado un alegrón cuando he conseguido crear mi primer modelo de test (bastante tonto, por cierto) con qmtest. Por si a alguien le interesa y para que no se me olvide cómo se hace, pongo aquí la receta.

Antes, la motivación: tengo que hacer unos cuantos exprerimentos numéricos (aproximar las soluciones de determinadas ecuaciones que representan modelos físicos) y para ello emplearé distintos entornos de programación, alguno más especializado, como FreeFem++, y otro menos especializado, como Octave. Como los algoritmos son bastante complejos, me gustaría disponer de una serie de "test suites" para comprobar, paso a paso, que todo va bien. Y esto para los dos casos (y, en el futuro, quizás más).

Buscando entornos de tests, el primero que me vino a la cabeza fue dejagnu , de hecho empecé a utilizarlo. Pero los test que tengo que realizar no son triviales, así que pronto me encontré programando en TCL. Buff, ¿no existe algun entorno de test similar pero que use Python? --me pregunté. Y encontré la solución: qmtest. Y disponible directamente en Debian/Ubuntu. Así que... ¡manos a la obra!

Una sesión mínima con qmtest (basado en la guía de usuario de su web):

 

  $ mkdir test-database
$ cd test-database
$ qmtest create-tdb

Esto crea un directorio conteniendo una base de datos (en XML) a la que podemos añadir tantos tests como deseemos, como los siguientes "tests tontos"

  $ qmtest create --id=python_pass -a expression='True' test python.ExecTest
$ qmtest create --id=python_fail -a expression='False' test python.ExecTest

El primero siempre pasará con éxito (se evalúa la expresión Python "True") y el segundo fracasará. Las siguientes órdenes nos listan los tests disponibles y los ejecutan:

  $ qmtest ls
$ qmtest run

Pero, ¿puedo particularizar a tests adaptados a mis necesidades? Por supuesto, existen muchos otros tests "precocinados" que puden resultar suficientes en la mayoría de las necesidades. Pero en mi caso, por motivos que no vienen al caso, ninguno acaba de encajar, lo que me gustaría es poder crear mis propios test. No hay problema. La receta (más información en el capítulo 4, "Extending QMTest", de la guía de usuario):

  1. Edito el fichero QMTest/basura.py

from qm.test.test import Test

class TestBasura(Test):
def Run(self, context, result):
  print "OK"
  • Tecleo:
    qmtest register test basura.TestBasura
    qmtest create id=basura test basura.TestBasura
    qmtest run

    Y todo va bien: ya tengo mi primer test personalizado, que puedo ejecutar como parte de mi "test suite". Por supuesto, esto no es más que el principio, pero soy feliz.

  • Una nota final: si se ejecuta con Python el fichero basura.py, se obtendrá un error al importar los objetos de qmtest. Esto me dio bastantes dolores de cabeza, hasta darme cuenta de que no podía usar el fichero directamente, sino de forma integrada en el entorno de qmtest. Quizás de aquí mi alegría.

    Saludos, Rafa.

    Distribuir contenido