Best Testng code snippet using org.testng.Interface ITestResult.getInstance
Source:RulesListener.java  
...17        public void apply(T arg);18    }19    @Override20    public void run(IHookCallBack callBack, ITestResult testResult) {21        List<IHookable> hookables = getRules(testResult.getInstance(),22                IHookable.class);23        if (hookables.isEmpty()) {24            callBack.runTestMethod(testResult);25        } else {26            IHookable hookable = hookables.get(0);27            hookables.remove(0);28            for (IHookable iHookable : hookables) {29                hookable = compose(hookable, iHookable);30            }31            hookable.run(callBack, testResult);32        }33    }34    private IHookable compose(final IHookable first, final IHookable second) {35        return new IHookable() {36            @Override37            public void run(final IHookCallBack callBack,38                    final ITestResult testResult) {39                first.run(new IHookCallBack() {40                    @Override41                    public void runTestMethod(ITestResult testResult) {42                        second.run(callBack, testResult);43                    }44                    @Override45                    public Object[] getParameters() {46                        return callBack.getParameters();47                    }48                }, testResult);49            }50        };51    }52    private <T> List<T> getRules(Object object, Class<T> type) {53        List<T> rules = new ArrayList<T>();54        Field[] declaredFields = object.getClass().getFields();55        for (Field field : declaredFields) {56            TestNGRule annotation = field.getAnnotation(TestNGRule.class);57            if (annotation != null) {58                try {59                    Object fieldContent = field.get(object);60                    if (type.isAssignableFrom(field.getType())) {61                        @SuppressWarnings("unchecked")62                        T rule = (T) fieldContent;63                        rules.add(rule);64                    }65                } catch (Exception e) {66                    e.printStackTrace();67                }68            }69        }70        return rules;71    }72    @Override73    public void onTestStart(final ITestResult result) {74        executeRulesForInstance(new Function0<ITestListener>() {75            @Override76            public void apply(ITestListener listener) {77                listener.onTestStart(result);78            }79        }, result.getInstance());80    }81    @Override82    public void onTestSuccess(final ITestResult result) {83        executeRulesForInstance(new Function0<ITestListener>() {84            @Override85            public void apply(ITestListener listener) {86                listener.onTestSuccess(result);87            }88        }, result.getInstance());89    }90    @Override91    public void onTestFailure(final ITestResult result) {92        executeRulesForInstance(new Function0<ITestListener>() {93            @Override94            public void apply(ITestListener listener) {95                listener.onTestFailure(result);96            }97        }, result.getInstance());98    }99    @Override100    public void onTestSkipped(final ITestResult result) {101        executeRulesForInstance(new Function0<ITestListener>() {102            @Override103            public void apply(ITestListener listener) {104                listener.onTestSkipped(result);105            }106        }, result.getInstance());107    }108    @Override109    public void onTestFailedButWithinSuccessPercentage(final ITestResult result) {110        executeRulesForInstance(new Function0<ITestListener>() {111            @Override112            public void apply(ITestListener listener) {113                listener.onTestFailedButWithinSuccessPercentage(result);114            }115        }, result.getInstance());116    }117    @Override118    public void onStart(final ITestContext context) {119        executeRulesForContext(context,120                new Function0<ITestListener>() {121                    @Override122                    public void apply(ITestListener listener) {123                        listener.onStart(context);124                    }125                });126    }127    @Override128    public void onFinish(final ITestContext context) {129        executeRulesForContext(context, new Function0<ITestListener>() {130            @Override131            public void apply(ITestListener listener) {132                listener.onFinish(context);133            }134        });135    }136    private void executeRulesForContext(ITestContext context,137            Function0<ITestListener> action) {138        ITestNGMethod[] allTestMethods = context.getAllTestMethods();139        Set<Object> testInstances = new HashSet<Object>();140        for (ITestNGMethod iTestNGMethod : allTestMethods) {141            testInstances.addAll(Arrays.asList(iTestNGMethod.getInstances()));142        }143        for (Object instance : testInstances) {144            executeRulesForInstance(action, instance);145        }146    }147    private void executeRulesForInstance(Function0<ITestListener> action,148            Object allInst) {149        List<ITestListener> hookables = getRules(allInst, ITestListener.class);150        for (ITestListener listener : hookables) {151            action.apply(listener);152        }153    }154}...Source:TestCaseUtility.java  
...69            }70            // If we are here, then it means it is a data driven test but71            // factories may be involved. So we need to check if the test class72            // implements IECase interface73            Object testClassInstance = result.getMethod().getInstance();74            if (testClassInstance instanceof IECase) {75                attribute = ((IECase) testClassInstance).geteCase();76            }77        }78        result.setAttribute("eCaseID", attribute);79//        // logger.exiting();80    }81	/**82	 * This method essentially helps the CatPaw Framework identify if a particular method that makes use of83	 * DataProvider is intending to use CatPaw Framework comprehensible Data Driven Approach or not.84	 * 85	 * @param result86	 *            - A result object of type {@link ITestResult}87	 * @return - A boolean that indicates of the result represents a method that is using CatPaw Framework defined Data88	 *         Driven approach or not.89	 */90	private static boolean isCatPawDataDriven(final ITestResult result) {91		// logger.entering(result);92		boolean isDataDriven = false;93		if (result.getParameters().length == 1) {94			if (IECase.class.isAssignableFrom(result.getParameters()[0].getClass())) {95				// logger.exiting(true);96		        return true;97			}98		}99		//Assuming it wasn't a regular data driven, lets check if Factories were used.100		Object testClassInstance = result.getMethod().getInstance();101		if (testClassInstance instanceof IECase){102		    isDataDriven = true;103		}104		// logger.exiting(isDataDriven);105		return isDataDriven;106	}107	/**108	 * This method iterates through a {@link IResultMap} and returns a list of {@link ITestResult}109	 * 110	 * @param results111	 *            - an object of type {@link IResultMap}112	 * @return - a list of test results of type {@link ITestResult}113	 */114	public static List<ITestResult> fetchTests(IResultMap results) {...Source:TestListener.java  
...74		 * log.debug("Entering TestListener.onTestFailure method " +75		 * getTestMethodName(iTestResult) + " failed");76		 * 77		 * // Get driver from BaseTest and assign to local webdriver variable. Object78		 * testClass = iTestResult.getInstance(); WebDriver webDriver = ((WebTest)79		 * testClass).getDriver();80		 * 81		 * // Take base64Screenshot screenshot. String base64Screenshot =82		 * "data:image/png;base64," + ((TakesScreenshot)83		 * webDriver).getScreenshotAs(OutputType.BASE64);84		 * 85		 * // Extentreports log and screenshot operations for failed tests.86		 * ExtentTestManager.getTest().log(LogStatus.FAIL, "Test Failed",87		 * ExtentTestManager.getTest().addBase64ScreenShot(base64Screenshot));88		 */89	}90	/* (non-Javadoc)91	 * @see org.testng.ITestListener#onTestSkipped(org.testng.ITestResult)92	 */...Source:TestListenerFailPass.java  
...59		try {60			FileUtils.copyFile(scrFile, new File(destDir + "/" + destFile));61		} catch (IOException e) {62			e.printStackTrace();63			System.out.println("Could not take screenshot on failure"+ tr.getInstance());//getInstanceName =package+className64			log.debug("Could not take screenshot on failure"+ tr.getInstance());//getInstanceName =package+className65		}66		//Reporter.setEscapeHtml(false);67		Reporter.log("Saved <a href=../screenshot/FAIL/" + destFile + ">Screenshot</a>");68	}69	@Override70	public void onTestSkipped(ITestResult tr) {71		log("Skipped test");72		Reporter.log("Skipped test to avoid test failure due to dependency");73	}74	@Override75	public void onTestSuccess(ITestResult tr) {76		//log("Pass");77	driver = WebDriverManager.getDriverInstance();78		File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);79		DateFormat dateFormat = new SimpleDateFormat("dd_MMM_yyyy__hh_mm_ssaa");80		String destDir = System.getProperty("user.dir")+passPath;81		new File(destDir).mkdirs();82		String destFile = dateFormat.format(new Date()) + ".png";83		try {84			FileUtils.copyFile(scrFile, new File(destDir + "/" + destFile));85		} catch (IOException e) {86			e.printStackTrace();87			System.out.println("Could not take screenshot on success"+ tr.getInstance());//getInstanceName =package+className88			log.debug("Could not take screenshot on success"+ tr.getInstance());//getInstanceName =package+className89		}90		//Reporter.setEscapeHtml(false);91		Reporter.log("Saved <a href=../screenshot/PASS/" + destFile + ">Screenshot</a>");92	}93	private void log(String string) {94		System.out.print(string);95		if (++m_count % 40 == 0) {96			System.out.println("");97		}98	}99	100	101	public void onFinish(ISuite suite)102	every time testng finished running a testsuite it should create a folder  - label it with suite name and date of run...Source:AllureListener.java  
...23        // 1ãä¿è¯@Testæ³¨è§£æ æ³¨çæµè¯æ¹æ³è½å¤æ£å¸¸è¿è¡24        iHookCallBack.runTestMethod(iTestResult);25        // 2ã夿ç¨ä¾ç»ææ¯å¦æ£å¸¸26        if (iTestResult.getThrowable() != null) {27            // iTestResultåæ°æä¾äºAPI getInstance è·åå½åæµè¯ç±»çå®ä¾ï¼å¯¹è±¡ï¼28            BaseTest baseTest = (BaseTest) iTestResult.getInstance();29            // æ ¹æ®baseTestå¾å°driver30            WebDriver driver = baseTest.driver;31            // æªå¾å¹¶ææªå¾åµå
¥å°Allureæ¥è¡¨ä¸32            TakesScreenshot takesScreenshot = (TakesScreenshot) driver;33            // åæ°OutputTypeï¼æªå¾çç±»å34            byte[] screenShot = takesScreenshot.getScreenshotAs(OutputType.BYTES);35            saveScreenshot(screenShot);36        }37    }38    // @Attachment éä»¶39    // valueåæ°æ¯ä¸ºä½ çéä»¶çåå typeåæ°æ¯ä¸ºä½ çéä»¶ç±»å40    @Attachment(value = "Java screenshot", type = "image/png")41    public byte[] saveScreenshot(byte[] screenShot) {42        return screenShot;...Source:TestReportListener.java  
...29    /*On success, screenshot is added just for additional reference in future*/30    @Override31    public void onTestSuccess(ITestResult iTestResult) {32        LOGGER.info(getMethodNameUnderExecution(iTestResult) + " test is succeeded.");33        Object testClass = iTestResult.getInstance();34        WebDriver driver = ((TestCore) testClass).getDriver();35        saveScreenshotPNG(driver);36    }37    @Override38    public void onTestFailure(ITestResult iTestResult) {39        LOGGER.info(getMethodNameUnderExecution(iTestResult) + " test is failed.");40        Object testClass = iTestResult.getInstance();41        WebDriver driver = ((TestCore) testClass).getDriver();42        saveScreenshotPNG(driver);43    }44    @Override45    public void onTestSkipped(ITestResult iTestResult) {46        Method method = iTestResult.getMethod().getConstructorOrMethod().getMethod();47        if (method != null && method.isAnnotationPresent(Issues.class)48                && Arrays.asList(method.getAnnotation(Issues.class).value()).isEmpty()) {49            ArrayList<String> issues = new ArrayList<>();50            Arrays.asList(method.getAnnotation(Issues.class).value()).forEach(issue -> issues.add(issue.value()));51            throw new SkipException(String.format("Execution Condition failure::: %s ::: Skipping this test", issues));52        }53    }54}...Source:Listeners.java  
...26		String testMethodName = result.getMethod().getMethodName();27		try {28			Field f = result.getTestClass().getRealClass().getDeclaredField("driver");29			f.setAccessible(true);30			driver = (WebDriver) f.get(result.getInstance());31			objectOfThreadLocal.get().addScreenCaptureFromPath(getScreenShotPath(testMethodName, driver),32					result.getMethod().getMethodName());33		} catch (Exception e) {34			System.out.println(e);35		}36	}37	/*38	 * This is the method of ITestListener interface which needs to be39	 * implemented40	 */41	public void onFinish(ITestContext context) {42		// TODO Auto-generated method stub43		objectOfExtentReports.flush();44	}...Source:GenerateReport.java  
...33			// fetching the driver object from failed test case class34			WebDriver driver = null;35			threadTestHandler.get().fail(result.getThrowable());36			try {37				driver = (WebDriver) result.getTestClass().getRealClass().getField("driver").get(result.getInstance());38			} catch (Exception e) {39				// TODO Auto-generated catch block40				System.out.println(driver);41				e.printStackTrace();42			}43			String testMethodName = result.getMethod().getMethodName();44			try {45				threadTestHandler.get().addScreenCaptureFromPath(getScreenShot(testMethodName, driver), testMethodName);46			} catch (IOException e) {47				// TODO Auto-generated catch block48				e.printStackTrace();49			}		50			51		}...getInstance
Using AI Code Generation
1import org.testng.ITestResult;2public class TestNGITestResult {3	public static void main(String[] args) {4		ITestResult result = ITestResult.getInstance();5		System.out.println(result);6	}7}getInstance
Using AI Code Generation
1public class TestNGListener implements ITestListener {2    private static final Logger LOGGER = LogManager.getLogger(TestNGListener.class);3    private static final String FILE_NAME = "testng-results.html";4    private static final String FILE_PATH = "target/surefire-reports/";5    private static final String FILE_PATH_AND_NAME = FILE_PATH + FILE_NAME;6    private static final String FILE_PATH_AND_NAME_2 = FILE_PATH + "testng-results2.html";7    private static final String FILE_PATH_AND_NAME_3 = FILE_PATH + "testng-results3.html";8    private static final String FILE_PATH_AND_NAME_4 = FILE_PATH + "testng-results4.html";9    private static final String FILE_PATH_AND_NAME_5 = FILE_PATH + "testng-results5.html";10    private static final String FILE_PATH_AND_NAME_6 = FILE_PATH + "testng-results6.html";11    private static final String FILE_PATH_AND_NAME_7 = FILE_PATH + "testng-results7.html";12    private static final String FILE_PATH_AND_NAME_8 = FILE_PATH + "testng-results8.html";13    private static final String FILE_PATH_AND_NAME_9 = FILE_PATH + "testng-results9.html";14    private static final String FILE_PATH_AND_NAME_10 = FILE_PATH + "testng-results10.html";15    private static final String FILE_PATH_AND_NAME_11 = FILE_PATH + "testng-results11.html";16    private static final String FILE_PATH_AND_NAME_12 = FILE_PATH + "testng-results12.html";17    private static final String FILE_PATH_AND_NAME_13 = FILE_PATH + "testng-results13.html";18    private static final String FILE_PATH_AND_NAME_14 = FILE_PATH + "testng-results14.html";19    private static final String FILE_PATH_AND_NAME_15 = FILE_PATH + "testng-results15.html";20    private static final String FILE_PATH_AND_NAME_16 = FILE_PATH + "testng-results16.html";21    private static final String FILE_PATH_AND_NAME_17 = FILE_PATH + "testng-results17.html";22    private static final String FILE_PATH_AND_NAME_18 = FILE_PATH + "testng-results18.html";23    private static final String FILE_PATH_AND_NAME_19 = FILE_PATH + "testng-results19.html";24    private static final String FILE_PATH_AND_NAME_20 = FILE_PATH + "testng-results20.html";TestNG is a Java-based open-source framework for test automation that includes various test types, such as unit testing, functional testing, E2E testing, etc. TestNG is in many ways similar to JUnit and NUnit. But in contrast to its competitors, its extensive features make it a lot more reliable framework. One of the major reasons for its popularity is its ability to structure tests and improve the scripts' readability and maintainability. Another reason can be the important characteristics like the convenience of using multiple annotations, reliance, and priority that make this framework popular among developers and testers for test design. You can refer to the TestNG tutorial to learn why you should choose the TestNG framework.
You can push your abilities to do automated testing using TestNG and advance your career by earning a TestNG certification. Check out our TestNG certification.
Watch this complete tutorial to learn how you can leverage the capabilities of the TestNG framework for Selenium automation testing.
Get 100 minutes of automation test minutes FREE!!
