2012-09-06 59 views
12

我現在正在使用Boost Test很長一段時間,最後我的測試運行得太慢了。由於每個測試都非常平行,我希望它們能夠與我的所有內核同時運行。有沒有辦法同時運行C++單元測試測試?

有沒有辦法使用Boost Test Library來做到這一點?我沒有找到任何解決方案。我試圖尋找一個如何編寫自定義測試亞軍,但我沒有太多的文檔關於該點:(

如果沒有辦法,有人知道一個好的C++測試框架來實現這一目標嗎?我在想Google Test可以完成這項工作,但顯然它不能並行地運行測試,即使框架的功能比其他更爲人所知的框架要少,但這不是問題,我只需要簡單的斷言和多線程執行。

感謝

回答

14

您可以使用CTest這一點。

CTEST是隨CMake(構建系統生成器)一起提供的測試驅動程序,因此您需要使用CMake使用現有文件和測試來創建構建系統,並且這樣做後,您將能夠使用CTest來運行測試可執行文件。

我還沒有親自使用Boost.Test和CMake(我們使用GoogleTest),但this question進入了一個更詳細的過程。

一旦您在CMakeLists文件中添加了測試,您可以使用CTest's -j argument來指定並行運行多少個作業。

+0

這真棒:)即使它有點混亂,我必須對cmake文件進行一些更改,它的工作原理!非常感謝 –

0

鑑於open issues list上的第三個要點目前是線程安全的,我不相信有一種方法可以告訴Boost測試在多線程中運行測試。相反,你需要找到一個支持並行運行測試的external test runner(我希望這可以通過fork工作)。

9

谷歌在gtest文檔中暗示的是test sharding--讓多臺機器僅通過使用命令行參數和環境變量即可運行測試。您可以在分離的進程中的一臺機器上運行它們,並在其中正確設置GTEST_SHARD_INDEX和GTEST_TOTAL_SHARDS環境變量。

原則上,沒有什麼阻止您啓動測試可執行的多個進程使用不同的過濾參數(Boost.testgtest

更新2014:https://github.com/google/gtest-parallel

3

拆分的套件,由多個較小的集每個都使用單獨的二進制啓動,並將.PHONY目標測試添加到您的構建系統,具體取決於它們。運行(假設您正在使用make)make -jN test

+0

這是一個好主意,但問題是我必須創建儘可能多的可執行測試,因爲我有測試,我更喜歡更自動化的東西。 –

+1

@BaptisteWicht - 你可以有一個啓動器將測試名稱作爲命令行參數(就像Boost.Test一樣) – bobah

相關問題