Pytest, при запуске из командной строки, пропускает некоторые из моих параметризованных тестов, даже если я не велел это делать.Как ни странно, он не пропускает тесты при запуске с использованием палитры команд в VSCode.
Я пытался запускать тесты и тестовые файлы по отдельности и настраивать параметры командной строки, но все безрезультатно.Предположительно, есть некоторая тонкость конфигурации, которую я пропускаю.Вы можете помочь?
Пример теста
@pytest.mark.parametrize(
"inputs, expec",
helpers.get_samples('inouts/kmp'),
ids=helpers.get_ids('inouts/kmp'))
def test_kmp(capsys, inputs, expec):
"""Sample test
"""
with patch('kmp.sys.stdin', inputs):
kmp.main()
captured = capsys.readouterr()
print(captured.err, file=sys.stderr)
assert captured.out == expec.getvalue()
Вспомогательные функции (поддержка параметризации)
INGLOB = '*in*'
OUTGLOB = '*out*'
def _get_globs(path):
"""Collect input/output filename pairs
"""
if not path.endswith("/"):
path = path + "/"
infiles = sorted(glob.glob(path + INGLOB))
outfiles = sorted(glob.glob(path + OUTGLOB))
assert [i.split('.')[0]
for i in infiles] == [o.split('.')[0] for o in outfiles]
return zip(infiles, outfiles)
def get_samples(path):
"""Reads sample inputs/outputs into StringIO memory buffers
"""
files = _get_globs(path)
inputs_outputs = []
for infile, outfile in files:
with open(infile, 'r') as f1:
inputs = StringIO(f1.read())
with open(outfile, 'r') as f2:
outputs = StringIO(f2.read())
inputs_outputs.append(tuple([inputs, outputs]))
return inputs_outputs
def get_ids(path):
"""Returns list of filenames as test ids
"""
return [f for f, _ in _get_globs(path)]
Запуск этого проекта в VSCode из палитры команд дает:
platform darwin -- Python 3.7.2, pytest-4.1.0, py-1.7.0, pluggy-0.8.1
rootdir: ... , inifile:
plugins: cov-2.6.1
collected 79 items
test_1.py ........................................ [ 50%]
test_2.py ................................... [ 94%]
test_3.py .... [100%]
generated xml file:
/var/folders/pn/y4jjr_t531g3x3v0s0snqzf40000gn/T/tmp-...
========================== 79 passed in 0.55 seconds ===========================
Но выполнение тех же тестов из командной строки приводит к:
=============================== test session starts ===============================
platform darwin -- Python 3.7.2, pytest-4.1.0, py-1.7.0, pluggy-0.8.1
rootdir: ... , inifile:
plugins: cov-2.6.1
collected 59 items
test_1.py ssss...................s..... [ 49%]
test_2.py s.......................ss.s [ 96%]
test_3.py s. [100%]
====================== 49 passed, 10 skipped in 0.42 seconds ======================
Как получить pytest для сбора и запуска полных 76 элементов?Я не использую никаких специальных опций в VSCode.Я не понимаю, почему pytest пропускает тесты, когда мне не говорят об этом.
Спасибо!