ITestContext TestNG Interface: In this post, we will discuss one crucial ITestContext TestNG Interface in detail. Sometimes, in the test script, we need to share the objects with different test cases during the execution. To handle such scenarios, we can take the help of the ITestContext TestNG Interface.
So, using the TestNG framework, ITestContext stores and shares data across the tests in Selenium.
TestNG offers a means of storing and retrieving objects between tests through the ITestContext interface. This interface allows you to store using the inherited setAttribute() method and retrieve using getAttribute() objects.
ITestContext TestNG Interface
Since the ITestContext is created once and remains active for your test run, this is the perfect way to implement object sharing in your test suite. Making the ITestContext available in your test methods is easy: pass it as a parameter to your test method.
Let’s Go through one scenario and try to understand how you can use TestNG:
Suppose we have 10 Test Cases or the 10 @Test method in a Class, which covers the end-to-end scenario. Now, all 10 Test cases share some data, for example, Customer_id, which is unique, and the same value should be used for the end-to-end scenario.
We Can handle this in 2 ways:
- If all the test cases are in a class, we can create and share a Class-level variable. But it requires high maintenance.
- Use ITestContext
Let us understand how we can handle such a scenario using ITestContext:
As we mentioned above, we can use the ITestContext by passing as a parameter to any test method like below:
@Test public void test1a(ITestContext context) { }
You can set the value for ITestContext TestNG Interface by using the setAttribute() method like below:
@Test public void test1a(ITestContext context) { String Customer_id = "C11012034"; context.setAttribute("CustID", Customer_id); }
Now we need to retrieve the value from the ITestContext by using the getAttribute() method and use it as per our requirement like below:
String Customer_id1 = (String) context.getAttribute("CustID");
Sample TestNG Class:
package com.softwaretestingo.testng.itestcontext; import org.testng.ITestContext; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class ITestContextTest { @BeforeTest public void SetData(ITestContext context) { String Customer_id = "C11012034"; context.setAttribute("CustID", Customer_id); System.out.println("Value is stored in ITestContext"); System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++"); } @Test public void Test1a(ITestContext context) { String Customer_id1 = (String) context.getAttribute("CustID"); System.out.println("In Test1, Value stored in context is: "+Customer_id1); System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++"); } @Test public void Test2a(ITestContext context) { String Customer_id1 = (String) context.getAttribute("CustID"); System.out.println("In Test2, Value stored in context is: "+Customer_id1); System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++"); } }
Output:
Value is stored in ITestContext +++++++++++++++++++++++++++++++++++++++++++++++++ In Test1, Value stored in context is: C11012034 +++++++++++++++++++++++++++++++++++++++++++++++++ In Test2, Value stored in context is: C11012034 +++++++++++++++++++++++++++++++++++++++++++++++++ =============================================== Default test Tests run: 2, Failures: 0, Skips: 0 =============================================== =============================================== Default suite Total tests run: 2, Passes: 2, Failures: 0, Skips: 0 ===============================================
Note: All the @Test methods we will run must be in one class only.