2013-04-15 16 views
5

Я создал свою группу тестов Python, используя формат Python unittest.Как сортировать тесты проверки python unittest?

Теперь я могу запускать их с

python -m unittest discover -s TestDirectory -p '*.py' -v 

Я находит их всех, и управляет ими.

Теперь есть тонкая разница, выполняю ли я тесты в Windows или Linux. Действительно, в Windows тесты выполняются в алфавитном порядке, тогда как в Linux тесты выполняются без видимого определенного для человека порядка обнаружения, даже если они всегда одинаковы.

Проблема в том, что я опирался на первые две буквы тестового файла для сортировки порядка выполнения тестов. Не то, чтобы их нужно запускать в определенном порядке, но иметь какие-то информационные тесты, показывая данные о версии на своем выходе, чтобы они отображались сначала в журнале тестового запуска.

Есть ли что-то, что я могу сделать, чтобы запустить тесты также в алфавитном порядке на Linux?

+0

Вы пытаетесь использовать носеты? я удивляюсь, что запущенные носеты напрямую будут иметь значение. Я не использую обнаружение от unittest, потому что носеты могут делать это довольно хорошо. ты это пробовал? – CppLearner

+0

Просто попробовал. Похоже, тесты сортируются по Linux. Благодарю. Но я бы хотел не заставлять разработчиков устанавливать нос, а просто использовать простой python со встроенным 'unittest'. –

+0

Когда я запускаю это для своих модульных тестов в Linux, он сортирует их в следующем порядке: сначала по имени файла или каталога, подчиненному по имени класса, подчиненному именем test (method). Дело в том, что при запуске тестов сначала отображаются тестер * имена *, который является только последним подзаголовком и не отображается с каким-либо логическим порядком. Я просто хочу проверить, что ваш кажущийся не-упорядочение на самом деле является указанным выше методом file/directory-class-method? – Evert

ответ

0

Я не пробовал это, но я полагаю, что одна вещь, которую вы могли бы сделать, это переопределить класс TestSuite, чтобы добавить функцию сортировки. Затем вы можете вызвать функцию сортировки перед вызовом функции запуска unittest. Итак, в сценарии «AllTests.py» вы можете добавить что-то вроде этого:

class SortableSuite(unittest.TestSuite): 
    def sort(self): 
     self._tests.sort(cmp=lambda x,y: x._testMethodName < y._testMethodName) 
    def run(self,testResult): 
     #or if you don't want to run a sort() function, you can override the run 
     #function to automatically sort. 
     self._tests.sort(cmp=lambda x,y: x._testMethodName < y._testMethodName) 
     return unittest.TestSuite.run(self,testResult) 

loader = unittest.TestLoader() 
loader.suiteClass = SortableSuite 
suite = loader.loadTestFromTestCases(collectedTests) 
suite.sort() 
suite.run(defaultTestResult()) 

 Смежные вопросы

  • Нет связанных вопросов^_^