сопоставление шаблонов регулярных выражений командной строки фреймворка носа не работает (-e, -m, -i)

Платформа python Nosetest имеет некоторые параметры командной строки для включения, исключения и сопоставления регулярных выражений для тестов, которые можно включать/исключать и сопоставлять соответственно.

Однако они, похоже, работают неправильно.

[kiran@my_redhat test]$ nosetests -w cases/ -s -v  -m='_size'
----------------------------------------------------------------------
Ran 0 tests in 0.001s
OK
[kiran@my_redhat test]$ grep '_size' cases/test_case_4.py
    def test_fn_size_sha(self):

что-то не так с регулярным выражением, соответствующим семантике носового фреймворка?


person kbang    schedule 05.08.2013    source источник


Ответы (4)


Аргумент -m Nosetests используется для сопоставления каталогов, имен файлов, классов и функций. (см. объяснение этого параметра в документации по носу) В вашем случае , имя файла вашего тестового файла (test_case_4.py) не соответствует выражению соответствия -m (_size), поэтому он никогда не открывается.

Вы можете заметить, что если вы принудительно откроете тестовый файл, он выполнит только указанный тест:

nosetests -sv -m='_size' cases/test_case_4.py

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

person dbn    schedule 22.08.2013
comment
Привет @dbw, спасибо за ответ. Однако я попробовал это, и вот что я нашел [k@e test]$ grep '_size' cases/test_case_04_inv_validation.py def test_fn_size_sha(self): [k@e test]$ nosetests -sv -m='_size' cases/test_case_04_inv_validation.py Ran 0 tests in 0.000s OK - person kbang; 23.08.2013
comment
Является ли test_fn_size_sha() классом TestCase? Если да, то этот класс подчиняется тем же правилам соответствия, поэтому он будет отклонен, если он не соответствует выражению -m. - person dbn; 23.08.2013

Попробуйте удалить '=' при указании регулярного выражения:

$ nosetests -w cases/ -s -v -m '_size'

или оставьте '=' и укажите --match:

$ nosetests -w cases/ -s -v --match='_size'
person egor    schedule 22.03.2016

Нос, вероятно, использует Python re.match или что-то подобное, что требует совпадения в начале строки. _size не соответствует, потому что имя функции test_fn_size_sha не начинается с регулярного выражения _size.

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

nosetests -w cases/ -s -v -m='\w+_size'
person voithos    schedule 05.08.2013
comment
хммм.. это хорошая мысль @voithos. однако [kiran@my_redhat test]$ Nousetests -w case/ -s -v -m='\w+_size' Выполнить 0 тестов за 0,001 с OK [kiran@my_redhat test]$ Nousetests -w case/ -s -v - m='_size' Запустил 0 тестов за 0,001 с OK [kiran@my_redhat test]$ grep _size case/test_case_size.py def _size_sha(self): ` - person kbang; 05.08.2013
comment
@KiranBangalore: А как насчет .*_size? - person voithos; 05.08.2013
comment
не повезло... [kiran@my_redhat test]$ Nosetests -w case/ -s -v -m='.*_size' Выполнить 0 тестов за 0,001 с - person kbang; 05.08.2013
comment
@KiranBangalore: Является ли ваш каталог cases пакетом Python? (содержит ли он файл __init__.py?) - person voithos; 05.08.2013
comment
и это меня немного шокирует... [kiran@my_redhat test]$ Nosetests -w case/ -s -v -m='test_fn_size_sha' Выполнил 0 тестов за 0,001 с ОК - person kbang; 05.08.2013
comment
@KiranBangalore: он тебе нужен. Ваш каталог тестов должен быть импортируемым — создайте пустой файл __init__.py. - person voithos; 05.08.2013
comment
просто добавил файл . все еще не повезло - person kbang; 05.08.2013
comment
@KiranBangalore: Что происходит, когда вы удаляете флаг -m? - person voithos; 05.08.2013
comment
срабатывает критерий соответствия по умолчанию... Default: (?:^|[\b_\./-])[Tt]est - person kbang; 05.08.2013
comment
@KiranBangalore: И он может найти тесты? - person voithos; 05.08.2013
comment
давайте продолжим это обсуждение в чате - person kbang; 05.08.2013
comment
Это не правильное объяснение проблемы. Смотрите мой ответ о том, какой нос соответствует выражению соответствия. - person dbn; 23.08.2013

Это работает для меня.

nosetests --collect-only test_mytest\test_category --exclude=test_.*Pin

Здесь я исключил все тесты, в названии которых есть слово "Pin".

Примечание. В моем случае все имена тестовых случаев начинаются с test_.

person Arindam Roychowdhury    schedule 10.05.2019