2009-06-09 62 views
0

我首次將Selenium測試引入到我的構建中。我想,這樣做的惡性,我會先啓動Webdev的服務器:從命令行停止ASP WebDev和Selenium服務器

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

然後啓動Selenium服務器:

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

然後運行我的測試。這工作。我無法弄清楚的是,當我的測試完成後,如何殺死WebDev和Selenium服務器?

回答

0

我們通常會讓Selenium服務器始終在我們的構建服務器上運行,這樣更實用。

+0

我也喜歡在本地運行測試 - 並且不希望WebDev服務器和Selenium服務器事後掛起... – 2009-06-09 13:47:22

1

詹姆斯,我設法解決硒起動/應用測試組件的初始化和清理機制停車問題(見我的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

不錯的解決方案。也許從您的博客添加代碼到您的答案? – 2009-06-16 11:40:54

+0

是的,我會做 - 但首先我必須解決一個小故障:在CruiseControl.NET中運行這些測試後服務器不會停止。所以對我來說明天的一項新任務:) – 2009-06-16 16:01:58

0

做不到這一點,總是有值得信賴舊pskill。這是一個大鐵錘的方法,但它的工作原理治療殺死webdevwebserver :-)

我知道的甚少硒,所以道歉,如果事先pskill是無益於阻止它

+0

我認爲使用pskill並不是一個真正的問題,只要你知道哪個進程會被殺死。可以在您的構建服務器上運行多個Selenium服務器(並且它們全部以「java」命名的進程運行)。 – 2009-06-16 16:10:22