2011-08-01 6 views
3

ceci est à partir de la grille de sélénium. Comment écrire du code java/C# pour faire une exécution parallèle.grille de sélénium exécution parallèle

Est-ce suffisant?

ISelenium selenium1 = new DefaultSelenium("localhost", 5555, "*iehta", "http://localhost/"); 
ISelenium selenium2 = new DefaultSelenium("localhost", 5556, "*iehta", "http://localhost/"); 
ISelenium selenium4 = new DefaultSelenium("localhost", 5557, "*iehta", "http://localhost/"); 


selenium1.Start(); 
selenium2.Start(); 
selenium3.Start(); 

Parce que quand je lance http://localhost:4444/console il y a 3 Commandes à distance disponibles mais 0 Télécommandes actifs même si j'exécuter du code de haut.

Code de fourmi que je ne comprends pas 100%. Pourquoi y a-t-il le paramètre
<arg value="-parallel"/>?

<target name="run-demo-in-parallel" description="Run Selenium tests in parallel"> 
    <java classpathref="demo.classpath" 
     classname="org.testng.TestNG" 
     failonerror="true" 

     > 
     <sysproperty key="java.security.policy" file="${basedir}/lib/testng.policy"/> 
     <sysproperty key="webSite" value="${webSite}" /> 
     <sysproperty key="seleniumHost" value="${seleniumHost}" /> 
     <sysproperty key="seleniumPort" value="${seleniumPort}" /> 
     <sysproperty key="browser" value="${browser}" /> 

     <arg value="-d" /> 
     <arg value="${basedir}/target/reports" /> 
     <arg value="-suitename" /> 
     <arg value="Selenium Grid Demo In Parallel" /> 
     <arg value="-parallel"/> 
     <arg value="methods"/> 
     <arg value="-threadcount"/> 
     <arg value="10"/> 
     <arg value="-testclass"/> 
     <arg value="com.thoughtworks.selenium.grid.demo.WebTestForASingleBrowser"/> 
    </java> 
    </target> 

Répondre

1

Pourquoi il paramètre

<arg value="-parallel"/>? 

Ceci est pour testng. Cela exécuterait toutes les méthodes/classes/tests en parallèle plutôt que séquentiellement. Vous pouvez en voir plus sur cette propriété here. Vous avez enregistré 3 RC et idéalement vous devriez voir les 3 étant utilisés pour l'exécution. Vous pouvez vérifier le lien de la console de la grille pour voir l'utilisation - http://localhost:4444/console où localhost est l'adresse IP sur laquelle le concentrateur est en cours d'exécution et port est le numéro de port sur lequel le concentrateur écoute.

EDIT: Modifiez votre code pour qu'il pointe vers le port de concentrateur sélénium plutôt que vers le port RC. Par défaut, le port Hub sera 4444. Assurez-vous également que vous avez démarré les nœuds RC avec l'environnement comme * iehta.

+0

thx pour la réponse. Tout cela est vrai mais sous "Active Remote Control" il n'y a pas de RC. Est-ce correct? – senzacionale

+0

Vous devriez voir RCs sous "Active Remote Control" une fois que vous commencez votre test. Votre code a eu un problème. J'ai mis à jour ma réponse. –

0

Ce que vous faites fonctionnera mais sera lent et presque aussi mauvais que de le faire d'une manière vraiment sérielle. C'est parce que la plupart des appels dans Selenium bloqueront jusqu'à la fin. Pour vraiment profiter de la parallélisation offerte par la Grille, vous devriez multi-thread votre code. Avoir un fil pour chaque objet Selenium.

+0

ok je fais maintenant un thread pour l'objet ech sélénium. mais je ne pense pas que ce soit beaucoup plus rapide ou mabye je me trompe. comment voir aussi si l'exécution est parallèle? – senzacionale

0

Vous n'avez pas besoin de multi-thread votre code de test pour exécuter des instances de sélénium en parallèle (bien que vous pourriez, si vous vouliez vraiment). Un framework gérant le forking de threads peut le faire pour vous, comme TestNG, Maven Surefire ou Gradle. Par exemple, mon projet le prouve en montrant plusieurs instances exécutant la grille sur un seul ordinateur en utilisant des threads/instances Gradle to fork: https://github.com/djangofan/selenium-gradle-example

Questions connexes