Как выполнить тестовые примеры огурца параллельно с помощью Grid?

Проведя изрядное количество исследований о том, как запускать тестовые примеры Cucumber параллельно, я нашел следующую очень полезную статью по этому вопросу:

https://www.opencredo.com/2013/07/02/running-cucumber-jvm-tests-in-parallel/

В статье есть довольно полезная информация, которая поможет вам начать работу с многопоточным окружением, включая код, который вы можете скачать с Github.

https://github.com/tristanmccarthy/Cucumber-JVM-Parallel

Если я правильно понимаю статью, драйвер должен быть настроен для работы с сеткой, что позволит вам запускать несколько тестовых случаев на нескольких устройствах. После некоторого тестирования кода с помощью хромированного драйвера, похоже, он работает, как описано в статье. Однако, как только он настроен для работы с Grid, тестовые примеры больше не будут выполняться параллельно. Вместо этого они выполняются последовательно.

В настоящее время у меня настроена сетка на 1 концентратор и 2 узла. Каждый узел может иметь максимум 2 сеанса в любой момент времени.

Примечание. Без Cucumber я могу успешно развернуть несколько тестовых примеров на нескольких устройствах, поэтому я не думаю, что проблема связана с настройкой моей сетки.

Вот пример кода, относящегося к веб-драйверу:

static {
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setJavascriptEnabled(true);
    capabilities.setBrowserName("chrome");
    capabilities.setPlatform(Platform.ANY);
    try {
        REAL_DRIVER = new RemoteWebDriver(new URL("http://xxx.xxx.xxx.xxx:4444/wd/hub"), capabilities);
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    REAL_DRIVER.manage().timeouts().pageLoadTimeout(3000, TimeUnit.SECONDS);
    REAL_DRIVER.manage().window().maximize();
    Runtime.getRuntime().addShutdownHook(CLOSE_THREAD);
}

public SharedDriver() {
    super(REAL_DRIVER);
}

@Override
public void close() {
    if (Thread.currentThread() != CLOSE_THREAD) {
        throw new UnsupportedOperationException(
                "You shouldn't close this WebDriver. It's shared and will close when the JVM exits.");
    }
    super.close();
}

Я подозреваю, что если вы используете более одного типа браузера, вы сможете запускать тестовые примеры на нескольких устройствах (по одному браузеру на устройство), но в моем случае я использую драйвер Chrome. Кто-нибудь знает, что может мешать распределению тестовых примеров на нескольких устройствах, или лучше понимает, как Grid работает с огурцом? Пожалуйста, поделитесь любыми статьями или информацией по этой проблеме.


person Cristian Contreras    schedule 22.12.2015    source источник
comment
вы выполнили точную настройку, как указано в url   -  person Paras    schedule 23.12.2015
comment
Да, я выполнил инструкции, загрузил код, запустил код локально, а затем изменил общий драйвер, чтобы он работал, как показано выше. IP-адрес указывает на сетевой концентратор.   -  person Cristian Contreras    schedule 23.12.2015
comment
можешь поделиться своим тестовым классом, где упомянуты все тесты?   -  person Paras    schedule 23.12.2015
comment
Код точно такой же, как на github. Я только изменил общий драйвер, как показано выше.   -  person Cristian Contreras    schedule 23.12.2015
comment
Можете ли вы поделиться своей конфигурацией узла.   -  person Paras    schedule 23.12.2015
comment
java -jar selenium-server-standalone-2.48.2.jar -role node -hub localhost: 4444 / grid / register -browser browserName = chrome, maxInstances = 10, maxSession = 3 -trustAllSSLCertificates   -  person Cristian Contreras    schedule 23.12.2015
comment
См. Приведенную выше командную строку, которая используется для запуска узлов.   -  person Cristian Contreras    schedule 31.12.2015
comment
К сожалению, Cucumber не является подходящей JVM для запуска параллельных тестов, для нашего фреймворка, в нашем фреймворке, поскольку мы следуем ATDD, мы используем Gherkin с бэкэндом testNG, а не Cucumber. он генерирует тот же файл функций и заглушки.   -  person Shek    schedule 23.02.2016
comment
Возможный дубликат Как выполнить параллельное выполнение файла функции огурца   -  person Sugat Mankar    schedule 13.12.2016


Ответы (1)


Grid ничего не делает с разделением заданий. Мне потребовалось некоторое время (и много скотча), чтобы наконец понять, что все, что Grid делает, - это берет задание откуда-то и передает его доступному узлу.

Вам понадобится средство запуска тестов, которое разделит ваши тесты функций / сценариев на разные части для передачи в Grid. К сожалению, бегун по огурцу этого не делает. Есть несколько разных способов разделить эти тесты на отдельные задания для передачи в Grid.

Этот блог OpenCredo указывает на более новую публикацию, в которой используется Maven. Обязательно проверьте это!

Кто-то упомянул TestNG. Я им не пользовался, поэтому не могу это комментировать.

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

Мы написали небольшой раннер, который сканирует сценарии и динамически передает их в Grid. Не могу поделиться кодом, потому что он на работе, а я в отеле ...

Следует иметь в виду одну вещь: вам придется управлять зависимостями и проблемами параллелизма. Надеюсь, вы структурируете тесты, чтобы между ними не было зависимостей. Другое дело параллелизм. У нас есть небольшой код, который передает разблокированные ресурсы тестам (например, пользователей, наборы данных и т. Д.)

Удачи!

person Jim Holmes    schedule 04.04.2016