pytest - повторить неудачный тест после всех других тестов - PullRequest
0 голосов
/ 12 октября 2018

В моем сценарии у меня есть один тест, который записывает файл, и один (но, возможно, еще много) тестов, которые захотят прочитать этот файл.Я не могу просто извлечь запись этого файла в функцию / фикстуру, потому что она включает в себя некоторые другие фикстуры, которые внутри запускают какой-то другой двоичный файл и тот двоичный файл, который записывает этот файл.Итак, у меня есть прибор, который проверяет, есть ли файл там.

Что я пробовал до сих пор:

  • flaky и pytest-rerunfailures плагины - не подходит, так как они оба перезапускают тест сразу после сбоя (когда файл все еще отсутствует), и я хочу добавить его в конец очереди теста.
  • изменение теста вручнуюочередь, как это:

...

request.session.items.append(request.node)
pytest.xfail("file not present yet")

такого рода работы, но только когда я бегу на одном бегуне (без xdist иливключив его, передав -n0 cli arg, в моем отчете о тестировании я вижу что-то вроде этого:

test_load_file_before_save xfail
test_save_file PASSED        
test_load_file PASSED        
test_load_file_before_save PASSED    

при запуске с xdist тест xfailed не повторяется. Кто-нибудь знает, как продолжить?Какой-нибудь способ заставить xdist обновить список тестов?

1 Ответ

0 голосов
/ 19 октября 2018

Вы можете использовать pytest.cache, чтобы получить статус запуска теста и добавить этот тест в очередь в случае сбоя.

if request.config.cache.get(request.node):
    request.session.items.append(request.node)
    pytest.xfail("file not present yet")

Вы также можете установить пользовательские значения в кэше Pytest, которые будут использоваться при разных запусках, с помощью request.config.cache.set(data,val).

Если вы пишете файл, который находится в тестовой директории, вы можете использовать --looponfail параметр pytest-xdist.Он просматривает каталог и перезапускает тест до тех пор, пока тесты не пройдут.Из документации: distributed and subprocess testing: -f, --looponfail run tests in subprocess, wait for modified files and re-run failing test set until all pass.

Ссылки, которые могут быть полезны: Pytest-кеш

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

...