11

Boost Test を長い間使用していますが、テストの実行が遅すぎます。各テストは高度に並列化されているため、すべてのコアと同時に実行したいと考えています。

Boost Test Library を使用してそれを行う方法はありますか? 解決策が見つかりませんでした。カスタムテストランナーの書き方を調べようとしましたが、その点に関するドキュメントはあまりありませんでした:(

方法がない場合、誰かがその目標を達成するための優れた C++ テスト フレームワークを知っていますか? 私はGoogle Testが仕事をするだろうと思っていましたが、テストを並行して実行することもできないようです。フレームワークの機能が他のよく知られているフレームワークよりも少ない場合でも、それは問題ではありません。単純なアサーションとマルチスレッド実行が必要なだけです。

ありがとう

4

4 に答える 4

18

これにはCTestを使用できます。

CTest は CMake (ビルド システム ジェネレーター) に付属するテスト ドライバーであるため、CMake を使用して、既存のファイルとテストを使用してビルド システムを作成する必要があります。そうすることで、CTest を使用して、実行可能ファイルをテストします。

個人的には CMake で Boost.Test を使用したことはありません (GoogleTest を使用しています) が、この質問ではプロセスについてもう少し詳しく説明します。

テストを CMakeLists ファイルに追加したら、CTest の-j引数を使用して、並行して実行するジョブの数を指定できます。

于 2012-10-08T21:28:35.537 に答える
9

グーグルがgtestのドキュメントで示唆しているのは、テストシャーディングです。コマンドラインパラメーターと環境変数を使用するだけで、複数のマシンにテストを実行させることができます。GTEST_SHARD_INDEXおよびGTEST_TOTAL_SHARDS環境変数を適切に設定する、別々のプロセスの1台のマシンでそれらすべてを実行できます。

原則として、異なるフィルタリングパラメータ( Boost.testgtest)を使用してテスト実行可能ファイルの複数のプロセスを開始することを妨げるものは何もありません。

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

于 2012-10-08T21:51:30.020 に答える
2

スイートを分割して、それぞれが個別のバイナリで起動する複数の小さなセットで構成し、.PHONYターゲットテストをビルド システムに追加します。次のように実行 (make を使用していると仮定) make -jN test

于 2012-10-08T22:04:04.333 に答える
0

未解決の問題リストの 3 番目の箇条書きが現在スレッド セーフであることを考えると、Boost テストに複数のスレッドでテストを実行するように指示する方法はないと思います。

代わりに、テストの並行実行をサポートする外部テスト ランナーを見つける必要があります(これは、fork新しいプロセスをオフにすることで機能すると思います)。

于 2012-10-08T21:47:38.443 に答える