2013-07-10 3 views
12

Я использую pytest. У меня есть два файла в каталоге. В одном из файлов есть длинный тестовый сценарий, который генерирует некоторый вывод. В другом файле есть тестовый пример, который считывает этот вывод. Как я могу обеспечить правильный порядок выполнения двух тестовых случаев? Есть ли какая-либо альтернатива, кроме как поставить тестовые примеры в один и тот же файл в правильном порядке?Порядок выполнения тестового примера в pytest

+3

В общем, неплохо, что тестовые случаи зависят друг от друга. Если вам нужно использовать одни и те же данные в двух тестовых примерах, почему бы не добавить их в раздел 'setup'? – Brad

+0

Я знаю. Мне это тоже не нравится, но сейчас мне это нужно. – Kocka

+1

Я не хочу добавлять его в раздел настроек, потому что он занимает около 15-20 минут. – Kocka

ответ

7

В целом вы можете настроить поведение в основном любой части pytest, используя ее well-specified hooks.

В вашем случае вам нужен крючок «pytest_collection_modifyitems», который позволяет вам повторно заказать собранные тесты на месте.

Это говорит о том, что упорядочить ваши тесты должно быть проще - это все-таки Python! Поэтому я написал плагин для заказа тестов. Проверьте docs или установите его с pypi. Сейчас я рекомендую использовать @ pytest.mark.first и @ pytest.mark.second, или один из маркеров @ pytest.mark.order #, но у меня есть некоторые идеи о более полезных API. Предложения приветствуются :)

+0

Эй. Спасибо, что создали этот плагин. Можете ли вы изменить его так, чтобы он просто извлекал конечные цифры в качестве порядка. Например, если я говорю @ pytest.mark.custom1, то 1 должен быть порядком. Это очень поможет! –

+0

Я могу попробовать. Я думаю, что v0.2 имеет такое поведение с маркером «порядок», а не с произвольными маркерами. Не могли бы вы написать это как запрос функции на странице github pytest-ordering? https://github.com/ftobia/pytest-ordering –

+0

Ссылка на крючки должна идти по адресу: http://pytest.org/latest/writing_plugins.html#well-specified-hooks –

1

Может быть, вы можете рассмотреть возможность использования dependency pytest плагина, где вы можете установить зависимости между тестами легко:

@pytest.mark.dependency() 
def test_long(): 
    pass 

@pytest.mark.dependency(depends=['test_long']) 
def test_short(): 
    pass 

Этим путем test_short будет выполняться, только если test_long успех и силы последовательностью выполнения также.

+0

Выше не работает для меня для последовательности упорядочения. Например, если вы перевернули заказ. Т.е. давно зависит от короткого. В этом случае длинный пропущен. – peaxol

3

Существует также плагин pytest-ordering, который, как представляется, соответствует вашим требованиям.

+0

Ответ Фрэнка Т. уже упоминает этот плагин и был опубликован за 3 года до этого ответа. – Ave

+0

Ух, но он не упомянул имя. вот почему я, возможно, полностью пропустил этот момент. –

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