в моей команде мы разрабатываем библиотеку, которая координирует несколько приложений через какой-то сетевой сервер. Сборка обрабатывается CMake 3.10.4, и мы запускаем наши тесты с CTest. В настоящее время мы поддерживаем только Linux, но поддержка Windows и MacOS не за горами.
Мы также предоставляем примеры приложений, которые мы настраиваем и создаем в качестве тестов в CTests.
Как мы можем:
- запустить 2 примера программ с CTest в качестве одного теста параллельно?
- сохранить реализацию как можно независимой от системы?
- захватывает оба
STDOUT
по отдельности (чередование тоже хорошо)?
Что мы пробовали
Мы создали скрипт CMake, который вызывается CTest. Он выполняет следующее, используя execute_process :
# DUMMY_A, DUMMY_B are the dummy application
execute_process(
COMMAND ${DUMMY_A} ${DUMMY_CONFIG} SolverOne MeshOne
COMMAND ${DUMMY_B} ${DUMMY_CONFIG} SolverTwo MeshTwo
WORKING_DIRECTORY ${DUMMY_RUN_DIR}
RESULTS_VARIABLE DUMMY_RESULTS
)
Это не работает надежно, поскольку DUMMY_B
может вернуться до DUMMY_A
. В этом случае DUMMY_A
все еще записывает в STDOUT
, что приводит к SIGPIPE
(сломанной трубе) и, следовательно, к неудачному тесту.
Дальнейшие варианты, которые мы рассмотрели:
- Использование сценария оболочки для параллельного запуска обеих программ, который зависит от системы.
- Использование сценария python для запуска одной программы в качестве подпроцесса, что очевидно требует python.
- Разрешить тесты с ошибкой с
SIGPIPE
, который мы можем проверить с помощью RESULTS_VARIABLE
. Это может скрыть реальные неудачные тесты.