Un plugin de nariz para especificar el orden de ejecución de la prueba unitaria.

Tengo el deseo de usar Nose para un conjunto de pruebas de integración por cable. Sin embargo, el orden de ejecución de algunas de estas pruebas es importante.

Dicho esto, pensé que podría juntar un complemento rápido para decorar una prueba con el orden que quiero que se ejecute: https://gist.github.com/Redsz/5736166

def Foo(unittest.TestCase): @step(number=1) def test_foo(self): pass @step(number=2) def test_boo(self): pass 

loadTestsFromTestCase revisar los complementos incorporados que había pensado, simplemente podía anular loadTestsFromTestCase y ordenar las pruebas por el ‘número de paso’ decorado:

 def loadTestsFromTestCase(self, cls): """ Return tests in this test case class. Ordered by the step definitions. """ l = loader.TestLoader() tmp = l.loadTestsFromTestCase(cls) test_order = [] for test in tmp._tests: order = test.test._testMethodName func = getattr(cls, test.test._testMethodName) if hasattr(func, 'number'): order = getattr(func, 'number') test_order.append((test, order)) test_order.sort(key=lambda tup: tup[1]) tmp._tests = (t[0] for t in test_order) return tmp 

¿Este método es devolver las pruebas en el orden que deseo, sin embargo, cuando las pruebas están siendo ejecutadas por la nariz, no se están ejecutando en este orden?

¿Quizás necesito mover este concepto de pedido a una ubicación diferente?

ACTUALIZACIÓN : De acuerdo con el comentario que hice, el complemento funciona realmente como se esperaba. Me equivoqué al confiar en el reportero de prueba de pycharm. Las pruebas se están ejecutando como se esperaba. En lugar de eliminar la pregunta, pensé que la dejaría.

De la documentación :

[…] nose ejecuta pruebas funcionales en el orden en que aparecen en el archivo del módulo. Las pruebas derivadas de TestCase y otras clases de prueba se ejecutan en orden alfabético.

Entonces, una solución simple podría ser cambiar el nombre de las pruebas en su caso de prueba:

 class Foo(unittest.TestCase): def test_01_foo(self): pass def test_02_boo(self): pass 

Encontré una solución para él usando el complemento de pedido de PyTest que se proporciona aquí .

Pruebe py.test YourModuleName.py -vv en CLI y la prueba se ejecutará en el orden en que aparecieron en su módulo (primero test_foo y luego test_bar)

Hice lo mismo y funciona bien para mí.

Nota: debe instalar el paquete PyTest e importarlo.