如何在Nunit / Selenium GRID / C#Setup中使用多个浏览器

时间:2010-04-26 16:15:19

标签: c# nunit selenium selenium-grid

我有一个Selenium GRID安装程序,其上有各种浏览器(IE6,7,8,FF 3.5.6),用C#编写,并且单独运行正常。我还有一套Selenium Tests设置,它们也可以很好地处理我传递给它们的环境。我要求的是一种方法,以编程方式设置不同的单元测试,以循环通过Selenium GRID上可用的所有浏览器。

没有那么多的浏览器,所以像列表或浏览器数组这样的东西很好,但我无法想象通过浏览器安装和TearDown循环。我正在使用C#和NUnit以及Selenium Grid和3个Selenium RCs连接到它。

我甚至不介意改为MbUnit,如果这意味着我可以循环浏览器。

非常感谢

3 个答案:

答案 0 :(得分:0)

一个(相当丑陋)的选项可能是在目标浏览器中传递的测试方法上使用RowTest扩展 - 以设置污染实际测试方法并可能减慢整个测试套件的速度。

答案 1 :(得分:0)

如果您使用MbUnit,则可以将Factory属性绑定到变量。然后让Data Factory返回您想要自动化的每种类型的浏览器。它将在每个浏览器执行一次测试。

http://www.gallio.org/wiki/doku.php?id=mbunit:data-driven_testing:factory

答案 2 :(得分:0)

如果您使用NUnit,则可以在基础测试类中指定所需的所有浏览器{/ 3}}:

namespace Tests
{
    [TestFixture("*firefox")]
    [TestFixture("*iexplore")]
    public abstract class Test
    {
        private static string _browser;

        protected Test()
        {
        }

        protected Test(string browser)
        {
            SetBrowser(browser);
        }        

        public static void SetBrowser(string browser)
        {
            _browser = browser;
        }

        [SetUp]
        public virtual void Setup()
        {
            Selenium = new DefaultSelenium(localhost, 5555, _browser, "http://www.google.com/");
            Selenium.Start();
        }

        [TearDown]
        public virtual void TearDown()
        {
            Selenium.Stop();
        }
    }
}

测试本身就是这样的:

namespace Tests
{
    [TestFixture]
    public class Test1 : Test
    {
        public Test1(string browser)
        {
            SetBrowser(browser);
        }

        [Test]
        public void FirstTest()
        {
            ...
        }
   }
}

2)您可以通过parameterized TextFixtures指定浏览器。缺点:每个测试都应该在test.conf文件中提到。优点:所有指定的浏览器都将并行运行。 test.conf文件的示例,其中为两个浏览器指定了一个测试:

<TestGroup>
  <ParallelTests>  
    <ParallelTest>
      <Name>Tests</Name>
        <Tests>

          <TestConf>
            <Name>Test1FF</Name>
            <Assembly>Test.dll</Assembly>
            <TestToRun>Test.Tests.Test1</TestToRun>
            <Machine>localhost:8080</Machine>
            <TestParams>
              <string>*firefox</string>
            </TestParams>
          </TestConf>

          <TestConf>
            <Name>Test1IE</Name>
            <Assembly>Test.dll</Assembly>
            <TestToRun>Test.Tests.Test1</TestToRun>
            <Machine>localhost:8080</Machine>
            <TestParams>
              <string>*iexplore</string>
            </TestParams>
          </TestConf>

        </Tests>
      </ParallelTest>
    </ParallelTests>
</TestGroup>

基础测试类将是这样的:

using NUnit.Framework;
using PNUnit.Framework;

namespace Tests
{
    [TestFixture]
    public class Test
    {
        private string browser;

        protected Test()
        {
        }     

        [SetUp]
        public virtual void Setup()
        {
            browser = PNUnitServices.Get().GetTestParams();
            Selenium = new DefaultSelenium(localhost, 5555, browser, "http://www.google.com/");
            Selenium.Start();
        }

        [TearDown]
        public virtual void TearDown()
        {
            Selenium.Stop();
        }
    }
}

3)您可以在app.config中指定浏览器并通过TeamCity进行更改。没有调查这个解决方案,所以不能给你一个例子。 希望前两个解决方案有所帮助。