Как выполнить параллельные тесты с Selenium WebDriver на одной машине? - PullRequest
0 голосов
/ 25 февраля 2012

Моя цель - запустить несколько тестов на одной машине параллельно.Для этого я использую Selenium WebDriver с Firefox и Mbunit.К сожалению, похоже, что создание драйверов в Selenium не является потокобезопасным, и я должен обернуть эту часть кода глобальной блокировкой.Это не конец света, но мой вопрос: если это все, что мне нужно сделать, или, может быть, есть другие части, которые нуждаются в синхронизации?Другим вариантом может быть изоляция AppDomain или Process в MBUnit, но я не уверен, реализовано ли это.

 [TestFixture]
[Parallelizable]
public class Class1
{

    public static object padlock = new object();

    [Test]
    [Parallelizable]
    public void Test1()
    {
        var driver = CreateDriver();
        driver.Navigate().GoToUrl("http://www.mozilla.org");
        driver.FindElementByCssSelector("a[href='/projects/']").Click();
        Thread.Sleep(TimeSpan.FromSeconds(5));
        driver.Quit();
    }

    [Test]
    [Parallelizable]
    public void Test3()
    {
        var driver = CreateDriver();
        driver.Navigate().GoToUrl("http://www.mozilla.org");
        driver.FindElementByCssSelector("a[href='/contribute/']").Click();
        Thread.Sleep(TimeSpan.FromSeconds(5));
        driver.Quit();
    }

    **private FirefoxDriver CreateDriver()
    {
        lock(padlock)
        {
            return new FirefoxDriver();
        }
    }**
}

Ответы [ 2 ]

1 голос
/ 12 марта 2012

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

Я хотел бы отметить, что на примере вашего кода ваши тесты не пройдут правильно. При любом ошибочном утверждении или сгенерированном исключении вы не попадете в раздел Quit () своего кода. Вот почему методы Setup / Teardown обычно используются для запуска / остановки браузера.

К вашему сведению, вы все равно можете использовать методы настройки / демонтажа параллельно, вам просто нужен способ хранения / ссылки на драйвер. Вы можете использовать IDictionary, на который ссылается имя TestStep.

0 голосов
/ 26 февраля 2012

Я не знаю, как работает MBunit, но есть различия между параллельностью и параллельностью Мое мнение, что тест на селен хорошо интегрируется в концепцию параллелизма. В любом случае, разногласия могут сбивать с толку. Итак, как это можно сделать. 1. Создайте класс, который реализует Runnable или расширяет класс Thread. Этот класс запустит тест, что-то вроде этого:

 class MyClass implements Runnable
 {
    private Thread t;
    public MyClass()
    {
       t=new Thread (this);
       t.start();
    }

    @Override
    public void run() {
       WebDriver w = new FirefoxDriver();
       // begin your test
    }

 }

В главном классе создайте несколько экземпляров MyClass. Каждый из них запустит тест в своем собственном потоке. Вот ссылка на документацию класса Thread: http://docs.oracle.com/javase/1.3/docs/api/java/lang/Thread.html

...