Укажите порядок выполнения в тесте Python Nose - PullRequest
0 голосов
/ 19 марта 2019

Мои тестовые случаи независимы , и требование к порядку выполнения немного сложнее.Рассмотрим 4 тестовых случая (отдельные файлы), тесты A, B, C и D

Выполнение:

TEST_DIRECTORIES=(
 ${SCRIPT_PATH}'/tests/dir1/'
 ${SCRIPT_PATH}'/tests/dir2/'
 ...
)
nosetests  --debug-log=nose.log --debug=nose,nose.result  --processes=`getconf _NPROCESSORS_ONLN` --process-timeout=600 --process-restartworker -s --logging-level=INFO --no-byte-compile --nologcapture  ${TEST_DIRECTORIES[*]}

Выпуск:

Тест A -> Нет проблем
Тест B -> Нет проблем
Тест C -> Многопроцессный метод запуска должен быть 'spawn', выдает ошибку для контекста по умолчанию 'fork'
Тест D-> Нет проблем

Примечание:
a.Если я изменю метод запуска в Тесте C на spawn, Тесты будут выполняться в хорошем темпе, пока он не встретит Тест C, он может быть случайным, и как только это произойдет, все тесты будут замедлены.
б.Также, когда я говорю Test A, B, D для запуска в режиме форка и Test C для запуска в режиме появления, иногда происходит сбой, так как тесты запускаются в случайном порядке и возможен тест C, имеющий метод 'fork', и, следовательно, он терпит неудачу,

Возможные решения:
1. Если я изменяю свой метод запуска по умолчанию для spawn, он работает!но ценой времени, необходимого для порождения нового процесса вместо форка.Неоптимальное решение, так как разница во времени значительна
2. Выполнение тестов A, B, D и C в качестве отдельных тестов на нос.Однако в этом сценарии, поскольку я использую покрытие, как добавить результаты покрытия теста C в покрытия тестов A, B, D?В идеале все тесты должны быть запущены в одной команде.
3. Укажите порядок, такой, чтобы Тесты A, B, D выполнялись в режиме форка, а позже Тест C выполнялся в режиме «появления».Я искал документацию по Test Suite, но один из основных принципов - это обнаружение тестов и автоматическое выполнение, которое позволяет избежать наборов.

Как решить вышеуказанную проблему, не тратя много времени и совместимостипроблемы с многопроцессорным контекстом по умолчанию? (Приведенные тесты являются примером, это гораздо большая проблема, более 1000 тестов, следовательно, эффективность имеет первостепенное значение)

...