Как правильно обойти вебдрайвер при параллельном запуске тестов? - PullRequest
0 голосов
/ 09 июня 2018

Моя работа поручила нам написать среду автоматизации, которая включает в себя селеновый веб-драйвер с c # / nunit.В настоящее время мы используем nunit 3.0.Моя первоначальная идея заключалась в том, чтобы извлечь достаточно компонентов инфраструктуры, чтобы командам, которые будут использовать инфраструктуру, не приходилось беспокоиться о таких вещах, как настройка / отключение веб-драйвера.

Мы решили пойти по путиналичие вспомогательного класса тестирования, который имеет настройку / разборку, которая будет создавать экземпляр драйвера на основе параметра конфигурации (chrome, т. е. и т. д.), а затем разбирать его после каждого теста.Мы также добавили переменную драйвера защищенного класса, которая устанавливается при каждом вызове программы установки.Таким образом, каждый тестовый класс может расширять TestHelper, и они могут получить драйвер бесплатно.

Это прекрасно работает, когда мы не запускаем тесты параллельно, но как только мы начинаем выполнять параллельные тесты, драйвер каждый раз перезаписывается(что имеет смысл).

Мой вопрос заключается в том, есть ли лучший способ, которым мы могли бы сделать это так, чтобы сохранить первоначальную идею о наличии драйвера в TestHelper и исключить множество манипуляций с драйверами из самих тестов.Я действительно хочу, чтобы в каждом тесте не было объявлений / инициализаций драйверов, и просто оставляю наборы тестов для тестирования конкретного кода.

Вот некоторые классы тестов, которые напоминают происходящее (на самом деле я не смог опубликовать производствокод, потому что работа смешная из-за этого):

Вот мой класс помощника по тестированию:

using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace AutomationTest
{
    class TestHelper
    {

        protected IWebDriver driver;

        [SetUp]
        public void startBrowser()
        {
            driver = new ChromeDriver("C:\\Users\\james\\Desktop");
        }

        [TearDown]
        public void closeBrowser()
        {
            driver.Close();
            driver.Quit();
        }
    }
}

А вот мой класс по тестам (8 тестов только для тестирования параллельного тестирования):

using NUnit.Framework;

namespace AutomationTest 
{
    [TestFixture]
    [Parallelizable(ParallelScope.All)]
    class ParallelTest : TestHelper
    {
        [Test]
        public void test1()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        }

        [Test]
        public void test2()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        }

        [Test]
        public void test3()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        }

        [Test]
        public void test4()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        }

        [Test]
        public void test5()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        }

        [Test]
        public void test6()
        {           
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        } 

        [Test]
        public void test7()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        }

        [Test]
        public void test8()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");   
        }
    }
}

1 Ответ

0 голосов
/ 09 июня 2018
using NUnit.Framework;

namespace AutomationTest 
{
class TestHelper
{

    //protected IWebDriver driver;
    protected void Browse(Action<IWebDriver> action)
    {
      var driver = new ChromeDriver("C:\\Users\\james\\Desktop");
      action(driver);
      driver.Close();
      driver.Quit();
    }
    [SetUp]
    public void startBrowser()
    {
        // driver = new ChromeDriver("C:\\Users\\james\\Desktop");
    }

    [TearDown]
    public void closeBrowser()
    {
        // driver.Close();
        // driver.Quit();
    }
}

[TestFixture]
[Parallelizable(ParallelScope.All)]
class ParallelTest : TestHelper
{
    [Test]
    public void test1()
    {   
        Browse( (driver) => {         
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    }

    [Test]
    public void test2()
    {   
        Browse( (driver) => {                  
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    }

    [Test]
    public void test3()
    {     
        Browse( (driver) => {                
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    }

    [Test]
    public void test4()
    {     
        Browse( (driver) => {                
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    }

    [Test]
    public void test5()
    {       
        Browse( (driver) => {              
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    }

    [Test]
    public void test6()
    {     
        Browse( (driver) => {               
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    } 

    [Test]
    public void test7()
    {     
        Browse( (driver) => {                
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    }

    [Test]
    public void test8()
    {     
        Browse( (driver) => {                
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");   
        });
    }
}
}

Это создаст новый драйвер для каждого теста, и это нормально, так как вам нужны отдельные драйверы браузера и экземпляры браузера, чтобы ваши тесты работали параллельно и не мешали работе.

...