【问题标题】:Stopping ASP WebDev and Selenium servers from command line从命令行停止 ASP WebDev 和 Selenium 服务器
【发布时间】:2009-06-09 11:29:28
【问题描述】:

我第一次在我的构建中引入 Selenium 测试。我认为要在 NAnt 中执行此操作,我必须先启动 WebDev 服务器:

<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 服务器?

【问题讨论】:

    标签: selenium nant webdev.webserver


    【解决方案1】:

    这是我在本地执行的操作,但也应该通过简单的 http get 请求远程工作:

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

    或者对于 Selenium 的 1.0.1 后版本:

    将“shutDown”替换为“shutDownSeleniumServer”

    【讨论】:

    • 完美,正是我所追求的。这是在官方文档中吗?没找到
    • 那个没有很好的记录。我在 openqa wiki 页面的某个地方找到了它。
    【解决方案2】:

    James,我通过应用测试程序集初始化和清理机制设法解决了 Selenium 启动/停止问题(请参阅我的 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;
    }
    

    【讨论】:

    • 不错的解决方案。也许将您博客中的代码添加到您的答案中?
    • 是的,我会这样做 - 但首先我必须解决一个故障:在 CruiseControl.NET 中运行这些测试后服务器不会停止。所以明天我的新任务:)
    【解决方案3】:

    我们通常让 Selenium 服务器一直在我们的构建服务器上运行,这样更实用。

    【讨论】:

    • 我也喜欢在本地运行测试 - 并且不希望 WebDev 服务器和 Selenium 服务器之后闲逛......
    【解决方案4】:

    否则,总会有值得信赖的老pskill。这是一种大锤方法,但它可以杀死 webdevwebserver :-)

    我对 selenium 知之甚少,所以如果 pskill 无法阻止它,请提前道歉

    【讨论】:

    • 我认为使用pskill不会真的有问题,只要你知道要杀死哪个进程。您的构建服务器上可以运行多个 Selenium 服务器(并且它们都作为“java”命名的进程运行)。
    猜你喜欢
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2016-11-17
    • 2016-11-13
    • 2016-12-10
    • 2018-04-29
    相关资源
    最近更新 更多