2012-07-25 18 views
16

Yo usaría el módulo cProfile para perfilar las pruebas de mi unidad. Pero cuando ejecuto¿Por qué el módulo cProfile no funciona con unittest?

python -mcProfile mytest.py 

Obtuve 'Ran 0 pruebas en 0.000s'. Aquí está el código fuente de mytest.py

import unittest 

class TestBasic(unittest.TestCase): 
    def testFoo(self): 
     assert True == True 

if __name__ == '__main__': 
    unittest.main() 

He probado con otros unittests más complejos también. Siempre obtuve 'Ran 0 tests' si lo ejecuto con cProfile. Por favor ayuda.

ACTUALIZACIÓN: Mi sistema operativo es MacOS 10.7 con una función de pitón 2.7. El mismo código funciona correctamente en ubuntu.

+0

funciona para mí en Ubuntu - python2.6/2.7 :) ¿Intentó con el módulo 'Profile' solamente? –

+1

Gracias, Julien. Acabo de probar en ubuntu y funciona. Parece que es un problema específico de la plataforma. No funciona en MacOS 10.7 con un built-in python 2.7. –

+0

Supongo que nunca encontraste la forma de hacerlo funcionar en Mac OS X? – jgritty

Respuesta

8

Usted tiene que inicializar el cProfiler en el constructor de la prueba, y el uso de los datos del perfil en el destructor - lo uso así:

from pstats import Stats 
import unittest 

class TestSplayTree(unittest.TestCase): 
    """a simple test""" 

def setUp(self): 
    """init each test""" 
    self.testtree = SplayTree (1000000) 
    self.pr = cProfile.Profile() 
    self.pr.enable() 
    print "\n<<<---" 

def tearDown(self): 
    """finish any test""" 
    p = Stats (self.pr) 
    p.strip_dirs() 
    p.sort_stats ('cumtime') 
    p.print_stats() 
    print "\n--->>>" 
def xtest1 (self): 
    pass 

En caso de que una espera de prueba para de entrada, uno debe llamar al self.pr.disable() antes de esa llamada, y volver a habilitarlo después.

+0

Todavía no funcionó para mí cuando quería usar clientes de prueba de matraz. –

+2

FYI, la clase Stats está disponible a través de 'from pstats import Stats' –

+0

¿Es' self.testtree = SplayTree (1000000) 'esencial aquí? – industryworker3595112

Cuestiones relacionadas