Параллельный запуск тестов Все стартует в одном окне браузера
#1
Отправлено 14 мая 2020 - 14:00
#2
Отправлено 14 мая 2020 - 14:12
В бефоре оставить
создание DesiredCapabilities и опций driver = new RemoteWebDriver(URI.create("http://localhost:5557/wd/hub").toURL(), capabilities); System.setProperty("selenide.startMaximized", "true"); WebDriverRunner.setWebDriver(driver);
#3
Отправлено 14 мая 2020 - 14:25
В бефоре оставить
создание DesiredCapabilities и опций driver = new RemoteWebDriver(URI.create("http://localhost:5557/wd/hub").toURL(), capabilities); System.setProperty("selenide.startMaximized", "true"); WebDriverRunner.setWebDriver(driver);В афтер оставить только closeWebDriverВсё остальное за вас сделает Селенид.
Все сделала, как Вы сказали. Перестало работать вообще)
#4
Отправлено 14 мая 2020 - 14:54
А сделайте так:
WebDriverRunner.setWebDriver(new RemoteWebDriver(URI.create("http://localhost:5557/wd/hub").toURL(), capabilities));
У меня вот так работает:
public class ParallelStartBaseClass { @BeforeClass public void setup() throws MalformedURLException { System.out.println(Thread.currentThread().getName()); final ChromeOptions options = new ChromeOptions(); options.addArguments("--lang=en_EN", "--disable-notifications", "--window-size=1200,1080", "--disable-system-timezone-automatic-detection", "--local-timezone"); RemoteWebDriver driver = new RemoteWebDriver(URI.create("http://localhost:5557/wd/hub").toURL(), options); WebDriverRunner.setWebDriver(driver); } @AfterClass public void close() { closeWebDriver(); } }
Локально проверял заменой .setWebDriver(driver); на .setWebDriver(new ChromeDriver(options));
#5
Отправлено 14 мая 2020 - 15:38
А сделайте так:
WebDriverRunner.setWebDriver(new RemoteWebDriver(URI.create("http://localhost:5557/wd/hub").toURL(), capabilities));У меня вот так работает:
public class ParallelStartBaseClass { @BeforeClass public void setup() throws MalformedURLException { System.out.println(Thread.currentThread().getName()); final ChromeOptions options = new ChromeOptions(); options.addArguments("--lang=en_EN", "--disable-notifications", "--window-size=1200,1080", "--disable-system-timezone-automatic-detection", "--local-timezone"); RemoteWebDriver driver = new RemoteWebDriver(URI.create("http://localhost:5557/wd/hub").toURL(), options); WebDriverRunner.setWebDriver(driver); } @AfterClass public void close() { closeWebDriver(); } }Локально проверял заменой .setWebDriver(driver); на .setWebDriver(new ChromeDriver(options));
Нет, не получилось. Все сделала, как у Вас, а тесты все равно в одном окне браузера шпарит.
Pom настраивать на параллельный запуск надо? Как-то изменять настройки maven-surefire-plugin? У меня настроено только в testng.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestProjectPDTC"> <test name="TestProjectPDTC" parallel="classes" thread-count="9" verbose="10"> <classes> <class name="ParallelStart.TestClassOne"/> <class name="ParallelStart.TwoTestClass"/> <class name="ParallelStart.ThreeTestClass"/> </classes> </test> </suite>
Может мой вопрос тупым покажется, но зачем тогда нужен ThreadLocal для параллельного запуска тестов? Или это только Selenide "сам все делает", а если без Selenide, то нужно ThreadLocal использоывать?
Сообщение отредактировал OxanaKIseleva: 14 мая 2020 - 15:42
#6
Отправлено 14 мая 2020 - 15:40
У меня parallel="methods", ну и тредов для начала поставьте 2.
Селенид всё сделает - это я про то, что не надо где-то сохранять все создаваемые драйвера, WebDriverRunner всё сам сохраняет и отслеживает какой открыть, какой закрыть.
#7
Отправлено 14 мая 2020 - 15:47
У меня parallel="methods", ну и тредов для начала поставьте 2.
Селенид всё сделает - это я про то, что не надо где-то сохранять все создаваемые драйвера, WebDriverRunner всё сам сохраняет и отслеживает какой открыть, какой закрыть.
Сделала methods, но теперь проблемы с закрытием driver. Одно окно закрыл остальные висят и тормозят открытие других
#8
Отправлено 14 мая 2020 - 15:59
Из-за того, что driver не закрывается корректно, решила реализовать так:
@AfterMethod public void close(){ closeWebDriver(); }
Типа закрывать driver после каждого тестового метода. Не знаю, насколько верно. По идее, если Selenide все отслеживает, он это сделать должен был. Вот это я так и не поняла.
С такой реализацией все ок. Но боюсь, что это просто "костыли"(
#9
Отправлено 14 мая 2020 - 16:08
Не,не, я ошибся, да надо классы в параллели.
Афтерметод - не надо, оставьте афтер класс. Всё должно работать:
===== Invoked methods ParallelStartBaseClass.setup()[pri:0, instance:TestClass2@5b275dab] 1529306539 ParallelStartBaseClass.setup()[pri:0, instance:TestClass1@523884b2] 1379435698 TestClass2.test1()[pri:0, instance:TestClass2@5b275dab] 1529306539 TestClass1.test3()[pri:0, instance:TestClass1@523884b2] 1379435698 TestClass1.test4()[pri:0, instance:TestClass1@523884b2] 1379435698 ParallelStartBaseClass.close()[pri:0, instance:TestClass1@523884b2] 1379435698 TestClass2.test2()[pri:0, instance:TestClass2@5b275dab] 1529306539 ParallelStartBaseClass.close()[pri:0, instance:TestClass2@5b275dab] 1529306539 ===== PASSED: test3 PASSED: test4 PASSED: test1 PASSED: test2
test1 и test2 - в одном потоке, 3 и 4 в другом
Версия селенида какая? обновите на 5.10.0
#10
Отправлено 14 мая 2020 - 16:21
Не,не, я ошибся, да надо классы в параллели.
Афтерметод - не надо, оставьте афтер класс. Всё должно работать:
===== Invoked methods ParallelStartBaseClass.setup()[pri:0, instance:TestClass2Tests@5b275dab] 1529306539 ParallelStartBaseClass.setup()[pri:0, instance:TestClass1Tests@523884b2] 1379435698 TestClass2Tests.test1()[pri:0, instance:TestClass2Tests@5b275dab] 1529306539 TestClass1Tests.test1()[pri:0, instance:TestClass1Tests@523884b2] 1379435698 TestClass1Tests.test2()[pri:0, instance:TestClass1Tests@523884b2] 1379435698 ParallelStartBaseClass.close()[pri:0, instance:TestClass1Tests@523884b2] 1379435698 TestClass2Tests.test2()[pri:0, instance:TestClass2Tests@5b275dab] 1529306539 ParallelStartBaseClass.close()[pri:0, instance:TestClass2Tests@5b275dab] 1529306539 =====Версия селенида какая? обновите на 5.10.0
Нет. Запустил 2 потока, а тесты в одном окне шпарит.
Вот реализация:
public class ParallelStartBaseClass { public ParallelStartBaseClass(){ super(); return; } @BeforeClass public void setup(){ System.out.println(Thread.currentThread().getName()); final DesiredCapabilities capabilities = DesiredCapabilities.chrome(); final ChromeOptions options = new ChromeOptions(); options.addArguments("--lang=en_EN", "--disable-notifications", "--window-size=1200,1080", "--disable-system-timezone-automatic-detection", "--local-timezone"); capabilities.setCapability(ChromeOptions.CAPABILITY, options); capabilities.setPlatform(Platform.ANY); try { WebDriverRunner.setWebDriver(new RemoteWebDriver(URI.create("http://localhost:5557/wd/hub").toURL(), capabilities)); } catch (MalformedURLException e) { e.printStackTrace(); } } @AfterClass public void close(){ closeWebDriver(); } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestProjectPDTC"> <test name="TestProjectPDTC" parallel="classes" thread-count="2" verbose="10"> <classes> <class name="ParallelStart.TestClassOne"/> <class name="ParallelStart.TwoTestClass"/> <class name="ParallelStart.ThreeTestClass"/> </classes> </test> </suite>
Тестовый класс для примера:
public class ThreeTestClass extends ParallelStartBaseClass { @Test public void OneTestThreeTestClass(){ Selenide.open("https://github.com/"); Selenide.sleep(15000); } @Test public void TwoTestThreeTestClass(){ Selenide.open("https://poi.apache.org/"); Selenide.sleep(15000); } @Test public void ThreeTestThreeTestClass() throws InterruptedException { Selenide.open("https://selenide.gitbooks.io/"); Thread.sleep(10000); } }
#11
Отправлено 14 мая 2020 - 16:29
Реализацию базового класса оставила, как Вы сказали, аннотации @AfterClass и @BeforeClass. Поменяла testng.xml, заменила classes на methods
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestProjectPDTC"> <test name="TestProjectPDTC" parallel="methods" thread-count="2" verbose="10"> <classes> <class name="ParallelStart.TestClassOne"/> <class name="ParallelStart.TwoTestClass"/> <class name="ParallelStart.ThreeTestClass"/> </classes> </test> </suite>
Пока заработало, так как надо. Сейчас гоняю в отладчике, ищу, что м б не так. Но вроде работает.
В любом случае, огромное спасибо Вам за помошь и реальные советы.
#12
Отправлено 14 мая 2020 - 17:21
Напишите тут для проверки как у вас вывелось:
===== Invoked methods
#13
Отправлено 14 мая 2020 - 17:41
Реализацию базового класса оставила, как Вы сказали, аннотации @AfterClass и @BeforeClass. Поменяла testng.xml, заменила classes на methods
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestProjectPDTC"> <test name="TestProjectPDTC" parallel="methods" thread-count="2" verbose="10"> <classes> <class name="ParallelStart.TestClassOne"/> <class name="ParallelStart.TwoTestClass"/> <class name="ParallelStart.ThreeTestClass"/> </classes> </test> </suite>Пока заработало, так как надо. Сейчас гоняю в отладчике, ищу, что м б не так. Но вроде работает.
В любом случае, огромное спасибо Вам за помошь и реальные советы.
В итоге, выставила число потоков >2 и о5 25. Возвращаюсь к варианту parallel="classes" и разбираюсь, что не так
#14
Отправлено 14 мая 2020 - 18:22
Ещё раз.
У меня заработало так - <test name="TestProjectPDTC" parallel="classes" thread-count="2" verbose="10">
С Параллель-метод - работает некорректно.
Получил что тесты 1-2 и 3-4 (из разных class name=) работают в разных потоках:
===== Invoked methods ParallelStartBaseClass.setup()[pri:0, instance:TestClass2@5b275dab] 1529306539 ParallelStartBaseClass.setup()[pri:0, instance:TestClass1@523884b2] 1379435698 TestClass1.test1()[pri:0, instance:TestClass1@523884b2] 1379435698 TestClass2.test3()[pri:0, instance:TestClass2@5b275dab] 1529306539 TestClass1.test2()[pri:0, instance:TestClass1@523884b2] 1379435698 ParallelStartBaseClass.close()[pri:0, instance:TestClass1@523884b2] 1379435698 TestClass2.test4()[pri:0, instance:TestClass2@5b275dab] 1529306539 ParallelStartBaseClass.close()[pri:0, instance:TestClass2@5b275dab] 1529306539 =====
#15
Отправлено 14 мая 2020 - 19:24
Ещё раз.
У меня заработало так - <test name="TestProjectPDTC" parallel="classes" thread-count="2" verbose="10">
С Параллель-метод - работает некорректно.
Получил что тесты 1-2 и 3-4 (из разных class name=) работают в разных потоках:
===== Invoked methods ParallelStartBaseClass.setup()[pri:0, instance:TestClass2@5b275dab] 1529306539 ParallelStartBaseClass.setup()[pri:0, instance:TestClass1@523884b2] 1379435698 TestClass1.test1()[pri:0, instance:TestClass1@523884b2] 1379435698 TestClass2.test3()[pri:0, instance:TestClass2@5b275dab] 1529306539 TestClass1.test2()[pri:0, instance:TestClass1@523884b2] 1379435698 ParallelStartBaseClass.close()[pri:0, instance:TestClass1@523884b2] 1379435698 TestClass2.test4()[pri:0, instance:TestClass2@5b275dab] 1529306539 ParallelStartBaseClass.close()[pri:0, instance:TestClass2@5b275dab] 1529306539 =====
Запустила в 2 потока с
<test name="TestProjectPDTC" parallel="classes" thread-count="2" verbose="10">
все отработало PASSED, но запускается только одно окно браузера, и с ним последовательно работают потоки. А надо параллельно.
Ниже лог из консоли Идеи (3 тестовых класса в 2 потока):
===== Invoked methods ParallelStartBaseClass.setup()[pri:0, instance:ParallelStart.TestClassOne@3c0f93f1] 1007653873 ParallelStartBaseClass.setup()[pri:0, instance:ParallelStart.TwoTestClass@31dc339b] 836514715 TwoTestClass.ThreeTestTwoTestClass()[pri:0, instance:ParallelStart.TwoTestClass@31dc339b] 836514715 ParallelStartBaseClass.close()[pri:0, instance:ParallelStart.TwoTestClass@31dc339b] 836514715 ParallelStartBaseClass.setup()[pri:0, instance:ParallelStart.ThreeTestClass@544fe44c] 1414521932 TestClassOne.OneTestOneTestClass()[pri:0, instance:ParallelStart.TestClassOne@3c0f93f1] 1007653873 TestClassOne.ThreeTestOneTestClass()[pri:0, instance:ParallelStart.TestClassOne@3c0f93f1] 1007653873 TestClassOne.TwoTestOneTestClass()[pri:0, instance:ParallelStart.TestClassOne@3c0f93f1] 1007653873 ParallelStartBaseClass.close()[pri:0, instance:ParallelStart.TestClassOne@3c0f93f1] 1007653873 ThreeTestClass.OneTestThreeTestClass()[pri:0, instance:ParallelStart.ThreeTestClass@544fe44c] 1414521932 ThreeTestClass.ThreeTestThreeTestClass()[pri:0, instance:ParallelStart.ThreeTestClass@544fe44c] 1414521932 ThreeTestClass.TwoTestThreeTestClass()[pri:0, instance:ParallelStart.ThreeTestClass@544fe44c] 1414521932 ParallelStartBaseClass.close()[pri:0, instance:ParallelStart.ThreeTestClass@544fe44c] 1414521932 =====
#16
Отправлено 14 мая 2020 - 22:01
Вы, наверно устали просто, и не замечаете что у вас открывается 2 окна браузера )) Вы сдвиньте одно окно, под ним будет ещё одно.
По логу всё корректно, всё отработало.
У вас сначала запустились в двух потоках TestClassOne и TwoTestClass, т.к. TwoTestClass имеет только 1 тест, он быстро отработал и закрылся, и запустился ThreeTestClass в другом потоке.
#17
Отправлено 15 мая 2020 - 09:15
Вы, наверно устали просто, и не замечаете что у вас открывается 2 окна браузера )) Вы сдвиньте одно окно, под ним будет ещё одно.
По логу всё корректно, всё отработало.
У вас сначала запустились в двух потоках TestClassOne и TwoTestClass, т.к. TwoTestClass имеет только 1 тест, он быстро отработал и закрылся, и запустился ThreeTestClass в другом потоке.
Добрый день!
Как бы я хотела, чтобы Вы были правы, но увы. Для теста добавила в каждый тестовый метод добавила Selenide.sleep(30000);
Чтобы тест выполнялся медленнее и можно было отловить открытие окон браузера. Вижу что 2 процесса запустилось, 1 окно открылось. Один тест выполняется в браузере, второй setup() ждет и выполняется только после того, как выполниться другой тест. На скрине видно.
https://snipboard.io/8UHPN3.jpg
#18
Отправлено 15 мая 2020 - 10:14
А пом ваш покажите?
Я так запускаю:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> <configuration> <suiteXmlFiles>testng.xml</suiteXmlFiles> <argLine> -javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar </argLine> </configuration> <dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj.version}</version> </dependency> </dependencies> </plugin>
#19
Отправлено 15 мая 2020 - 12:36
А пом ваш покажите?
Я так запускаю:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> <configuration> <suiteXmlFiles>testng.xml</suiteXmlFiles> <argLine> -javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar </argLine> </configuration> <dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj.version}</version> </dependency> </dependencies> </plugin>
Pom такой:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> <configuration> <reportsDirectory>${basedir}/testng-output</reportsDirectory> <!--<testFailureIgnore>true</testFailureIgnore>--> <suiteXmlFiles> <suiteXmlFile>${suiteXmlFile}.xml</suiteXmlFile> </suiteXmlFiles> <argLine> -javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar </argLine> </configuration> <dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj.version}</version> </dependency> </dependencies> </plugin>
Для aspectj.version
<aspectj.version>1.9.4</aspectj.version>
Может другие настройки нужны, чтоб потоки в разных окнах браузера запускались?
#20
Отправлено 15 мая 2020 - 12:51
Ничего криминального не вижу.
Я в гифке всё показал, ищите разницу вашего кода с моим.
Я запускаю командой mvn test без всяких доп настроек. А у вас в Идее профиль какой-то сохранён на запуск теста, вот надо смотреть там настройки.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных