Question

J'ai la disposition suivante pour ma suite de tests:

TestSuite1.cmd:

  1. Exécuter mon programme
  2. Vérifiez le résultat de votre retour
  3. Si le résultat renvoyé n'est pas 0, convertissez l'erreur en sortie textuelle et abandonnez le script. Si cela réussit, écrivez le succès.

Dans mon unique fichier .cmd, j'appelle mon programme environ 10 fois avec une entrée différente.

Le problème est que le programme que je lance 10 fois prend plusieurs heures à s'exécuter à chaque fois.

Existe-t-il un moyen de paralléliser les 10 exécutions de mon programme tout en vérifiant le résultat renvoyé et en fournissant un fichier de sortie approprié, tout en utilisant un fichier single .cmd et un seul fichier de sortie?

Était-ce utile?

La solution

En supposant qu'ils n'interféreront pas les uns avec les autres en écrivant dans les mêmes fichiers, etc.:

test1.cmd

:: intercept sub-calls.
  if "%1"=="test2" then goto :test2

:: start sub-calls.
  start test1.cmd test2 1
  start test1.cmd test2 2
  start test1.cmd test2 3

:: wait for sub-calls to complete.
:loop1
  if not exist test2_1.flg goto :loop1
:loop2
  if not exist test2_2.flg goto :loop2
:loop3
  if not exist test2_3.flg goto :loop3

:: output results sequentially
  type test2_1.out >test1.out
    del /s test2_1.out
    del /s test2_1.flg
  type test2_2.out >test1.out
    del /s test2_2.out
    del /s test2_2.flg
  type test2_3.out >test1.out
    del /s test2_3.out
    del /s test2_3.flg

  goto :eof
:test2

:: Generate one output file
  echo %1 >test2_%1.out
  ping -n 31 127.0.0.1 >nul: 2>nul:

:: generate flag file to indicate finished
  echo x >test2_%1.flg

Ceci démarrera trois processus simultanés, chacun faisant écho à son numéro de séquence, puis attendant 30 secondes.

Tous avec un fichier cmd et (éventuellement) un fichier de sortie.

Autres conseils

Vous pouvez exécuter des tâches en parallèle dans des fichiers de commandes à l'aide de 'démarrer' exécutable / commande.

Windows:

vous créez un fichier batch qui appelle essentiellement:

start TestSuite1.cmd [TestParams1]
start TestSuite1.cmd [TestParams2]

et ainsi de suite, ce qui consiste essentiellement à forger de nouvelles lignes de commande,

qui fonctionnerait si l'application peut gérer des utilisateurs simultanés (même si c'est le même utilisateur) et si votre TestSuite1.cmd est capable de gérer des paramètres.

Vous devrez démarrer le script avec différents paramètres sur différentes machines , car tout ce qui fait que le programme prend autant de temps pour une tâche (E / S, temps CPU) sera encore plus court lorsque plusieurs instances de votre programme s'exécute en même temps.

Seule exception: l'exécution est provoquée par le programme qui se met en veille.

essayez la commande démarrer , une nouvelle invite de commande apparaît et vous pouvez envoyer toutes les commandes que vous souhaitez exécuter.

J'utiliserais cela pour générer des fichiers de commandes qui exécutent les tests, puis les ajoute à un fichier output.txt à l'aide de > > en tant que tel:

testthingie.cmd >> output.txt
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top