Как использовать более одного браузера в Nunit / Selenium GRID / C # Setup

У меня есть Selenium GRID Setup с различными браузерами (IE6, 7, 8, FF 3.5.6), написанными на C #, и по отдельности они работают нормально. У меня также есть набор настроек Selenium Tests, и они также отлично работают с окружением, которое я им передаю. Я прошу о способе программной настройки различных модульных тестов для циклического перебора всех браузеров, доступных для него на Selenium GRID.

Браузеров не так уж и много, поэтому такие вещи, как список или массив браузеров, подойдут, но я не могу понять, как запустить цикл Setup и TearDown через браузеры. Я использую C # с NUnit вместе с Selenium Grid и тремя подключенными к нему RC Selenium.

Я даже не против перейти на что-то вроде MbUnit, если это означает, что я могу циклически переключаться между браузерами.

Большое спасибо


person Tangopop    schedule 26.04.2010    source источник


Ответы (3)


Один (довольно уродливый) вариант может заключаться в использовании расширения RowTest для методов тестирования, проходящих в целевых браузерах, - ценой загрязнения реальных методов тестирования настройкой и, вероятно, замедления всего набора тестов.

person parapet    schedule 11.03.2011

Если вы используете MbUnit, вы можете привязать атрибут Factory к переменной. Затем попросите Data Factory вернуть один раз для каждого типа браузера, с помощью которого вы хотите автоматизировать. Он будет выполнять тесты один раз для каждого браузера.

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

person Brian Kitchener    schedule 30.03.2012

Если вы используете 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. Не исследовал это решение, поэтому не могу привести вам пример. Надеюсь, что первые два решения помогут.

person Aleh Douhi    schedule 30.03.2012