Как запускать тесты в порядке их появления в тестовом скрипте с помощью носа?

Я хочу запускать свои тесты в том порядке, в котором они написаны, а не в алфавитном порядке, который unittest делает по умолчанию.

import unittest

class test2(unittest.TestCase):

   def test1(self):
      pass

   def test0(self):
      pass

class test1(unittest.TestCase):

   def testB(self):
      pass

   def testA(self):
      pass

В этом примере я хочу установить unittest или nosetests для запуска тестов в порядке test1, test0, testB и testA. Когда я запускаю тесты, используя командную строку с python -m unittest -v mytestmodule ИЛИ nosetests mytestmodule.

Какой аргумент командной строки я должен использовать для этого?


person Mahsa Mortazavi    schedule 06.05.2015    source источник
comment
почему ты хочешь сделать это?   -  person Alik    schedule 06.05.2015
comment
Есть некоторые тесты, которые необходимо выполнить, иначе они не будут иметь смысла, например, регистрация и вход в систему. Я хочу сначала зарегистрироваться, а затем войти с новыми зарегистрированными учетными данными. @Алик   -  person Mahsa Mortazavi    schedule 06.05.2015
comment
Плохая практика, когда один тест зависит от другого.   -  person Alik    schedule 06.05.2015
comment
Я знаю, что это происходит не во всех моих тестах. Это регрессионный тест, и мне нужно, чтобы он был быстрым. Кроме того, нет ничего плохого в том, чтобы знать, как изменить порядок тестов. @Алик   -  person Mahsa Mortazavi    schedule 06.05.2015
comment
@dbliss Я уже знаю о хороших и плохих практиках написания тестов, мой вопрос в другом, и мне нужно знать на него ответ.   -  person Mahsa Mortazavi    schedule 07.05.2015
comment
Классы — это прославленные хеш-таблицы. Как правило, у них нет заказа. Теперь вы можете подделать его, используя __prepare__() ловушка, но это очень много работы для поддержки чего-то, что не является лучшей практикой для начала... так что, насколько мне известно, unittest и друзья на самом деле не выполняют указанную работу.   -  person Kevin    schedule 07.05.2015


Ответы (2)


Такого аргумента командной строки нет. У вас есть несколько вариантов:

1) Переименуйте свои тесты. В вашем примере все, что вам нужно сделать, это поменять местами имена для test1 и test0. Это предложение было сделано ранее.

2) Используйте плагин по этой ссылке .

person dbliss    schedule 07.05.2015

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

Я провел тесты, используя py.test MyTestModule.py -vv, и результаты были следующими, и тесты запускались в порядке их появления:

MyTestModule.py::test2::test1 PASSED
MyTestModule.py::test2::test0 PASSED
MyTestModule.py::test1::testB PASSED
MyTestModule.py::test1::testA FAILED
person Mahsa Mortazavi    schedule 07.05.2015