Паралелно изпълнение в селен: Обработка на сесии & Зависимост на TestNG

Съдържание:

Anonim

За да разберем как да изпълняваме скриптове паралелно, нека първо разберем

Защо се нуждаем от обработка на сесии?

По време на тестовото изпълнение 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/");}}

Как да стартирате паралелни тестове със селен

Има ситуации, в които искате да стартирате няколко теста едновременно.

В такива случаи може да се използва "паралелен" атрибут

Паралелният атрибут на етикета на пакета може да приеме четири стойности:

тестове Всички тестови случаи в тега на тествания xml файл ще работят паралелно.
класове Всички тестови случаи в 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

<класове>

Ред и зависимост на тестовия случай

Можете да зададете ред и зависимост от изпълнението на тестовия случай.

Да предположим, че имате два тестови случая, 'testGuru99TC1' и 'testGuru99TC2' и искате да изпълните тестовия случай 'testGuru99TC2' преди 'testGuru99TC1'. В този случай ще използваме атрибута 'dependOnMethods', за да направим зависимост и ред на изпълнение.

<класове><включва стойност = "testGuru99TC1" dependOnMethods = "testGuru99TC2" /><включва стойност = "testGuru99TC2" />

Обобщение

  • Създава се нов идентификатор на сесия за нов екземпляр на WebDriver.
  • Една сесия ще се свърже с един конкретен браузър.
  • Използвайки нишка на атрибут и паралел, вие изпълнявате вашите скриптове паралелно.
  • Можете да използвате зависимост от атрибути, за да зададете реда за тестване на изпълнението