Best Testng code snippet using org.testng.DataProviderHolder.addListeners
Source:TestNG.java
...783 //784 // Install the listeners found in the suites785 //786 for (XmlSuite s : m_suites) {787 addListeners(s);788 //789 // Install the method selectors790 //791 for (XmlMethodSelector methodSelector : s.getMethodSelectors()) {792 addMethodSelector(methodSelector.getClassName(), methodSelector.getPriority());793 addMethodSelector(methodSelector);794 }795 //796 // Find if we have an object factory797 //798 if (s.getObjectFactory() != null) {799 if (factory == null) {800 factory = s.getObjectFactory();801 } else {802 throw new TestNGException("Found more than one object-factory tag in your suites");803 }804 }805 }806 m_configuration.setAnnotationFinder(new JDK15AnnotationFinder(getAnnotationTransformer()));807 m_configuration.setHookable(m_hookable);808 m_configuration.setConfigurable(m_configurable);809 m_configuration.setObjectFactory(factory);810 m_configuration.setAlwaysRunListeners(this.m_alwaysRun);811 m_configuration.setExecutorFactory(getExecutorFactory());812 }813 private void addListeners(XmlSuite s) {814 for (String listenerName : s.getListeners()) {815 Class<?> listenerClass = ClassHelper.forName(listenerName);816 // If specified listener does not exist, a TestNGException will be thrown817 if (listenerClass == null) {818 throw new TestNGException(819 "Listener " + listenerName + " was not found in project's classpath");820 }821 ITestNGListener listener = (ITestNGListener) InstanceCreator.newInstance(listenerClass);822 addListener(listener);823 }824 // Add the child suite listeners825 List<XmlSuite> childSuites = s.getChildSuites();826 for (XmlSuite c : childSuites) {827 addListeners(c);828 }829 }830 /** Using reflection to remain Java 5 compliant. */831 private void addServiceLoaderListeners() {832 Iterable<ITestNGListener> loader =833 m_serviceLoaderClassLoader != null834 ? ServiceLoader.load(ITestNGListener.class, m_serviceLoaderClassLoader)835 : ServiceLoader.load(ITestNGListener.class);836 for (ITestNGListener l : loader) {837 Utils.log("[TestNG]", 2, "Adding ServiceLoader listener:" + l);838 addListener(l);839 addServiceLoaderListener(l);840 }841 }842 /**843 * Before suites are executed, do a sanity check to ensure all required conditions are met. If844 * not, throw an exception to stop test execution845 *846 * @throws TestNGException if the sanity check fails847 */848 private void sanityCheck() {849 XmlSuiteUtils.validateIfSuitesContainDuplicateTests(m_suites);850 XmlSuiteUtils.adjustSuiteNamesToEnsureUniqueness(m_suites);851 }852 /** Invoked by the remote runner. */853 public void initializeEverything() {854 // The Eclipse plug-in (RemoteTestNG) might have invoked this method already855 // so don't initialize suites twice.856 if (m_isInitialized) {857 return;858 }859 initializeSuitesAndJarFile();860 initializeConfiguration();861 initializeDefaultListeners();862 initializeCommandLineSuites();863 initializeCommandLineSuitesParams();864 initializeCommandLineSuitesGroups();865 m_isInitialized = true;866 }867 /** Run TestNG. */868 public void run() {869 initializeEverything();870 sanityCheck();871 runExecutionListeners(true /* start */);872 runSuiteAlterationListeners();873 m_start = System.currentTimeMillis();874 List<ISuite> suiteRunners = runSuites();875 m_end = System.currentTimeMillis();876 if (null != suiteRunners) {877 generateReports(suiteRunners);878 }879 runExecutionListeners(false /* finish */);880 exitCode = this.exitCodeListener.getStatus();881 if (exitCodeListener.noTestsFound()) {882 if (TestRunner.getVerbose() > 1) {883 System.err.println("[TestNG] No tests found. Nothing was run");884 usage();885 }886 }887 m_instance = null;888 m_jCommander = null;889 }890 /**891 * Run the test suites.892 *893 * <p>This method can be overridden by subclass. <br>894 * For example, DistributedTestNG to run in master/slave mode according to commandline args.895 *896 * @return - List of suites that were run as {@link ISuite} objects.897 * @since 6.9.11 when moving distributed/remote classes out into separate project898 */899 protected List<ISuite> runSuites() {900 return runSuitesLocally();901 }902 private void runSuiteAlterationListeners() {903 for (IAlterSuiteListener l : m_alterSuiteListeners.values()) {904 l.alter(m_suites);905 }906 }907 private void runExecutionListeners(boolean start) {908 for (IExecutionListener l : m_configuration.getExecutionListeners()) {909 if (start) {910 l.onExecutionStart();911 } else {912 l.onExecutionFinish();913 }914 }915 }916 private static void usage() {917 if (m_jCommander == null) {918 m_jCommander = new JCommander(new CommandLineArgs());919 }920 m_jCommander.usage();921 }922 private void generateReports(List<ISuite> suiteRunners) {923 for (IReporter reporter : m_reporters.values()) {924 try {925 long start = System.currentTimeMillis();926 reporter.generateReport(m_suites, suiteRunners, m_outputDir);927 Utils.log(928 "TestNG",929 2,930 "Time taken by " + reporter + ": " + (System.currentTimeMillis() - start) + " ms");931 } catch (Exception ex) {932 System.err.println("[TestNG] Reporter " + reporter + " failed");933 ex.printStackTrace(System.err);934 }935 }936 }937 /**938 * This needs to be public for maven2, for now..At least until an alternative mechanism is found.939 */940 public List<ISuite> runSuitesLocally() {941 if (m_suites.isEmpty()) {942 error("No test suite found. Nothing to run");943 usage();944 return Collections.emptyList();945 }946 SuiteRunnerMap suiteRunnerMap = new SuiteRunnerMap();947 if (m_suites.get(0).getVerbose() >= 2) {948 Version.displayBanner();949 }950 // First initialize the suite runners to ensure there are no configuration issues.951 // Create a map with XmlSuite as key and corresponding SuiteRunner as value952 for (XmlSuite xmlSuite : m_suites) {953 createSuiteRunners(suiteRunnerMap, xmlSuite);954 }955 //956 // Run suites957 //958 if (m_suiteThreadPoolSize == 1 && !m_randomizeSuites) {959 // Single threaded and not randomized: run the suites in order960 for (XmlSuite xmlSuite : m_suites) {961 runSuitesSequentially(962 xmlSuite, suiteRunnerMap, getVerbose(xmlSuite), getDefaultSuiteName());963 }964 //965 // Generate the suites report966 //967 return Lists.newArrayList(suiteRunnerMap.values());968 }969 // Multithreaded: generate a dynamic graph that stores the suite hierarchy. This is then970 // used to run related suites in specific order. Parent suites are run only971 // once all the child suites have completed execution972 IDynamicGraph<ISuite> suiteGraph = new DynamicGraph<>();973 for (XmlSuite xmlSuite : m_suites) {974 populateSuiteGraph(suiteGraph, suiteRunnerMap, xmlSuite);975 }976 IThreadWorkerFactory<ISuite> factory =977 new SuiteWorkerFactory(978 suiteRunnerMap, 0 /* verbose hasn't been set yet */, getDefaultSuiteName());979 ITestNGThreadPoolExecutor pooledExecutor = this.getExecutorFactory().newSuiteExecutor(980 "suites",981 suiteGraph,982 factory,983 m_suiteThreadPoolSize,984 m_suiteThreadPoolSize,985 Integer.MAX_VALUE,986 TimeUnit.MILLISECONDS,987 new LinkedBlockingQueue<>(),988 null);989 Utils.log("TestNG", 2, "Starting executor for all suites");990 // Run all suites in parallel991 pooledExecutor.run();992 try {993 pooledExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);994 pooledExecutor.shutdownNow();995 } catch (InterruptedException handled) {996 Thread.currentThread().interrupt();997 error("Error waiting for concurrent executors to finish " + handled.getMessage());998 }999 //1000 // Generate the suites report1001 //1002 return Lists.newArrayList(suiteRunnerMap.values());1003 }1004 private static void error(String s) {1005 LOGGER.error(s);1006 }1007 /**1008 * @return the verbose level, checking in order: the verbose level on the suite, the verbose level1009 * on the TestNG object, or 1.1010 */1011 private int getVerbose(XmlSuite xmlSuite) {1012 return xmlSuite.getVerbose() != null1013 ? xmlSuite.getVerbose()1014 : (m_verbose != null ? m_verbose : DEFAULT_VERBOSE);1015 }1016 /**1017 * Recursively runs suites. Runs the children suites before running the parent suite. This is done1018 * so that the results for parent suite can reflect the combined results of the children suites.1019 *1020 * @param xmlSuite XML Suite to be executed1021 * @param suiteRunnerMap Maps {@code XmlSuite}s to respective {@code ISuite}1022 * @param verbose verbose level1023 * @param defaultSuiteName default suite name1024 */1025 private void runSuitesSequentially(1026 XmlSuite xmlSuite, SuiteRunnerMap suiteRunnerMap, int verbose, String defaultSuiteName) {1027 for (XmlSuite childSuite : xmlSuite.getChildSuites()) {1028 runSuitesSequentially(childSuite, suiteRunnerMap, verbose, defaultSuiteName);1029 }1030 SuiteRunnerWorker srw =1031 new SuiteRunnerWorker(1032 suiteRunnerMap.get(xmlSuite), suiteRunnerMap, verbose, defaultSuiteName);1033 srw.run();1034 }1035 /**1036 * Populates the dynamic graph with the reverse hierarchy of suites. Edges are added pointing from1037 * child suite runners to parent suite runners, hence making parent suite runners dependent on all1038 * the child suite runners1039 *1040 * @param suiteGraph dynamic graph representing the reverse hierarchy of SuiteRunners1041 * @param suiteRunnerMap Map with XMLSuite as key and its respective SuiteRunner as value1042 * @param xmlSuite XML Suite1043 */1044 private void populateSuiteGraph(1045 IDynamicGraph<ISuite> suiteGraph /* OUT */, SuiteRunnerMap suiteRunnerMap, XmlSuite xmlSuite) {1046 ISuite parentSuiteRunner = suiteRunnerMap.get(xmlSuite);1047 if (xmlSuite.getChildSuites().isEmpty()) {1048 suiteGraph.addNode(parentSuiteRunner);1049 } else {1050 for (XmlSuite childSuite : xmlSuite.getChildSuites()) {1051 suiteGraph.addEdge(0, parentSuiteRunner, suiteRunnerMap.get(childSuite));1052 populateSuiteGraph(suiteGraph, suiteRunnerMap, childSuite);1053 }1054 }1055 }1056 /**1057 * Creates the {@code SuiteRunner}s and populates the suite runner map with this information1058 *1059 * @param suiteRunnerMap Map with XMLSuite as key and it's respective SuiteRunner as value. This1060 * is updated as part of this method call1061 * @param xmlSuite Xml Suite (and its children) for which {@code SuiteRunner}s are created1062 */1063 private void createSuiteRunners(SuiteRunnerMap suiteRunnerMap /* OUT */, XmlSuite xmlSuite) {1064 if (null != m_isJUnit && !m_isJUnit.equals(XmlSuite.DEFAULT_JUNIT)) {1065 xmlSuite.setJUnit(m_isJUnit);1066 }1067 // If the skip flag was invoked on the command line, it1068 // takes precedence1069 if (null != m_skipFailedInvocationCounts) {1070 xmlSuite.setSkipFailedInvocationCounts(m_skipFailedInvocationCounts);1071 }1072 // Override the XmlSuite verbose value with the one from TestNG1073 if (m_verbose != null) {1074 xmlSuite.setVerbose(m_verbose);1075 }1076 if (null != m_configFailurePolicy) {1077 xmlSuite.setConfigFailurePolicy(m_configFailurePolicy);1078 }1079 Set<XmlMethodSelector> selectors = Sets.newHashSet();1080 for (XmlTest t : xmlSuite.getTests()) {1081 for (Map.Entry<String, Integer> ms : m_methodDescriptors.entrySet()) {1082 XmlMethodSelector xms = new XmlMethodSelector();1083 xms.setName(ms.getKey());1084 xms.setPriority(ms.getValue());1085 selectors.add(xms);1086 }1087 selectors.addAll(m_selectors);1088 t.getMethodSelectors().addAll(Lists.newArrayList(selectors));1089 }1090 suiteRunnerMap.put(xmlSuite, createSuiteRunner(xmlSuite));1091 for (XmlSuite childSuite : xmlSuite.getChildSuites()) {1092 createSuiteRunners(suiteRunnerMap, childSuite);1093 }1094 }1095 /** Creates a suite runner and configures its initial state */1096 private SuiteRunner createSuiteRunner(XmlSuite xmlSuite) {1097 DataProviderHolder holder = new DataProviderHolder();1098 holder.addListeners(m_dataProviderListeners.values());1099 holder.addInterceptors(m_dataProviderInterceptors.values());1100 SuiteRunner result =1101 new SuiteRunner(1102 getConfiguration(),1103 xmlSuite,1104 m_outputDir,1105 m_testRunnerFactory,1106 m_useDefaultListeners,1107 m_methodInterceptors,1108 m_invokedMethodListeners.values(),1109 m_testListeners.values(),1110 m_classListeners.values(),1111 holder,1112 Systematiser.getComparator());...
Source:TestInvoker.java
...204 return dpListeners;205 }206 private DataProviderHolder buildDataProviderHolder() {207 DataProviderHolder holder = new DataProviderHolder();208 holder.addListeners(dataProviderListeners());209 holder.addInterceptors(this.holder.getInterceptors());210 return holder;211 }212 /**213 * Checks to see of the test method has certain dependencies that prevents TestNG from executing214 * it215 *216 * @param testMethod test method being checked for217 * @return error message or null if dependencies have been run successfully218 */219 private String checkDependencies(ITestNGMethod testMethod) {220 // If this method is marked alwaysRun, no need to check for its dependencies221 if (testMethod.isAlwaysRun()) {222 return null;...
Source:SuiteRunner.java
...494 Collection<IInvokedMethodListener> listeners,495 List<IClassListener> classListeners,496 Map<Class<? extends IDataProviderListener>, IDataProviderListener> dataProviderListeners) {497 DataProviderHolder holder = new DataProviderHolder();498 holder.addListeners(dataProviderListeners.values());499 return newTestRunner(suite, test, listeners, classListeners, holder);500 }501 @Override502 public TestRunner newTestRunner(ISuite suite, XmlTest test,503 Collection<IInvokedMethodListener> listeners, List<IClassListener> classListeners,504 DataProviderHolder holder) {505 boolean skip = skipFailedInvocationCounts;506 if (!skip) {507 skip = test.skipFailedInvocationCounts();508 }509 TestRunner testRunner =510 new TestRunner(511 configuration,512 suite,513 test,514 suite.getOutputDirectory(),515 suite.getAnnotationFinder(),516 skip,517 listeners,518 classListeners,519 comparator, holder);520 if (useDefaultListeners) {521 testRunner.addListener(new TestHTMLReporter());522 testRunner.addListener(new JUnitXMLReporter());523 // TODO: Moved these here because maven2 has output reporters running524 // already, the output from these causes directories to be created with525 // files. This is not the desired behaviour of running tests in maven2.526 // Don't know what to do about this though, are people relying on these527 // to be added even with defaultListeners set to false?528 testRunner.addListener(new TextReporter(testRunner.getName(), TestRunner.getVerbose()));529 }530 for (ITestListener itl : failureGenerators) {531 testRunner.addTestListener(itl);532 }533 for (IConfigurationListener cl : configuration.getConfigurationListeners()) {534 testRunner.addConfigurationListener(cl);535 }536 return testRunner;537 }538 }539 private static class ProxyTestRunnerFactory implements ITestRunnerFactory {540 private final ITestListener[] failureGenerators;541 private final ITestRunnerFactory target;542 public ProxyTestRunnerFactory(ITestListener[] failureListeners, ITestRunnerFactory target) {543 failureGenerators = failureListeners;544 this.target = target;545 }546 @Override547 public TestRunner newTestRunner(548 ISuite suite,549 XmlTest test,550 Collection<IInvokedMethodListener> listeners,551 List<IClassListener> classListeners) {552 return newTestRunner(suite, test, listeners, classListeners, Collections.emptyMap());553 }554 @Override555 public TestRunner newTestRunner(556 ISuite suite,557 XmlTest test,558 Collection<IInvokedMethodListener> listeners,559 List<IClassListener> classListeners,560 Map<Class<? extends IDataProviderListener>, IDataProviderListener> dataProviderListeners) {561 DataProviderHolder holder = new DataProviderHolder();562 holder.addListeners(dataProviderListeners.values());563 return newTestRunner(suite, test, listeners, classListeners, holder);564 }565 @Override566 public TestRunner newTestRunner(ISuite suite, XmlTest test,567 Collection<IInvokedMethodListener> listeners, List<IClassListener> classListeners,568 DataProviderHolder holder) {569 TestRunner testRunner = target.newTestRunner(suite, test, listeners, classListeners, holder);570 testRunner.addListener(new TextReporter(testRunner.getName(), TestRunner.getVerbose()));571 for (ITestListener itl : failureGenerators) {572 testRunner.addListener(itl);573 }574 return testRunner;575 }576 }...
Source:DataProviderHolder.java
...14 }15 public Collection<IDataProviderInterceptor> getInterceptors() {16 return Collections.unmodifiableCollection(interceptors);17 }18 public void addListeners(Collection<IDataProviderListener> listeners) {19 listeners.forEach(this::addListener);20 }21 public void addListener(IDataProviderListener listener) {22 listeners.add(listener);23 }24 public void addInterceptors(Collection<IDataProviderInterceptor> interceptors) {25 interceptors.forEach(this::addInterceptor);26 }27 public void addInterceptor(IDataProviderInterceptor interceptor) {28 interceptors.add(interceptor);29 }30 public void merge(DataProviderHolder other) {31 this.listeners.addAll(other.getListeners());32 this.interceptors.addAll(other.getInterceptors());...
addListeners
Using AI Code Generation
1DataProviderHolder dph = new DataProviderHolder();2dph.addListeners(new IDataProviderListener[]{new DataProviderListener()});3DataProviderHolder dph = new DataProviderHolder();4dph.addDataProvider("dp1", new IDataProvider() {5 public Object[][] provide(Method method, ITestContext context) {6 return new Object[][]{{"data1"}};7 }8});9DataProviderHolder dph = new DataProviderHolder();10dph.removeDataProvider("dp1");11DataProviderHolder dph = new DataProviderHolder();12dph.addDataProvider("dp1", new IDataProvider() {13 public Object[][] provide(Method method, ITestContext context) {14 return new Object[][]{{"data1"}};15 }16});17DataProviderHolder dph = new DataProviderHolder();18dph.removeDataProvider("dp1");
addListeners
Using AI Code Generation
1package com.example;2import org.testng.IInvokedMethod;3import org.testng.IInvokedMethodListener;4import org.testng.IListenerFactory;5import org.testng.IRetryAnalyzer;6import org.testng.ITestContext;7import org.testng.ITestListener;8import org.testng.ITestResult;9import org.testng.TestListenerAdapter;10import org.testng.annotations.DataProvider;11import org.testng.annotations.Listeners;12import org.testng.annotations.Test;13import org.testng.internal.DataProviderHolder;14import java.lang.reflect.Method;15import java.util.ArrayList;16import java.util.List;17@Listeners({DataProviderHolderTest.TestListener.class})18public class DataProviderHolderTest {19 @Test(dataProvider = "dataProvider")20 public void test(String param) {21 System.out.println("param: " + param);22 }23 public Object[][] dataProvider() {24 return new Object[][]{{"param1"}, {"param2"}};25 }26 IInvokedMethodListener, IListenerFactory {27 private List<Object> listeners = new ArrayList<>();28 public void onTestStart(ITestResult result) {29 super.onTestStart(result);30 System.out.println("onTestStart");31 }32 public void onTestSuccess(ITestResult result) {33 super.onTestSuccess(result);34 System.out.println("onTestSuccess");35 }36 public void onTestFailure(ITestResult result) {37 super.onTestFailure(result);38 System.out.println("onTestFailure");39 }40 public void onTestSkipped(ITestResult result) {41 super.onTestSkipped(result);42 System.out.println("onTestSkipped");43 }44 public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
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!!