Ответ 1
Это то, что вам нужно, оно называется "селеновая сетка"
Итак, я пытаюсь создать Java-программу, которая использует Selenium для автоматизации WebDriver для выполнения задач на веб-сайте. На данный момент я использую его для работы, чтобы автоматизировать раздражающую задачу, когда пользователь должен загружать файлы в нашу базу данных. Я уже успешно сделал программу, которая автоматизирует это, и сохранила часы работы вручную.
Теперь я пытаюсь запустить программу для запуска нескольких браузеров в параллельно. Я хочу сделать это, чтобы ускорить скорость загрузки файлов, поскольку большая часть времени теряется, ожидая загрузки страниц.
Я тестировал это с гораздо более простой версией своей программы и успел ускорить простые задачи в 2-10 раз, открыв от десятков до сотен потоков с помощью своих собственных WebDrivers.
Проблема заключается в том, что всякий раз, когда я запускаю больше 1 WebDriver, вся эта вещь начинает случайным образом вызывать уродство, а в других случаях вообще не работает. Я пытался использовать "PhantomJSDriver" вместе с последним "PhantomJS.exe", но временами он работал, и в большинстве случаев он ничего не делал. Эта же программа, которая безупречно работает с одним драйвером, ломается, когда они запускаются параллельно.
Я пытался найти причины, почему это происходит, и способы вокруг него, но я не нашел ничего определенного, что я могу использовать.
Как я могу обойти автоматизацию просмотра веб-страниц параллельно с Selenium, если это возможно, а если нет, куда я должен искать, чтобы сделать это?
Это то, что вам нужно, оно называется "селеновая сетка"
Фактически, используя Grid
, вы можете автоматизировать тесты параллельно с использованием одного и того же компьютера или с помощью нескольких машин (здесь машины в смысле отдельных компьютеров).
Я надеюсь, что эта ссылка покажет вам, как параллельно проводить тесты на одном компьютере.
В приведенной выше ссылке пользователь сказал создать пять разных программ для параллельной работы. Если вы хотите запустить отдельную программу параллельно, просто используйте TestNg or Junit
для запуска нескольких экземпляров.
Это образец TestNg config code
для параллельной проверки. Здесь я запустил два потока. Поэтому он будет вызывать метод TestNg @Test
данного файла класса com.test.workflow.device.testcase20
в двух потоках.
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1" parallel="test" thread-count="2">
<test name="Testcase20" >
<classes>
<class name="com.test.workflow.device.testcase20"/>
</classes>
</test>
</suite>
Используя вышеописанный xml файл, вы можете получить parallelism в webdriver, используя сетку.
Вы можете попробовать с помощью Sahi http://sahi.co.in/. Он может запускать несколько экземпляров браузеров параллельно.
Посмотрите, как Sahi действительно загружает файлы. http://sahi.co.in/w/_setFile
Можно одновременно запускать экземпляры селена. Когда селен запускает экземпляры браузера, он по умолчанию открывает подключение по порту 7055.
Итак, если вы хотите запускать несколько экземпляров, вы должны запускать их на разных портах.
Я бы предположил, что вы создаете драйвер для каждого браузера, и пусть ваш код знает, что вы используете больше нескольких драйверов. Другое предложение, как уже описано выше, с использованием Selenium Grid - лучшее решение: https://sqa.stackexchange.com/questions/5431/how-to-open-multiple-browsers-using-webdriver https://github.com/SeleniumHQ/selenium/wiki/Grid2
если вы используете webdriver, попробуйте maven-surefire-plugin:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<forkCount>4</forkCount>
</configuration>
</plugin>
</plugins>
в опции использования кода "forkCount" значение 4 - количество процессоров. 4 процессора = 4 JVM. U может запускать webdriver для каждой JVM! link http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html