многопоточность — есть ли способ запустить тесты модульных тестов C ++ параллельно?

Я использую Boost Test в течение долгого времени, и мои тесты выполняются слишком медленно. Поскольку каждый тест очень параллельный, я хочу, чтобы он работал параллельно со всеми моими ядрами.

Есть ли способ сделать это с помощью Boost Test Library? Я не нашел никакого решения. Я пытался найти, как написать пользовательский тестовый прогон, но у меня не было много документации по этому вопросу 🙁

Если нет пути, знает ли кто-нибудь хороший C ++ Test Framework для достижения этой цели? Я думал, что Google Test выполнит эту работу, но, по-видимому, он также не может запустить тест параллельно. Даже если у фреймворка меньше возможностей, чем у других более известных фреймворков, это не проблема, мне просто нужны простые утверждения и многопоточное выполнение.

Спасибо

11

Решение

Вы могли бы использовать CTest за это.

CTest — это тестовый драйвер, который сопровождает CMake (генератор системы сборки), поэтому вам нужно будет использовать CMake для создания системы сборки, используя ваши существующие файлы и тесты, и при этом вы сможете использовать CTest для запуска тестовые исполняемые файлы

Я лично не использовал Boost.Test с CMake (мы используем GoogleTest), но этот вопрос подробнее рассмотрим процесс.

Как только вы добавите тесты в файл CMakeLists, вы можете использовать CTest-х -j аргумент указать, сколько заданий запускать параллельно.

15

Другие решения

На что намекает гугл в документации gtest тестирование — позволить нескольким машинам запускать тесты, просто используя параметры командной строки и переменные среды. Вы можете запустить их все на одном компьютере в отдельных процессах, где вы соответственно установите переменные среды GTEST_SHARD_INDEX и GTEST_TOTAL_SHARDS.

В принципе, ничто не мешает запускать несколько процессов исполняемого файла теста с другим параметром фильтрации (Boost.Test, GTEST)

Обновление 2014: https://github.com/google/gtest-parallel

9

Разделите пакет на несколько меньших наборов, каждый из которых запускается с отдельным двоичным файлом, и добавьте .фальшивый цель тестовое задание к вашей сборке системы в зависимости от всех из них. Запустите как (при условии, что вы используете make) сделать -jN тест

2

Учитывая, что третья точка пули на список открытых вопросов в настоящее время потокобезопасен, я не верю, что есть способ заставить Boost test запускать тесты в нескольких потоках.

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

0