2009-06-09 10 views
0

J'introduis les tests Selenium dans ma construction pour la première fois. Je me suis dit que pour ce faire dans NAnt, je dois démarrer le serveur WebDev premier:Arrêt des serveurs ASP WebDev et Selenium à partir de la ligne de commande

<exec program="path/to/WebDev.WebServer.exe" 
    commandline="/port:51150 /path:path/to/website" 
    failonerror="true" 
    resultproperty="selenium.webdev.server.running" 
    spawn="true"> 
</exec> 

Démarrer, puis le serveur Sélénium:

<exec program="path/to/java.exe" 
    commandline="-jar path/to/selenium-server.jar" 
    failonerror="false" 
    spawn="true"> 
</exec> 

Lancez ensuite mes tests. Cela marche. Qu'est-ce que je ne peux pas comprendre est comment puis-je tuer les serveurs WebDev et Selenium lorsque mes tests ont terminé?

Répondre

2

Voici ce que je fais localement, mais devrait fonctionner à distance aussi avec une simple requête get http:

http://localhost:4444/selenium-server/driver/?cmd=shutDown

ou post 1.0.1 versions de sélénium:

r eplace "shutDown" avec "shutDownSeleniumServer"

+0

Parfait, exactement ce que je suis après. Est-ce dans les docs officiels? Je ne pouvais pas trouver –

+0

que l'on n'était pas bien documenté. Je l'ai trouvé quelque part dans les pages wiki openqa. –

0

Nous laissons généralement le serveur Selenium s'exécuter tout le temps sur nos serveurs de build, c'est plus pratique de cette façon.

+0

J'aime aussi lancer des tests en local - et je ne veux pas que le serveur WebDev et le serveur Selenium traînent après ... –

1

James, je réussi à résoudre le problème de démarrage/arrêt Sélénium en appliquant l'initialisation du dispositif d'essai et le mécanisme de nettoyage (voir le reste de la discussion sur mon blog):

[AssemblyFixture] 
public class SeleniumTestingSetup : IDisposable 
{ 
    [FixtureSetUp] 
    public void Setup() 
    { 
     seleniumServerProcess = new Process(); 
     seleniumServerProcess.StartInfo.FileName = "java"; 
     seleniumServerProcess.StartInfo.Arguments = 
      "-jar ../../../lib/Selenium/selenium-server/selenium-server.jar -port 6371"; 
     seleniumServerProcess.Start(); 
    } 

    /// <summary> 
    /// Performs application-defined tasks associated with freeing, releasing, or 
    /// resetting unmanaged resources. 
    /// </summary> 
    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    /// <summary> 
    /// Disposes the object. 
    /// </summary> 
    /// <param name="disposing">If <code>false</code>, cleans up native resources. 
    /// If <code>true</code> cleans up both managed and native resources</param> 
    protected virtual void Dispose(bool disposing) 
    { 
     if (false == disposed) 
     { 
      if (disposing) 
       DisposeOfSeleniumServer(); 

      disposed = true; 
     } 
    } 

    private void DisposeOfSeleniumServer() 
    { 
     if (seleniumServerProcess != null) 
     { 
      try 
      { 
       seleniumServerProcess.Kill(); 
       bool result = seleniumServerProcess.WaitForExit(10000); 
      } 
      finally 
      { 
       seleniumServerProcess.Dispose(); 
       seleniumServerProcess = null; 
      } 
     } 
    } 

    private bool disposed; 
    private Process seleniumServerProcess; 
} 
+0

Belle solution. Peut-être ajouter le code de votre blog à votre réponse? –

+0

Oui, je vais le faire - mais d'abord je dois résoudre un problème: le serveur ne s'arrête pas après avoir exécuté ces tests dans CruiseControl.NET. Donc, une nouvelle tâche pour moi pour demain :) –

0

A défaut, il y a toujours le fidèle vieux pskill. Il est une grande approche de marteau, mais il fonctionne un régal pour tuer webdevwebserver :-)

Je sais très peu sur le sélénium, donc des excuses à l'avance si pskill est pas bon pour l'arrêter

+0

Je pense que ce ne serait pas vraiment un problème d'utiliser pskill, tant que vous savez quel processus tuer. Il peut y avoir plusieurs serveurs Selenium en cours d'exécution sur votre serveur de construction (et tous fonctionnent en tant que processus nommés "java"). –

Questions connexes