TestNG Tutorial
Parallel Execution In TestsNG
What Is Parallel Execution In TestNG ?
TestNG allows to run the multiple tests simultaniously rather than one after another. Not only tests, even methods, classes and instances can be run in parallel. In .xml an attribute 'parallel' is used to run the tests in parallel. The value of this attribute have to specified as per requirement. Values taken by attribute parallel :
methods - It will run all test methos of classes in parallel.
classes - It will run all the classes present inside <classes> tag in parallel.
tests - It will run all the test cases present within <test> tag in parallel
instances - It will run all the test cases of that instance in parallel.
Threads in testNG :
Threads implies the division of test execution in modules to run in parallel. In testNG an attribute thread-count that accepts an interger type value, is used in .xml to achieve multithreading. The number of threads depends on the number test cases.
Syntax :
<test name="Paralel-Tests" parallel="classes" thread-count="2">
*The deafault value of thread-count is '5' , hence there's no need to specify thread-count, if the number of test casses is below 5.
Example of method execution in parallel :
<test name="Paralel-Tests" parallel="methods">
Write test methods to run simultaniously =>
package testNGexamples; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; public class ParallelMethods { WebDriver driver; @Test public void chromeTest() { System.setProperty("webdriver.chrome.driver", "..\\TestNGSelenium\\drivers\\chromedriver99.exe"); driver = new ChromeDriver(); driver.close(); } @Test public void firefoxTest() { System.setProperty("webdriver.gecko.driver", "..\\TestNGSelenium\\drivers\\geckodriver.exe"); driver = new FirefoxDriver(); driver.close(); } }
Create .xml for parallel execution =>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Parallel Test-Suite"> <test name="Paralel-Tests" parallel="methods"> <classes> <class name="testNGexamples.ParallelMethods"></class> </classes> </test> </suite>
Example of class execution in parallel :
<test name="Paralel-Tests" parallel="classes" thread-count="2">
Create two classes to run in parallel =>
Class1 :
package testNGexamples;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
public class Class1 {
WebDriver driver;
@Test
public void chromeTest() {
System.setProperty("webdriver.chrome.driver", "..\\TestNGSelenium\\drivers\\chromedriver99.exe");
driver = new ChromeDriver();
driver.quit();
}
}
Class2 :
package testNGexamples;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
public class Class2 {
WebDriver driver;
@Test
public void firefoxTest() {
System.setProperty("webdriver.gecko.driver", "..\\TestNGSelenium\\drivers\\geckodriver.exe");
driver = new FirefoxDriver();
driver.quit();
}
}
.xml :
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Parallel Test-Suite">
<test name="Paralel-Tests" parallel="classes" thread-count="2">
<classes>
<class name="testNGexamples.Class1"></class>
<class name="testNGexamples.Class2"></class>
</classes>
</test>
</suite>
Parallel testing at suite level : We can run all the tests inside the suite at the same time with the value of parallel attribute changed to 'tests'.
<suite name="Parallel Test-Suite" parallel="tests" thread-count="3">
Example :
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Parallel Test-Suite" parallel="tests" thread-count="3"> <test name="Paralel-Tests-1"> <classes> <class name="testNGexamples.Class1"></class> </classes> </test> <test name="Paralel-Tests-2"> <classes> <class name="testNGexamples.Class3"></class> <class name="testNGexamples.Class4"></class> </classes> </test> </suite>