2012-02-29 14 views

Odpowiedz

30

Przypuszczam, że na razie nie jest to możliwe: http://bugs.python.org/issue4080.

Ale można zrobić coś takiego:

import unittest 
import time 

class SomeTest(unittest.TestCase): 
    def setUp(self): 
     self.startTime = time.time() 

    def tearDown(self): 
     t = time.time() - self.startTime 
     print "%s: %.3f" % (self.id(), t) 

    def testOne(self): 
     time.sleep(1) 
     self.assertEquals(int('42'), 42) 

    def testTwo(self): 
     time.sleep(2) 
     self.assertEquals(str(42), '42') 

if __name__ == '__main__': 
    suite = unittest.TestLoader().loadTestsFromTestCase(SomeTest) 
    unittest.TextTestRunner(verbosity=0).run(suite) 

Wynik:

__main__.SomeTest.testOne: 1.001 
__main__.SomeTest.testTwo: 2.002 
---------------------------------------------------------------------- 
Ran 2 tests in 3.003s 

OK 
+0

Sądzę, że dobrze byłoby zdefiniować to w niektórych klasach bazowych, aby można było łatwo je wymieszać. –

+0

Definitelly. To tylko przykład jednej z możliwości. – horejsek

+0

@szeitlin Nie, to jest metoda: https://docs.python.org/3/library/unittest.html#unittest.TestCase.id – horejsek

5

Nose testy z pinnochio extension ma stopwatch opcję, która pozwoli Ci dać to, jeśli nos jest rozwiązaniem dla Ciebie .

Posiada również mnóstwo innych przydatnych funkcji i wtyczek, dzięki którym ładowanie jest przyjemniejsze.

5

Oto zmienność skryptu od odpowiedzi horejska. To będzie łatać django testCase tak, aby każda TestCase miała całkowity czas działania.

Możesz umieścić ten sript w pliku __init__.py pakietu root, gdzie mieszka plik settings.py. Po tym można uruchomić testy z ./mange.py testu -s

from django import test 
import time 


@classmethod 
def setUpClass(cls): 
    cls.startTime = time.time() 


@classmethod 
def tearDownClass(cls): 
    print "\n%s.%s: %.3f" % (cls.__module__, cls.__name__, time.time() - cls.startTime) 


test.TestCase.setUpClass = setUpClass 
test.TestCase.tearDownClass = tearDownClass 
2

rozwiązanie tylko z wiersza poleceń:

1/install nose (popularny alternatywny test-biegacz) i przedłużenie pinnochio

$ pip install nose pinnochio 

2/prowadzone testy z czas nagrywania (czasy są zapisywane w pliku .nose-stopwatch-times)

$ nosetests --with-stopwatch 

3/wyświetlacz testy nazwy posortowane według czasu malejąca:

$ python -c "import pickle,operator,signal; signal.signal(signal.SIGPIPE, signal.SIG_DFL); print '\n'.join(['%.03fs: %s'%(v[1],v[0]) for v in sorted(pickle.load(open('.nose-stopwatch-times','r')).items(), key=operator.itemgetter(1), reverse=True)])" | less 
+0

Nose jest passe od kilku lat. Każdy używa py.test i słusznie. –

+0

Myślę, że to wypisze 'ms', kiedy powinno wydrukować' s' –

0

Można użyć django-slowtests, który zapewnia moc tak:

$ python manage.py test 
Creating test database for alias 'default'... 
.......... 
---------------------------------------------------------------------- 
Ran 10 tests in 0.413s 

OK 
Destroying test database for alias 'default'... 

Ten slowest tests: 
0.3597s test_detail_view_with_a_future_poll (polls.tests.PollIndexDetailTests) 
0.0284s test_detail_view_with_a_past_poll (polls.tests.PollIndexDetailTests) 
0.0068s test_index_view_with_a_future_poll (polls.tests.PollViewTests) 
0.0047s test_index_view_with_a_past_poll (polls.tests.PollViewTests) 
0.0045s test_index_view_with_two_past_polls (polls.tests.PollViewTests) 
0.0041s test_index_view_with_future_poll_and_past_poll (polls.tests.PollViewTests) 
0.0036s test_index_view_with_no_polls (polls.tests.PollViewTests) 
0.0003s test_was_published_recently_with_future_poll (polls.tests.PollMethodTests) 
0.0002s test_was_published_recently_with_recent_poll (polls.tests.PollMethodTests) 
0.0002s test_was_published_recently_with_old_poll (polls.tests.PollMethodTests) 

Jeśli spojrzeć na django_slowtests/test_runner.py można również dostosować sam siebie.

Powiązane problemy