За да разберем как да изпълняваме скриптове паралелно, нека първо разберем
Защо се нуждаем от обработка на сесии?
По време на тестовото изпълнение Selenium WebDriver трябва да взаимодейства през цялото време с браузъра, за да изпълнява зададени команди. По време на изпълнението също е възможно, преди да завърши текущото изпълнение, някой друг да започне изпълнението на друг скрипт, в същата машина и в същия тип браузър.
В такава ситуация се нуждаем от механизъм, чрез който двете ни различни екзекуции да не се припокриват помежду си. Това може да се постигне, като се обработва сесия в селен.
Как да постигна обработка на сесии в Selenium WebDriver?
Ако проверите изходния код на Selenium WebDriver, ще намерите променлива, наречена „sessionId“. Винаги, когато създаваме нов екземпляр на обект WebDriver, ще се генерира нов 'sessionId' и се прикачва с конкретния Firefox / Chrome / IE Driver ().
Така че всичко, което правим след това, ще се изпълнява само в конкретната сесия на браузъра Firefox.
Тъй като това е вградена функционалност, няма изрична необходимост да се присвоява идентификатор на сесията
Пример за код: Тук ще бъдат генерирани две различни сесии за две различни WebDriver.
импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.firefox.FirefoxDriver;публична класа SessionHandling {публична статична невалидна главна (низ ... низове) {// Първа сесия на WebDriverДрайвер за WebDriver = нов FirefoxDriver ();// Отидете на сайта guru99driver.get ("http://demo.guru99.com/V4/");// Втора сесия на WebDriverДрайвер на WebDriver2 = нов FirefoxDriver ();// Отидете на сайта guru99driver2.get ("http://demo.guru99.com/V4/");}}
Как да стартирате паралелни тестове със селен
Има ситуации, в които искате да стартирате няколко теста едновременно.
В такива случаи може да се използва "паралелен" атрибут
Паралелният атрибут на етикета на пакета може да приеме четири стойности:
тестове | Всички тестови случаи в тега |
класове | Всички тестови случаи в Java клас ще работят паралелно |
методи | Всички методи с анотация @Test ще се изпълняват паралелно. |
инстанции | Тестовите случаи в един и същ екземпляр ще се изпълняват паралелно, но два метода на два различни екземпляра ще работят в различна нишка. |
Атрибутът брой конци ви позволява да посочите колко нишки трябва да бъдат разпределени за това изпълнение.
Пълен пример: В този пример три тестови случая ще работят паралелно и ще попълнят данните за вход в http://demo.guru99.com
Пълният проект ще изглежда така:
TestGuru99MultipleSession.java
импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.chrome.ChromeDriver;внос org.testng.annotations.Test;публичен клас TestGuru99MultipleSession {@Тестpublic void executSessionOne () {// Първа сесия на WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Драйвер за WebDriver = нов ChromeDriver ();// Отидете на сайта guru99driver.get ("http://demo.guru99.com/V4/");// намираме текстовото поле на потребителско име и го попълвамеdriver.findElement (By.name ("uid")). sendKeys ("Driver 1");}@Тестpublic void executeSessionTwo () {// Втора сесия на WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Драйвер за WebDriver = нов ChromeDriver ();// Отидете на сайта guru99driver.get ("http://demo.guru99.com/V4/");// намираме текстовото поле на потребителско име и го попълвамеdriver.findElement (By.name ("uid")). sendKeys ("Driver 2");}@Тестpublic void executSessionThree () {// Трета сесия на WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Драйвер за WebDriver = нов ChromeDriver ();// Отидете на сайта guru99driver.get ("http://demo.guru99.com/V4/");// намираме текстовото поле на потребителско име и го попълвамеdriver.findElement (By.name ("uid")). sendKeys ("Driver 3");}}
ТестNG.XML
xml version = "1.0" encoding = "UTF-8"?><класове>
Ред и зависимост на тестовия случай
Можете да зададете ред и зависимост от изпълнението на тестовия случай.
Да предположим, че имате два тестови случая, 'testGuru99TC1' и 'testGuru99TC2' и искате да изпълните тестовия случай 'testGuru99TC2' преди 'testGuru99TC1'. В този случай ще използваме атрибута 'dependOnMethods', за да направим зависимост и ред на изпълнение.
xml version = "1.0" encoding = "UTF-8"?><класове> <включва стойност = "testGuru99TC1" dependOnMethods = "testGuru99TC2" /><включва стойност = "testGuru99TC2" />
Обобщение
- Създава се нов идентификатор на сесия за нов екземпляр на WebDriver.
- Една сесия ще се свърже с един конкретен браузър.
- Използвайки нишка на атрибут и паралел, вие изпълнявате вашите скриптове паралелно.
- Можете да използвате зависимост от атрибути, за да зададете реда за тестване на изпълнението