3

我有一个用 C# 编写的带有各种浏览器(IE6、7、8、FF 3.5.6)的 Selenium GRID 设置,并且它们单独工作正常。我还有一组 Selenium 测试设置,它们也可以很好地与我传递给它们的环境一起工作。我要求的是一种以语法方式设置不同单元测试以循环遍历 Selenium GRID 上所有可用浏览器的方法。

没有那么多浏览器,所以浏览器列表或数组之类的东西很好,但我想不出一种方法让 Setup 和 TearDown 在浏览器中循环。我正在使用带有 NUnit 的 C# 以及 Selenium Grid 和 3 个连接到它的 Selenium RC。

如果这意味着我可以循环浏览浏览器,我什至不介意更改为 MbUnit 之类的东西。

非常感谢

4

3 回答 3

0

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

于 2011-03-11T17:41:25.780 回答
0

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

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

于 2012-03-30T20:21:26.647 回答
0

如果您使用 NUnit,您可以在基本测试类中使用您想要的所有浏览器指定参数化 TextFixtures :

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)您可以通过PNunit指定浏览器。缺点:每个测试都应该在 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 进行更改。没有调查这个解决方案,所以不能给你一个例子。希望前两个解决方案会有所帮助。

于 2012-03-30T22:29:38.383 回答