2017-05-29 12 views
0

私のgoogletestケースをC++で並列化したいのですが。 私はGoogleテストシャーディングのドキュメントを読みましたが、C++コーディング環境で実装することはできません。私は、コードフィールドに新たなんだ、そう、誰もがコードによって https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.mdC++でGoogleテストシャーディングを実装する方法は?

Googleのシャーディング下記のリンクで私にドキュメントを説明してくださいすることができたよう は異なるマシン上で動作しますか複数のスレッドを使用して、同じに実装することができますか?

+0

が見えます。私はあなたのコードがそれに対処することができると仮定して、異なる環境変数を持つ同じマシン上で複数の断片を走らせることができない理由は見当たりません。スレッドとは関係ありませんが、シャードごとにプロセスが実行されます。 – xaxxon

+0

合意。同じマシンでシャードするのはあまり意味がありません。 –

+0

@JamesPoag私はそれを言わなかった。テストがたくさんある場合は、それを並行して実行する時間を節約することができます。これは、私が知る限り、Googleテストでは他にはありません。 – xaxxon

答えて

1

シャーディングはコードで行われていないため、環境を使用して行われます。あなたのマシンには、実行中のマシンの総数である2つの環境変数GTEST_TOTAL_SHARDSと、各マシンに固有のGTEST_SHARD_INDEXという2つの環境変数が指定されています。 GTESTが起動すると、これらのテストのサブセットが選択されます。

これをシミュレートする場合は、これらの環境変数(which can be done in code)を設定する必要があります。

私はおそらくの.batファイル(Windowsの場合)このような何かをしようとするだろう:

set GTEST_TOTAL_SHARDS=10 
FOR /L %%I in (1,1,10) DO cmd.exe /c "set GTEST_SHARD_INDEX=%%I && start mytest.exe" 

そして新しいCMDインスタンスはそれ自身の環境を持っていたことを願っています。

+0

個々のスレッドでGTEST_SHARD_INDEXを設定する私の実装は、他のスレッドだけではなく、1つのシャードでしか機能していないようです。可能な問題は何か、それはテストのために全世界のティアダウンを示します。問題は何ですか? – GHoul

+0

環境変数はグローバルシステム変数です。ユーザーあたり。あなたがそれを設定し、スレッドをキックオフしてそれを変更すると、変数を読み込むスレッド間に競争があります。私はあなたが糸を使って1つ以上の破片を得ることは疑う。さまざまな環境で.exeを起動する必要があります。https://superuser.com/a/424002 –

+0

この回答を編集して、環境をcmd.exeの新しいインスタンスで「プッシュ」する可能性があります。 –

0

コマンドウィンドウで次のコマンドを実行すると、James Poagの答えとよく似ていますが、 "1,1,10"から "0,1,9"、 "%%" - > 「%」と「/ Aを設定」するために「設定」):それはちょうどNの塊にテストを分割して、環境内の指定したインデックスに応じて、各マシン上の別のチャンクが実行されますよう

set GTEST_TOTAL_SHARDS=10 
FOR /L %I in (0,1,9) DO cmd.exe /c "set /A GTEST_SHARD_INDEX=%I && start mytests.exe" 
関連する問題