web-dev-qa-db-fra.com

Exécution de plusieurs tests Selenium en même temps

Je voudrais exécuter plusieurs tests Selenium (sur un serveur Jenkins) en même temps.

Il n'exécute actuellement qu'un seul test à la fois car ChromeDriver semble communiquer sur un port spécial. Donc, je suppose que je dois passer une sorte de paramètres de port via Selenium au ChromeDriver pour démarrer plusieurs tests.

Le site Web de Selenium est malheureusement vide pour ce sujet: http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#parallelizing-your-test-runs

De mon point de vue, cela ne fait aucune différence si le test s'exécute localement ou sur Jenkins, le problème est le même. Nous devons en quelque sorte configurer ChromeDriver. La question est de savoir comment.

Quelqu'un a-t-il des idées ou des pointeurs à consulter et quels fichiers sont impliqués pour y parvenir?

20
seba.wagner

Ce que vous recherchez est Grille de sélénium 2 .

Grid vous permet de:

  • mise à l'échelle en distribuant des tests sur plusieurs machines (exécution parallèle)
  • gérer plusieurs environnements à partir d'un point central, ce qui facilite l'exécution des tests avec une vaste combinaison de navigateurs/OS.
  • minimisez le temps de maintenance de la grille en vous permettant d'implémenter des hooks personnalisés pour tirer parti de l'infrastructure virtuelle par exemple.
5
Amey

Vous pouvez exécuter plusieurs instances de chromedriver localement assez facilement, il suffit d'instancier plusieurs objets de pilote, chromedriver gardera les profils séparés et trouvera un port sur lequel s'exécuter tout seul.

Voici un lien vers un exemple qui peut exécuter plusieurs tests à l'aide de TestNG et Maven:

https://github.com/Ardesco/Selenium-Maven-Template

Il vous suffit de cloner le projet ci-dessus et d'exécuter ce qui suit dans la ligne de commande:

mvn verify -Pselenium-tests -Dbrowser=chrome -Dthreads=2

Il tire parti de la capacité de TestNG à gérer le pool de threads et ouvrira plusieurs instances si spécifié. Vous pouvez faire la même chose avec jUnit mais vous devrez écrire un lanceur de test personnalisé pour lancer les tests dans des threads individuels.

Si vous décidez d'utiliser gradle, il peut gérer la gestion des pools de threads pour vous avec TestNG et jUnit et beaucoup de gens le préfèrent à maven.

18
Ardesco

C'est une vieille question, mais pour quiconque continue de lire, il est très possible d'exécuter plusieurs instances de Selenium WebDriver en parallèle sans en utilisant Grid. J'ai testé cela avec succès en utilisant Chrome, FireFox et PhantomJs (jusqu'à 5). Chaque instance de WebDriver utilise un contexte isolé, donc le conflit de session ne devrait pas être un problème. Attention cependant aux conflits côté serveur, selon les exigences de votre site!

Pour les utilisateurs de NUnit, NUnit 3.2.1 possède désormais une propriété "TestContext.Current.WorkerId" qui vous permettra d'isoler une instance WebDriver par travailleur NUnit.

  • L'exécution de plusieurs navigateurs sur la même machine nuira souvent aux performances, alors faites attention à ne pas utiliser trop d'instances de navigateurs, sinon vous risquez d'augmenter votre temps de test!
8
Null511

J'accepte d'utiliser la grille en combinaison avec la classe parallélisée Maven, vous pouvez exécuter plusieurs instances sur un PC. Jenkins est possible lorsque vous utilisez Ant pour votre build, alors vous pouvez spécifier quel test peut être exécuté en parallèle. C'est assez facile à configurer cependant;)

2
buddy