2017-05-29 4 views
0

Ich möchte meine googeltests in C++ parallelisieren. Ich habe die Dokumentation von google test sharding gelesen, konnte sie aber nicht in der C++ - Codierungsumgebung implementieren. Wie ich zu der kodierenden Bereich neu bin, so kann jemand bitte durch einen Code, um mir die Dokumentation in den unten stehenden Link https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.mdWie Google Sharding in C++ zu implementieren?

Google Sharding arbeitet auf verschiedenen Maschinen erklären oder auf gleiche mit mehreren Threads implementiert werden?

+0

sieht wie es gerade die Tests in N Stücke aufbricht und führt dann einen anderen chunk auf jeder Maschine auf dem Index in der Umgebung festgelegt, abhängig. Ich sehe keinen Grund, warum Sie nicht mehrere Shards auf demselben Computer mit verschiedenen Umgebungsvariablen ausführen könnten, vorausgesetzt, Ihr Code kann damit auch umgehen. Es hat nichts mit Threads zu tun, aber es läuft ein Prozess pro Shard. – xaxxon

+0

Einverstanden. Es macht nicht viel Sinn, auf der gleichen Maschine zu sharden. –

+0

@JamesPoag Das habe ich nicht gesagt. Wenn Sie viele Tests haben, kann es Zeit sparen, sie parallel laufen zu lassen, was Google-Test sonst nicht tut, soweit ich weiß. – xaxxon

Antwort

1

Das Sharding wird nicht im Code durchgeführt, sondern mit der Umgebung. Ihr Computer gibt zwei Umgebungsvariablen an: GTEST_TOTAL_SHARDS, die die Gesamtzahl der ausgeführten Computer angibt, und GTEST_SHARD_INDEX, die für jede Maschine eindeutig ist. Wenn GTEST gestartet wird, wählt es eine Teilmenge dieser Tests aus. Wenn Sie dies simulieren möchten, müssen Sie diese Umgebungsvariablen setzen (which can be done in code).

Ich würde wahrscheinlich so etwas wie dies versuchen (unter Windows) in einer BAT-Datei:

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

Und hoffen, dass die neue cmd Instanz hatte es eigene Umgebung ist.

+0

Meine Implementierung von GTEST_SHARD_INDEX in einzelnen Threads scheint nur für einen Shard zu funktionieren, nicht für die anderen. Was ist das mögliche Problem und es zeigt globalen Abbau für Test. Was ist das Problem? – GHoul

+0

Die Umgebungsvariable ist eine globale Systemvariable. Pro Benutzer Wenn Sie es setzen, starten Sie einen Thread und ändern Sie es, es gibt ein Rennen zwischen den Threads, um die Variable zu lesen. Ich bezweifle, dass Sie mehr als ein oder zwei Scherben mit Threads bekommen würden. Sie müssen die .exe in verschiedenen Umgebungen starten https://superuser.com/a/424002 –

+0

Ich habe diese Antwort bearbeitet, um möglicherweise die Umgebung mit einer neuen Instanz von cmd.exe "zu pushen". –

0

Das Ausführen der folgenden in einem Befehlsfenster funktionierte für mich (sehr ähnlich der Antwort von James Poag, aber beachten Sie die Änderung des Bereichs von "1,1,10" bis "0,1,9", "%%" -> „%“ und „set“ auf „/ A“):

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"