2012-08-17 10 views
13

Estoy trabajando en pruebas para una aplicación web escrita en python.Pruebas de nariz Python omitan ciertas pruebas

Supongamos que tengo 5 pruebas en mi módulo test_login.py.

Cada prueba individual es una clase.

A menudo hay una prueba base que extiende la clase TestFlow, que es nuestra clase de prueba predefinida.

Y luego otras pruebas en este módulo extienden esa prueba de base.

Por ejemplo:

#The base test 

TestLogin(TestFlow): 
    #do login_test_stuff_here 

#Another test in the same module 

TestAccountDetails(TestLogin) 
    #do account_details_test_stuff_here 

... 

En realidad es bastante útil, porque a fin de probar, por ejemplo, AccountDetails usuario tiene que estar conectado, por lo que sólo puede heredar de prueba TESTLOGIN y estoy listo para probar otra funcionalidad como un usuario registrado

Todas las pruebas se encuentran en la carpeta Proyecto/proyecto/pruebas.

Usamos nosetests con opción --with-pylons para ejecutar pruebas.

Y mi pregunta es si hay una manera de marcar ciertos TestClass como "No probar este".

Porque no quiero perder el tiempo para ejecutar estas "pruebas base" directamente, porque se ejecutarán por otras pruebas que hereden de ellas.

Probablemente habrá tonos de estas pruebas y quiero guardar cada segundo donde sea posible.

ya he encontrado algo así como Skip, SkipTest o @nottest, pero éstos sólo trabajo para test_methods dentro de un ceratin TestClass, así que no creo que vaya a trabajar aquí, fueron tengo una sola clase para cada caso de prueba.

Respuesta

2

http://nose.readthedocs.org/en/latest/writing_tests.html

pruebas de escritura

Al igual que con py.test, las pruebas de la nariz no tienen que ser subclases de unittest.TestCase. Cualquier función o clase que coincida con la expresión regular testMatch configurada ((?:^| [\ B _ \ .-]] [Tt] est) de forma predeterminada - es decir, tiene prueba o Prueba en un límite de palabras o sigue a - o _) y vive en un módulo que también coincide con esa expresión se ejecutará como una prueba. En aras de la compatibilidad con los casos de prueba de test unitarios heredados, nariz también cargará pruebas de unittest.TestCase subclasses como unittest does. Al igual que py.test, nose ejecuta pruebas funcionales en el orden en el que aparecen en el archivo del módulo. Las pruebas derivadas de TestCase y otras clases de prueba se ejecutan en orden alfabético.

tenga en cuenta la expresión regular y la regla anterior. nombre sus funciones/métodos/clases para que no coincidan con la expresión regular, y no se ejecutarán.

Dicho esto, no recomiendo su sugerencia de herencia de encadenamiento para las pruebas. es una receta para la frustración y el desorden.

es probable que sea mejor hacer una clase mixin, o definir una clase base que no tenga ninguna prueba real, pero tiene muchas funciones auxiliares que las clases heredadas pueden llamar y usar como propias.

si mira las pruebas de los paquetes más populares, casi todos usan ese enfoque.

+0

Tenga en cuenta que la coincidencia de correspondencia no es la única puerta para la inclusión - * nose también cargará las pruebas de unittest.TestCase subclasses *. Parece hacer esto por cualquier cosa que importe también. Tengo una prueba llamada 'FooMixin' en un módulo llamado' foo_helpers.py' que se está tratando como una prueba simplemente porque se deriva de 'unittest.TestCase'. –

12

nosetests formulario que se puede hacer de la siguiente manera mediante la especificación de los atributos http://nose.readthedocs.org/en/latest/plugins/attrib.html

A menudo cuando se prueba que tendrá que seleccionar pruebas basadas en criterios en lugar de simplemente por nombre de archivo. Por ejemplo, es posible que desee ejecutar todas las pruebas, excepto las lentas. Puede hacer esto con el plugin selector de Atributo configurando atributos en sus métodos de prueba. Aquí está un ejemplo:

def test_big_download(): 
    import urllib 
    # commence slowness... 

test_big_download.slow = 1 

vez que haya asignado un atributo lenta = 1 puede excluir esa prueba y todas las demás pruebas que tienen el atributo lenta mediante la ejecución de

$ nosetests -a '!slow' 
2

Usted puede utilizar realmente el skiptest para Clases también.

import unittest 

@unittest.skip("Class disabled") 
class TestLogin(TestFlow): 
    ... 
+0

Tenga en cuenta que en Python <= 2.6 necesita instalar unittest2 para que esto funcione. – gaborous

+1

Eso no funcionará para el caso de uso proporcionado. Agregar el decodificador de omisiones a la clase base hará que todas las subclases también sean omitidas. Incluso si usó '@ unittest.skipIf (True," base class ")' en la clase base y '@ unittest.skipIf (False," ")' en las subclases, las subclases aún se saltan –

Cuestiones relacionadas