Есть ли способ параллельно выполнять тесты на тесты С++ Unit Tests?
Я использую Boost Test в течение длительного времени, и я заканчиваю тем, что мои тесты работают слишком медленно. Поскольку каждый тест является очень параллельным, я хочу, чтобы они запускались одновременно со всеми моими ядрами.
Есть ли способ сделать это с помощью тестовой библиотеки Boost? Я не нашел решения. Я попытался посмотреть, как написать пользовательский тестовый бегун, но у меня не было документации по этому вопросу: (
Если нет способа, кто-то знает хорошую С++ Test Framework для достижения этой цели? Я думал, что Google Test выполнит эту работу, но, по-видимому, она также не может запускать тест параллельно. Даже если структура имеет меньше возможностей, чем другая более известная структура, это не проблема, мне просто нужны простые утверждения и многопоточное выполнение.
Спасибо
Ответы
Ответ 1
Вы можете использовать CTest для этого.
CTest - это тестовый драйвер, который сопровождает CMake (генератор системы сборки), поэтому вам нужно будет использовать CMake для создания системы сборки с использованием существующих файлов и тестов, и при этом вы сможете использовать CTest для запуска тестовых исполняемых файлов.
Я лично не использовал Boost.Test с CMake (мы используем GoogleTest), но этот вопрос содержит более подробные сведения о процессе.
После того, как вы добавили тесты в ваш файл CMakeLists, вы можете использовать CTest -j
аргумент, чтобы указать, сколько заданий для выполняются параллельно.
Ответ 2
То, что google намекает в документации gtest, тест sharding - позволяет нескольким машинам запускать тесты, просто используя параметры командной строки и переменные среды, Вы можете запускать их на всех машинах в отдельных процессах, где вы соответствующим образом устанавливаете переменные среды GTEST_SHARD_INDEX и GTEST_TOTAL_SHARDS.
В принципе, ничто не мешает вам запускать несколько процессов тестового исполняемого файла с другим фильтрующим параметром (Boost.test, gtest)
Обновление 2014: https://github.com/google/gtest-parallel
Ответ 3
Разделите набор, состоящий из нескольких меньших наборов, каждый из которых запускается с помощью отдельного двоичного файла, и добавьте .PHONY целевой тест в ваш sysem сборки в зависимости от всех из них. Запуск (если вы используете make) make -jN test
Ответ 4
Учитывая, что третья точка маркера в открытии списка проблем в настоящее время является проблемой безопасности потоков, я не верю, что есть способ сказать тест Boost для запуска тестов в нескольких потоках.
Вместо этого вам нужно будет найти внешний тестер который поддерживает параллельное выполнение тестов (я ожидаю, что это сработает fork
от новых процессов).