Continuous integration 作为CI流程的一部分运行UI SeleniumRC测试

Continuous integration 作为CI流程的一部分运行UI SeleniumRC测试,continuous-integration,selenium,selenium-rc,Continuous Integration,Selenium,Selenium Rc,我正在尝试为QA部门设置CI环境。他们使用SeleniumRC在IE和FF浏览器中运行UI测试,以测试某些web应用程序。如前所述,我成功地将其配置为作为windows服务运行。但是,当我运行测试时,它挂起。我可以在进程列表中看到Selenium服务生成的iexplore.exe进程,但没有发生更多的事情。不显示浏览器窗口,windows事件日志中没有条目。我在谷歌上搜索了很多次,据我所知,问题在于与桌面的交互。我尝试在设置了“允许服务与桌面交互”复选框的系统帐户下以及具有本地管理员权限的常规用

我正在尝试为QA部门设置CI环境。他们使用SeleniumRC在IE和FF浏览器中运行UI测试,以测试某些web应用程序。如前所述,我成功地将其配置为作为windows服务运行。但是,当我运行测试时,它挂起。我可以在进程列表中看到Selenium服务生成的iexplore.exe进程,但没有发生更多的事情。不显示浏览器窗口,windows事件日志中没有条目。我在谷歌上搜索了很多次,据我所知,问题在于与桌面的交互。我尝试在设置了“允许服务与桌面交互”复选框的系统帐户下以及具有本地管理员权限的常规用户帐户下运行该服务。因此,我的问题是,这是否可能?

我对作为windows服务运行任何应该与桌面应用程序交互的东西持怀疑态度。Windows服务在自己的沙箱中运行;它们不应该与用户的桌面或其应用程序交互。要做到这一点,需要特别努力与服务进行通信,因此,如果可能的话,我认为还会有某种桌面客户端运行,充当浏览器和windows服务之间的联络人

不过,我不能告诉你这是行不通的,因为如果人们在写博客,这显然是可能的


顺便问一下,为什么它需要作为Windows服务运行?这就是Selenium设置其自动化的方式,还是您可以在没有Windows服务的情况下实现自动化?因为我认为这是两点之间的最短距离。

我的建议是使用专用机器(或虚拟机)运行Selenium RC。根据我的经验,最好让Selenium以交互方式运行,而不是以无头模式运行。

在我们的组织中,我们有一个持续集成服务器(巡航控制)运行构建,包括Selenium RC测试。CI服务器作为Windows服务运行(在MS Windows 2003服务器上),Selenium测试只是测试套件的一部分

这是一个非常简单的设置,坦率地说,我认为没有理由放弃它。目前,在我们的设置中,Selenium服务器(和客户机)直接从测试中启动(然而,我们过去将Selenium作为一项单独的服务)

在Java代码(实际上是所有web测试的超类)中,我们执行以下操作:

// to start the server
RemoteControlConfiguration config = new RemoteControlConfiguration();
config.set(...)  // set the serverHost and port
...
SeleniumServer server = new SeleniumServer(config);
server.start();

// and then to start the client
Selenium selenium = new DefaultSelenium(serverHost, port, "*firefox", "http://www.google.com");
selenium.start();
selenium.open("http://www.google.com");

// now the browser should be visible for you (if you run it locally, not as a service)
因此,我建议您尝试以下方法(无论您使用何种语言):

  • 尝试从一个独立的应用程序运行Selenium服务器和客户端。浏览器应显示为一个窗口。根据需要调整设置(浏览器类型等)

  • 尝试将代码合并到您的测试框架中(xUnit或其他)。手动运行它们。结果应该是一样的

  • 然后,您可以尝试从持续集成运行测试。将CI服务器作为服务运行,并让它构建您的项目。浏览器将不可见,但运行测试并不需要浏览器,不是吗

  • 注:
    如果您想了解Selenium正在做什么,我相信在UNIX机器上会更容易。您可以将测试指向使用您选择的X-server
    显示器
    ——连接到某个监视器的假显示器或真显示器

    谢谢你,罗伯特!他们需要尽可能地自动化它,以便Selenium测试是整个构建过程(构建->部署->测试)的一部分。该服务有助于使环境独立于人类(例如,无需在每次服务器重新启动时手动登录和启动Selenium)。然而,我花了太多的时间都是徒劳的,所以我现在就不做了。事实上,他们有几个用于Selenium RC的盒子(每个盒子都有几个具有不同配置的VM)。更多的服务器->更多的手工工作,我希望它能以某种方式自动化。谢谢你的回答!我们这里的配置几乎相同(Win2003和CruiseControl),只是它是.NET平台(使用NUnit编译成c代码的测试)。无论是在本地模式还是远程模式下,都可以正常工作,但只有通过控制台启动Selenium(浏览器显示,测试为绿色)。但如果我们把它作为windows服务启动,它就不起作用了。我将尝试您的建议,在切换回此任务后尽快从代码启动服务器。我检查了运行CruiseControl服务的用户的权限。这里是:
    分布式COM用户、超级用户、远程桌面用户、TelnetClients、用户
    。不太确定是否需要所有这些。我几乎可以肯定没有对用户权限进行其他自定义。谢谢您的帮助!问题出在我身上。1.0.1版可以作为一种服务正常工作!解决了的!QA人员刚刚将Selenium RC更新为1.0.1(原来是0.9.0),它工作起来非常神奇!