Подтвердить что ты не робот

Есть ли способ параллельно выполнять тесты на тесты С++ Unit Tests?

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

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

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

Спасибо

4b9b3361

Ответ 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 от новых процессов).