2017-02-07 7 views
3

В настоящее время я использую pytest для автоматизации набора тестов. У меня есть тесты распространяется на несколько каталогов, как показано ниже:pytest: при использовании опции ключевого слова (-k) строка стиля каталога не обрабатывается

|-Root 
| |-Dir1 
| | |-Test1 
| | |-Test2 
| | |-Test3 
| |-Dir2 
| | |-Testa 
| | |-Testb 
| | |-Testc 
| |-Dir3 
| | |-TestI 
| | |-TestII 
| | |-TestIII 

Я хотел бы иметь возможность запускать тесты в наборе каталогов, исключая других. Некоторые из каталогов имеют похожие имена, такие как «test_set_1» и «test_set_1_extended». Я хотел бы исключить «test_set_1», но сохранить «test_set_1_extended», поэтому мне нужно будет использовать полный путь в качестве ключевого слова. Я заметил при использовании ключевых слов (опция -k), что pytest не обрабатывает строки структуры каталога в качестве аргумента хорошо. Например, если я пытаюсь окно стиля

py.test -k "not (root\dir1 or dir2)" 

Я получаю ошибку синтаксиса:

SyntaxError: неожиданный символ после продолжения строки

С другой стороны, если я пытаюсь Unix стиля

py.test -k "not (root/dir1 or dir2)" 

Я получаю ZeroDivisionError:

ZeroDivisionError: i nteger деление по модулю или нуль

Вещи, которые я пробовал включать: вшита строка каталога в одинарных или двойных кавычках:

py.test -k "not ('root/dir1' or dir2)" 
py.test -k "not ("root/dir1' or dir2)" 

Использования отдельного '-k на':

py.test -k "not root/dir1" -k not dir2) 

Использование текущий каталог '.'

py.test -k "not (./root/dir1 or dir2)" 

Экранирование косой черты:

py.test -k "not (root\\dir1 or dir2)" 
py.test -k "not (root\/dir1 or dir2)" 

Ни один из них не решил проблему. Есть ли у кого-нибудь предложения о том, как заставить pytest правильно обрабатывать строку пути?

ответ

0

Я работаю с очень похожими настройками, и я смог воспроизвести описанное вами поведение (pytest 3.4.0, python 3.6.4).

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

Поэтому py.test -k "not (root/dir1 or dir2)" становится py.test -k "not ((root and dir1) or dir2)". Если у вас больше нет dir1 элементов пути под root/dir1, оба выражения должны быть эквивалентными.

Поскольку поведение выражений, включая /, кажется несколько несогласованным (py.test -k root/dir1 работает должным образом), может возникнуть смысл записать ошибку.

0

Почему бы не сэкономить обходных путей и просто использовать уникальные маркеры для различных тестовых групп, а также использовать

py.test -m "not extended" 

Этот путь имена тест/каталог/модуль может изменить и ничего не ломается.

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