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

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, поэтому я не думаю, что он будет работать здесь, если бы у меня была один класс для каждого тестового примера.

4b9b3361

Ответ 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):
    ...