python - ¿Por qué el módulo cProfile no funciona con unittest?
macos unit-testing (1)
Yo usaría el módulo cProfile para perfilar mis pruebas unitarias. Pero cuando corro
python -mcProfile mytest.py
Tengo ''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()
También he probado con otras pruebas de unidad más complejas. Siempre tengo ''Ran 0 tests'' si lo ejecuto con cProfile. Por favor ayuda.
ACTUALIZACIÓN: Mi sistema operativo es MacOS 10.7 con python incorporado 2.7. El mismo código funciona correctamente en ubuntu.
Tienes que inicializar el cProfiler en el Constructor de la prueba, y usar 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 prueba espere la entrada, uno debe llamar a self.pr.disable()
antes de esa llamada y volver a habilitarla después.