【问题标题】:How to run Selenium Webdriver C# tests on multiple remote machines in parallel?如何在多台远程机器上并行运行 Selenium Webdriver C# 测试?
【发布时间】:2013-08-13 16:08:58
【问题描述】:

我目前正在使用 Selenium Webdriver 并使用 C# 在 Visual Studio 2012 中开发我的测试。我已使用以下代码成功执行了远程测试:

public static void Test_RemoteWebDriver()
       {
        string url = "http://11.11.11.11:4444/wd/hub";

        DesiredCapabilities ieCapibility = DesiredCapabilities.InternetExplorer();
        ieCapibility.SetCapability("ignoreProtectedModeSettings", true);
        IWebDriver driver = new RemoteWebDriver(new Uri(url), ieCapibility);
        driver.Navigate().GoToUrl("http://www.google.com/");           
        driver.Quit();
       }

我现在要做的是使用一台机器作为自动化控制器,并在多台远程机器上执行测试。澄清一下,我想在我的控制器机器上拥有 Selenium 代码,但能够在多台远程机器上运行测试。我该怎么做呢? 我也在使用 NUnit 来运行我的测试,但我知道这可能不是并行测试的最佳解决方案。运行远程 Selenium 测试的最佳框架是什么? 非常感谢您的帮助, 约翰

【问题讨论】:

  • 你明白你正在尝试完成的是一项巨大的开发任务,通过实现库提供的一些简单功能你将一无所获。
  • 我已经澄清了我的问题,如果我含糊不清,我深表歉意。我确信在使用 Grid 之类的东西之前已经完成了这项工作,但我希望专家能告诉我最好的方法是什么。
  • 在我以前的工作中,我们的自动化能够做到这一点,但执行它的代码是一个定制的调度程序,负责启动各种任务。我不认为有任何简单的方法可以实现这个功能,我可能是错的,但总的来说这不是一个简单的问题,我认为你不会找到一个简单的解决方案。

标签: c# nunit selenium-webdriver remotewebdriver


【解决方案1】:

已经有一段时间了,所以这就是我最终要做的。我最终使用 NUnit 来运行测试。现在我的自动化将 NUnit 和 Selenium 文件复制到远程机器,在那里运行自动化并将结果文件复制回控制器机器。很适合我的需要。 约翰

【讨论】:

    【解决方案2】:

    我所做的,我不确定这是否是最好的方法,是在 app.config 的 appsettings 部分中为我要测试的每个服务器添加一个条目,如下所示:

     <!-- Server URLs to test  -->    
    <add key="ApplicationUrl_DEV" value="http://localhost:44404"/>
    <add key="ApplicationUrl_TEST" value="http://testserver:44404"/> 
    

    然后在测试类中,我将属性添加为:

    [TestFixture("ApplicationUrl_DEV", "DEV")]
    [TestFixture("ApplicationUrl_TEST", "TEST")]
    public abstract class Executer // Test class
    

    类中的每个测试方法将执行 N 次,每个“TestFixture”属性执行一次。 在此之后,您必须重载类构造函数:

    protected Executer(string urlKey, string environment)
    {
         BaseUrl = ConfigurationManager.AppSettings[urlKey];
         Environment = environment;
    }
    

    在这个场景中,urlKey是当前TestAttribute的第一个值,environment是第二个。 所以,有了这个,我得到了我当前服务器的 URL,并将它用作我的基本 URL:

    BaseUrl = ConfigurationManager.AppSettings[urlKey];
    Environment = environment;
    

    和用于记录目的的“环境”。

    【讨论】:

    • 我真的不明白这与同时在多台机器上运行自动化有什么关系......
    • @evanmcdonnal 这种方式允许多次运行相同的测试,提供您可以利用的参数。如果您将这些参数中的任何一个设置为 URL,那么您将能够同时在多个服务器上运行测试。
    • 你确定你不是说你可以同时对多台服务器运行测试吗?我认为问题是问你如何让自动化在多台服务器上并行运行,而不是如何在各种环境(即 QA、Dev、staging 和 prod)上运行它。
    • 感谢您的建议。我已经澄清了我的问题。我真的在寻找像 Selenium Grid 这样的东西来运行这些测试,但如果存在更好的解决方案,我想听听。
    猜你喜欢
    • 2012-05-28
    • 2014-10-27
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多