Nosetests Python пропускают определенные тесты
Я работаю над тестами для веб-приложения, написанного на python.
Предположим, что у меня есть 5 тестов в моем модуле test_login.py.
Каждый тест - это класс.
Существует часто один базовый тест, который расширяет класс TestFlow, который является нашим предопределенным тестовым классом.
И затем другие тесты в этом модуле расширяют этот базовый тест.
Например:
#The base test
TestLogin(TestFlow):
#do login_test_stuff_here
#Another test in the same module
TestAccountDetails(TestLogin)
#do account_details_test_stuff_here
...
Это действительно удобно, потому что для проверки, например, пользователь AccountDetails должен быть зарегистрирован, поэтому я могу просто наследовать тест TestLogin, и я готов проверить другие функции как зарегистрированного пользователя.
Все тесты находятся в папке Project/project/tests.
Мы используем nosetests с опцией --with-pylons для запуска тестов.
И мой вопрос в том, есть ли способ отметить определенный TestClass как "Не проверять этот".
Потому что я не хочу тратить время на выполнение этих "базовых тестов" напрямую, потому что они будут выполняться другими тестами, которые iherit от них.
Вероятно, будут звуки этих тестов, и я хочу сохранить каждую секунду там, где это возможно.
Я уже нашел что-то вроде Skip, SkipTest или @nottest, но они работают только для test_methods внутри ceratin TestClass, поэтому я не думаю, что он будет работать здесь, если бы у меня была один класс для каждого тестового примера.
Ответы
Ответ 1
Формы nosetests можно сделать следующим образом, указав атрибуты
http://nose.readthedocs.org/en/latest/plugins/attrib.html
Часто при тестировании вы хотите выбирать тесты на основе критериев, а не просто по имени файла. Например, вы можете запустить все тесты, кроме медленных. Вы можете сделать это с помощью плагина выбора атрибутов, установив атрибуты в своих методах тестирования. Вот пример:
def test_big_download():
import urllib
# commence slowness...
test_big_download.slow = 1
Как только вы назначили атрибут slow = 1, вы можете исключить этот тест и все другие тесты, имеющие медленный атрибут, запустив
$ nosetests -a '!slow'
Ответ 2
http://nose.readthedocs.org/en/latest/writing_tests.html
Написание тестов
Как и в случае с py.test, тесты носа не должны быть подклассами unittest.TestCase. Любая функция или класс, который соответствует настроенному регулярное выражение testMatch ((?: ^ | [\ b_ \.-]) [Tt] est) по умолчанию - то есть имеет тест на границе слова или после a - или _) и живет в модуле, который также соответствует этому выражению, будет выполняться как тест. Ради совместимости с устаревшими тестовыми примерами, нос также загружает тесты из подклассов unittest.TestCase точно так же, как unittest... Как и py.test, нос выполняет функциональные тесты в порядке в котором они отображаются в файле модуля. TestCase-тесты и другие классы тестов выполняются в алфавитном порядке.
Обратите внимание на регулярное выражение и правило выше. назовите свои функции/методы/классы, чтобы они не соответствовали регулярному выражению, и они не будут запущены.
что, как говорится, я не рекомендую ваше предложение о наследовании цепочки для тестов. это рецепт разочарования и беспорядка.
вам, скорее всего, будет лучше делать класс mixin или определять базовый класс, который не имеет реальных тестов, но имеет множество вспомогательных функций, которые наследующие классы могут вызывать и использовать как свои собственные.
если вы посмотрите на тесты более популярных пакетов, они почти все используют этот подход.
Ответ 3
Вы также можете использовать skiptest для классов.
import unittest
@unittest.skip("Class disabled")
class TestLogin(TestFlow):
...