Подтвердить что ты не робот

Изменение порядка модульных тестов в Python

Как я могу это сделать, чтобы модульные тесты в Python (используя unittest) выполнялись в том порядке, в котором они указаны в файле?

4b9b3361

Ответ 1

Вы можете изменить поведение сортировки по умолчанию, установив пользовательскую функцию сравнения. В unittest.py вы можете найти переменную класса unittest.TestLoader.sortTestMethodsUsing, которая по умолчанию установлена ​​на встроенную функцию cmp.

Например, вы можете вернуть порядок выполнения своих тестов, выполнив следующие действия:

import unittest
unittest.TestLoader.sortTestMethodsUsing = lambda _, x, y: cmp(y, x)

Ответ 2

Умное именование.

class Test01_Run_Me_First( unittest.TestCase ):
    def test010_do_this( self ):
        assertTrue( True )
    def test020_do_that( self ):
        etc.

Один из способов принудительного выполнения определенного порядка.

Ответ 3

Как сказано выше, обычно тесты в тестовых случаях должны тестироваться в любом (то есть случайном) порядке.

Однако, если вы хотите заказать тесты в тестовом примере, по-видимому, это не тривиально. Тесты (имена методов) извлекаются из тестовых примеров с помощью dir(MyTest), который возвращает отсортированный список участников. Вы можете использовать умные (?) Взломы, чтобы упорядочить методы по их номерам строк. Это будет работать для одного тестового примера:

if __name__ == "__main__":
    loader = unittest.TestLoader()
    ln = lambda f: getattr(MyTestCase, f).im_func.func_code.co_firstlineno
    lncmp = lambda a, b: cmp(ln(a), ln(b))
    loader.sortTestMethodsUsing = lncmp
    unittest.main(testLoader=loader, verbosity=2)

Ответ 4

Есть также тестовые ролики, которые делают это сами - я думаю, py.test делает это.

Ответ 5

Использовать proboscis библиотеку, как я уже упоминал (см. краткую описание там).

Ответ 6

Я нашел решение для него с помощью плагина заказа PyTest, предоставленного здесь.

Попробуйте py.test YourModuleName.py -vv в CLI, и тест будет работать в том порядке, в котором они появились в вашем модуле.

Я сделал то же самое и отлично работал у меня.

Примечание. Вам необходимо установить пакет PyTest и импортировать его.