2012-07-25 24 views
16

Vorrei usare il modulo cProfile per profilare i miei test di unità. Ma quando corroPerché il modulo cProfile non funziona con unittest?

python -mcProfile mytest.py 

Ho ottenuto "Ran 0 test in 0.000". Ecco il codice sorgente di mytest.py

import unittest 

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

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

Ho provato con altri Unittests più complessi come bene. Ho sempre ottenuto "Ran 0 test" se lo eseguo con cProfile. Per favore aiuto.

UPDATE: Il mio sistema operativo è MacOS 10.7 con python integrato 2.7. Lo stesso codice funziona correttamente su Ubuntu.

+0

funziona per me con Ubuntu - python2.6/2.7 :) Hai provato solo con il modulo 'Profile'? –

+1

Grazie, Julien. Appena testato su Ubuntu e funziona. Sembra che sia un problema specifico della piattaforma. Non funziona su MacOS 10.7 con python integrato 2.7. –

+0

Immagino non abbiate mai trovato un modo per farlo funzionare su Mac OS X? – jgritty

risposta

8

si deve inizializzare il cProfiler nel costruttore del test, ed utilizzare i dati del profilo nel distruttore - lo uso così:

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 

Nel caso in cui un test aspetta input, è necessario chiamare self.pr.disable() prima di quella chiamata e riattivarla in seguito.

+0

Ancora non ha funzionato per me quando volevo utilizzare i client di test di flask. –

+2

FYI, la classe Stats è disponibile tramite 'from pstats import Stats' –

+0

' 'self.testtree = SplayTree (1000000)' essenziale qui? – industryworker3595112

Problemi correlati