2017-05-29 1 views
0

Je veux paralléliser mes cas de googletest en C++. J'ai lu la documentation de google test sharding mais je n'arrive pas à l'implémenter dans un environnement de codage C++. Comme je suis nouveau dans le domaine de codage, si quelqu'un peut s'il vous plaît par un code me expliquer la documentation dans le lien ci-dessous https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.mdComment implémenter google test sharding en C++?

Google Sharding fonctionne sur des machines différentes ou peuvent être mis en œuvre sur la même en utilisant plusieurs threads?

+0

ressemble juste brise les essais en N morceaux, puis exécute un morceau différent sur chaque machine en fonction de l'index spécifié dans l'environnement. Je ne vois aucune raison pour laquelle vous ne pouvez pas exécuter plusieurs fragments sur la même machine avec des variables d'environnement différentes, en supposant que votre code peut également gérer cela. Cela n'a rien à voir avec les threads, mais il exécute un processus par partition. – xaxxon

+0

D'accord. Cela n'a pas beaucoup de sens de taper sur la même machine. –

+0

@JamesPoag Je n'ai pas dit ça. Si vous avez beaucoup de tests, vous pouvez gagner du temps en les exécutant en parallèle, ce que google test ne fait pas autrement, pour autant que je sache. – xaxxon

Répondre

1

Le sharding n'est pas fait dans le code, c'est fait en utilisant l'environnement. Votre machine spécifie deux variables d'environnement GTEST_TOTAL_SHARDS, soit le nombre total de machines que vous exécutez et GTEST_SHARD_INDEX, qui est propre à chaque machine. Lorsque GTEST démarre, il sélectionne un sous-ensemble de ces tests.

Si vous souhaitez simuler ceci, vous devez définir ces variables d'environnement (which can be done in code).

je ne serais probablement essayer quelque chose comme ça (sous Windows) dans un fichier .bat:

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

et nous espérons que la nouvelle instance cmd avait son propre environnement.

+0

mon implémentation de la définition de GTEST_SHARD_INDEX dans des threads individuels ne semble fonctionner que pour un seul fragment et pas pour les autres. Quel est le problème possible et il montre global déchirer pour le test. Quel est le problème? – GHoul

+0

La variable d'environnement est une variable système globale. Par utilisateur Lorsque vous le définissez, lancez un thread et changez-le, il y a une course entre les threads pour lire la variable. Je doute que vous obteniez plus d'un ou deux fragments en utilisant des fils. Vous devez lancer le fichier .exe dans différents environnements https://superuser.com/a/424002 –

+0

J'ai modifié cette réponse pour éventuellement "pousser" l'environnement avec une nouvelle instance de cmd.exe. –

0

Exécution de ce qui suit dans une fenêtre de commande a travaillé pour moi (très similaire à la réponse de James Poag, mais notez le changement de gamme de "1,1,10" à "0,1,9", "%%" -> « % » et « set » pour « set/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"