CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-testng--testng

Comprehensive testing framework for Java with annotations, data-driven testing, and parallel execution capabilities

Overview
Eval results
Files

xml-configuration.mddocs/

XML Configuration

TestNG's XML configuration system provides powerful declarative test orchestration through XML files. This enables complex test suite organization, parameterization, parallel execution, and group management without requiring code changes.

Capabilities

XmlSuite Class

The root configuration class representing a test suite with comprehensive settings for execution behavior, parallel processing, and test organization.

/**
 * Root configuration class for TestNG test suites
 */
public class XmlSuite {
    
    // Parallel execution modes
    public enum ParallelMode {
        TESTS,      // Run tests in parallel
        METHODS,    // Run test methods in parallel
        CLASSES,    // Run test classes in parallel  
        INSTANCES,  // Run test instances in parallel
        NONE        // No parallel execution
    }
    
    // Configuration failure policies
    public enum FailurePolicy {
        SKIP,       // Skip dependent tests on configuration failure
        CONTINUE    // Continue with dependent tests on configuration failure
    }
    
    // Constructor
    public XmlSuite();
    public XmlSuite(XmlSuite parent);
    
    // Basic configuration
    public void setName(String name);
    public String getName();
    public void setVerbose(int verbose);
    public int getVerbose();
    public void setPreserveOrder(boolean preserveOrder);
    public boolean getPreserveOrder();
    
    // Parallel execution configuration
    public void setParallel(ParallelMode parallel);
    public ParallelMode getParallel();
    public void setThreadCount(int threadCount);
    public int getThreadCount();
    public void setDataProviderThreadCount(int dataProviderThreadCount);
    public int getDataProviderThreadCount();
    public void setTimeOut(String timeOut);
    public String getTimeOut();
    
    // Group configuration
    public void setGroups(XmlGroups groups);
    public XmlGroups getGroups();
    
    // Test management
    public void setTests(List<XmlTest> tests);
    public List<XmlTest> getTests();
    public void addTest(XmlTest test);
    
    // Suite-level parameters
    public void setParameters(Map<String, String> parameters);
    public Map<String, String> getParameters();
    public void addParameter(String name, String value);
    public String getParameter(String name);
    
    // Listener configuration
    public void setListeners(List<String> listeners);
    public List<String> getListeners();
    public void addListener(String listener);
    
    // Suite files (for suite-of-suites)
    public void setSuiteFiles(List<String> suiteFiles);
    public List<String> getSuiteFiles();
    public void addSuiteFile(String suiteFile);
    
    // Failure handling
    public void setConfigFailurePolicy(FailurePolicy configFailurePolicy);
    public FailurePolicy getConfigFailurePolicy();
    public void setSkipFailedInvocationCounts(boolean skipFailedInvocationCounts);
    public boolean skipFailedInvocationCounts();
    
    // Method selectors
    public void setMethodSelectors(List<XmlMethodSelector> methodSelectors);
    public List<XmlMethodSelector> getMethodSelectors();
    
    // Object factory
    public void setObjectFactory(String objectFactory);
    public String getObjectFactory();
    
    // Utility methods
    public XmlSuite shallowCopy();
    public Object clone();
    public void setFileName(String fileName);
    public String getFileName();
}

Usage Examples:

import org.testng.xml.*;
import java.util.*;

public class XmlSuiteExamples {
    
    public void createBasicSuite() {
        // Create a basic test suite
        XmlSuite suite = new XmlSuite();
        suite.setName("Basic Test Suite");
        suite.setVerbose(1);
        suite.setPreserveOrder(true);
        
        // Add suite-level parameters
        suite.addParameter("environment", "staging");
        suite.addParameter("browser", "chrome");
        
        // Create and add a test
        XmlTest test = new XmlTest(suite);
        test.setName("Smoke Tests");
        
        // Add test classes
        XmlClass xmlClass1 = new XmlClass("com.example.LoginTest");
        XmlClass xmlClass2 = new XmlClass("com.example.HomePageTest");
        test.setXmlClasses(Arrays.asList(xmlClass1, xmlClass2));
        
        suite.addTest(test);
        
        System.out.println("Created suite: " + suite.getName());
    }
    
    public void createParallelSuite() {
        XmlSuite suite = new XmlSuite();
        suite.setName("Parallel Execution Suite");
        
        // Configure parallel execution
        suite.setParallel(XmlSuite.ParallelMode.METHODS);
        suite.setThreadCount(4);
        suite.setDataProviderThreadCount(2);
        suite.setTimeOut("300000"); // 5 minutes
        
        // Configure failure handling
        suite.setConfigFailurePolicy(XmlSuite.FailurePolicy.CONTINUE);
        suite.setSkipFailedInvocationCounts(true);
        
        XmlTest test = new XmlTest(suite);
        test.setName("Parallel Test Execution");
        test.setParallel(XmlSuite.ParallelMode.METHODS);
        test.setThreadCount(2);
        
        suite.addTest(test);
    }
    
    public void createSuiteWithGroups() {
        XmlSuite suite = new XmlSuite();
        suite.setName("Grouped Test Suite");
        
        // Configure groups at suite level
        XmlGroups groups = new XmlGroups();
        
        // Run groups
        XmlRun run = new XmlRun();
        run.onInclude("smoke");
        run.onInclude("regression");
        groups.setRun(run);
        
        // Group dependencies
        XmlDependencies dependencies = new XmlDependencies();
        Map<String, String> dependencyMap = new HashMap<>();
        dependencyMap.put("regression", "smoke");
        dependencies.setDependencies(dependencyMap);
        groups.setDependencies(dependencies);
        
        suite.setGroups(groups);
        
        XmlTest test = new XmlTest(suite);
        test.setName("Grouped Tests");
        
        suite.addTest(test);
    }
    
    public void createSuiteOfSuites() {
        // Parent suite that includes other suites
        XmlSuite parentSuite = new XmlSuite();
        parentSuite.setName("Master Test Suite");
        
        // Add child suite files
        parentSuite.addSuiteFile("smoke-tests.xml");
        parentSuite.addSuiteFile("regression-tests.xml");
        parentSuite.addSuiteFile("integration-tests.xml");
        
        // Configure parallel execution of suites
        parentSuite.setParallel(XmlSuite.ParallelMode.TESTS);
        parentSuite.setThreadCount(3);
        
        System.out.println("Created suite-of-suites: " + parentSuite.getName());
    }
    
    public void createSuiteWithListeners() {
        XmlSuite suite = new XmlSuite();
        suite.setName("Suite with Listeners");
        
        // Add listeners
        suite.addListener("com.example.CustomTestListener");
        suite.addListener("com.example.CustomSuiteListener");
        suite.addListener("com.example.EmailReporter");
        
        // Set custom object factory
        suite.setObjectFactory("com.example.GuiceObjectFactory");
        
        XmlTest test = new XmlTest(suite);
        test.setName("Listener Test");
        
        suite.addTest(test);
    }
}

XmlTest Class

Represents an individual test within a suite, providing test-specific configuration and class/method selection.

/**
 * Configuration class for individual tests within a suite
 */
public class XmlTest {
    
    // Constructor
    public XmlTest();
    public XmlTest(XmlSuite suite);
    
    // Basic configuration
    public void setName(String name);
    public String getName();
    public void setVerbose(int verbose);
    public int getVerbose();
    public void setPreserveOrder(boolean preserveOrder);
    public boolean getPreserveOrder();
    
    // Suite relationship
    public void setSuite(XmlSuite suite);
    public XmlSuite getSuite();
    
    // Parallel execution (overrides suite settings)
    public void setParallel(XmlSuite.ParallelMode parallel);
    public XmlSuite.ParallelMode getParallel();
    public void setThreadCount(int threadCount);
    public int getThreadCount();
    public void setTimeOut(long timeOut);
    public long getTimeOut();
    
    // Test-level parameters
    public void setParameters(Map<String, String> parameters);
    public Map<String, String> getParameters();
    public void addParameter(String name, String value);
    public String getParameter(String name);
    
    // Class configuration
    public void setXmlClasses(List<XmlClass> xmlClasses);
    public List<XmlClass> getXmlClasses();
    public void addClass(XmlClass xmlClass);
    
    // Package configuration
    public void setXmlPackages(List<XmlPackage> xmlPackages);
    public List<XmlPackage> getXmlPackages();
    public void addPackage(XmlPackage xmlPackage);
    
    // Group configuration (overrides suite groups)
    public void setGroups(XmlGroups groups);
    public XmlGroups getGroups();
    public void setIncludedGroups(List<String> includedGroups);
    public List<String> getIncludedGroups();
    public void setExcludedGroups(List<String> excludedGroups);
    public List<String> getExcludedGroups();
    
    // Method selectors
    public void setMethodSelectors(List<XmlMethodSelector> methodSelectors);
    public List<XmlMethodSelector> getMethodSelectors();
    
    // Utility methods
    public Object clone();
    public void setIndex(int index);
    public int getIndex();
}

Usage Examples:

public class XmlTestExamples {
    
    public void createParameterizedTest() {
        XmlSuite suite = new XmlSuite();
        suite.setName("Parameterized Suite");
        
        XmlTest test = new XmlTest(suite);
        test.setName("Browser Compatibility Test");
        
        // Add test-specific parameters
        test.addParameter("browser", "chrome");
        test.addParameter("version", "latest");
        test.addParameter("platform", "linux");
        
        // Configure classes
        XmlClass browserTest = new XmlClass("com.example.BrowserCompatibilityTest");
        test.addClass(browserTest);
        
        suite.addTest(test);
    }
    
    public void createGroupedTest() {
        XmlSuite suite = new XmlSuite();
        suite.setName("Grouped Test Suite");
        
        XmlTest smokeTest = new XmlTest(suite);
        smokeTest.setName("Smoke Tests");
        smokeTest.setIncludedGroups(Arrays.asList("smoke", "critical"));
        smokeTest.setExcludedGroups(Arrays.asList("slow", "flaky"));
        
        XmlClass testClass = new XmlClass("com.example.SmokeTest");
        smokeTest.addClass(testClass);
        
        XmlTest regressionTest = new XmlTest(suite);
        regressionTest.setName("Regression Tests");
        regressionTest.setIncludedGroups(Arrays.asList("regression"));
        regressionTest.setExcludedGroups(Arrays.asList("manual"));
        
        XmlClass regressionClass = new XmlClass("com.example.RegressionTest");
        regressionTest.addClass(regressionClass);
        
        suite.addTest(smokeTest);
        suite.addTest(regressionTest);
    }
    
    public void createPackageBasedTest() {
        XmlSuite suite = new XmlSuite();
        suite.setName("Package-based Suite");
        
        XmlTest test = new XmlTest(suite);
        test.setName("Package Tests");
        
        // Include entire packages
        XmlPackage unitTestPackage = new XmlPackage("com.example.unit.*");
        XmlPackage integrationTestPackage = new XmlPackage("com.example.integration.*");
        
        test.addPackage(unitTestPackage);
        test.addPackage(integrationTestPackage);
        
        suite.addTest(test);
    }
    
    public void createMethodSelectorTest() {
        XmlSuite suite = new XmlSuite();
        suite.setName("Method Selector Suite");
        
        XmlTest test = new XmlTest(suite);
        test.setName("Selective Method Execution");
        
        // Create method selector
        XmlMethodSelector methodSelector = new XmlMethodSelector();
        methodSelector.setClassName("com.example.CustomMethodSelector");
        methodSelector.setPriority(1);
        
        test.setMethodSelectors(Arrays.asList(methodSelector));
        
        suite.addTest(test);
    }
}

XmlClass Class

Represents a test class configuration with specific method inclusion/exclusion and parameter settings.

/**
 * Configuration class for test classes within a test
 */
public class XmlClass {
    
    // Constructors
    public XmlClass();
    public XmlClass(String className);
    public XmlClass(Class<?> clazz);
    
    // Basic configuration
    public void setName(String name);
    public String getName();
    public void setClass(Class<?> clazz);
    public Class<?> getSupportClass();
    
    // Method inclusion/exclusion
    public void setIncludedMethods(List<XmlInclude> includedMethods);
    public List<XmlInclude> getIncludedMethods();
    public void setExcludedMethods(List<String> excludedMethods);
    public List<String> getExcludedMethods();
    
    // Parameters
    public void setParameters(Map<String, String> parameters);
    public Map<String, String> getParameters();
    public void addParameter(String name, String value);
    
    // Utility methods
    public Object clone();
    public void setIndex(int index);
    public int getIndex();
}

Usage Examples:

public class XmlClassExamples {
    
    public void createSelectiveMethodExecution() {
        XmlSuite suite = new XmlSuite();
        suite.setName("Selective Method Suite");
        
        XmlTest test = new XmlTest(suite);
        test.setName("Specific Methods Only");
        
        XmlClass xmlClass = new XmlClass("com.example.CompleteTestClass");
        
        // Include only specific methods
        XmlInclude method1 = new XmlInclude("testCriticalFeature");
        XmlInclude method2 = new XmlInclude("testSecurityValidation");
        XmlInclude method3 = new XmlInclude("testPerformance");
        
        xmlClass.setIncludedMethods(Arrays.asList(method1, method2, method3));
        
        // Exclude flaky methods
        xmlClass.setExcludedMethods(Arrays.asList("testFlakyBehavior", "testUnstableFeature"));
        
        // Add class-specific parameters
        xmlClass.addParameter("testData", "critical-data.json");
        xmlClass.addParameter("timeout", "30000");
        
        test.addClass(xmlClass);
        suite.addTest(test);
    }
    
    public void createParameterizedMethodExecution() {
        XmlSuite suite = new XmlSuite();
        suite.setName("Parameterized Method Suite");
        
        XmlTest test = new XmlTest(suite);
        test.setName("Data-Driven Tests");
        
        XmlClass xmlClass = new XmlClass("com.example.DataDrivenTest");
        
        // Include parameterized methods with invocation numbers
        XmlInclude parameterizedMethod = new XmlInclude("testWithMultipleDataSets");
        parameterizedMethod.setInvocationNumbers(Arrays.asList(0, 2, 4)); // Run only specific data sets
        
        xmlClass.setIncludedMethods(Arrays.asList(parameterizedMethod));
        
        test.addClass(xmlClass);
        suite.addTest(test);
    }
}

XML Configuration File Structure

Complete XML configuration file examples showing real-world usage patterns.

<!-- Basic TestNG Suite Configuration -->
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Complete Test Suite" verbose="1" preserve-order="true">
    
    <!-- Suite-level parameters -->
    <parameter name="environment" value="staging"/>
    <parameter name="browser" value="chrome"/>
    <parameter name="timeout" value="30000"/>
    
    <!-- Suite-level listeners -->
    <listeners>
        <listener class-name="com.example.CustomTestListener"/>
        <listener class-name="com.example.EmailReporter"/>
    </listeners>
    
    <!-- Group definitions -->
    <groups>
        <run>
            <include name="smoke"/>
            <include name="regression"/>
            <exclude name="manual"/>
            <exclude name="flaky"/>
        </run>
        <dependencies>
            <group name="regression" depends-on="smoke"/>
            <group name="integration" depends-on="unit"/>
        </dependencies>
    </groups>
    
    <!-- Test definitions -->
    <test name="Smoke Tests" preserve-order="true">
        <parameter name="testType" value="smoke"/>
        <groups>
            <run>
                <include name="smoke"/>
                <include name="critical"/>
            </run>
        </groups>
        <classes>
            <class name="com.example.LoginTest"/>
            <class name="com.example.HomePageTest">
                <methods>
                    <include name="testPageLoad"/>
                    <include name="testNavigation"/>
                    <exclude name="testSlowFeature"/>
                </methods>
            </class>
        </classes>
    </test>
    
    <test name="Regression Tests" parallel="methods" thread-count="3">
        <parameter name="testType" value="regression"/>
        <groups>
            <run>
                <include name="regression"/>
            </run>
        </groups>
        <packages>
            <package name="com.example.regression.*"/>
        </packages>
    </test>
    
</suite>
<!-- Parallel Execution Configuration -->
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Parallel Suite" parallel="methods" thread-count="4" 
       data-provider-thread-count="2" preserve-order="false">
    
    <parameter name="parallel" value="true"/>
    
    <test name="Parallel Method Execution" parallel="methods" thread-count="2">
        <classes>
            <class name="com.example.ParallelTest1"/>
            <class name="com.example.ParallelTest2"/>
        </classes>
    </test>
    
    <test name="Parallel Class Execution" parallel="classes" thread-count="2">
        <classes>
            <class name="com.example.ClassParallelTest1"/>
            <class name="com.example.ClassParallelTest2"/>
        </classes>
    </test>
    
</suite>
<!-- Suite of Suites Configuration -->
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Master Suite" parallel="tests" thread-count="3">
    
    <suite-files>
        <suite-file path="smoke-tests.xml"/>
        <suite-file path="regression-tests.xml"/>
        <suite-file path="integration-tests.xml"/>
    </suite-files>
    
</suite>

Types

// Supporting configuration classes
public class XmlGroups {
    public void setRun(XmlRun run);
    public XmlRun getRun();
    public void setDependencies(XmlDependencies dependencies);
    public XmlDependencies getDependencies();
}

public class XmlRun {
    public void onInclude(String name);
    public void onExclude(String name);
    public List<String> getIncludes();
    public List<String> getExcludes();
}

public class XmlDependencies {
    public void setDependencies(Map<String, String> dependencies);
    public Map<String, String> getDependencies();
}

public class XmlInclude {
    public XmlInclude(String name);
    public void setName(String name);
    public String getName();
    public void setInvocationNumbers(List<Integer> invocationNumbers);
    public List<Integer> getInvocationNumbers();
    public void setDescription(String description);
    public String getDescription();
}

public class XmlPackage {
    public XmlPackage(String name);
    public void setName(String name);
    public String getName();
    public void setInclude(List<String> include);
    public List<String> getInclude();
    public void setExclude(List<String> exclude);
    public List<String> getExclude();
}

public class XmlMethodSelector {
    public void setClassName(String className);
    public String getClassName();
    public void setPriority(int priority);
    public int getPriority();
    public void setScript(XmlScript script);
    public XmlScript getScript();
}

public class XmlScript {
    public void setLanguage(String language);
    public String getLanguage();
    public void setScript(String script);
    public String getScript();
}

Install with Tessl CLI

npx tessl i tessl/maven-org-testng--testng

docs

annotations.md

assertions.md

collections-utilities.md

index.md

listeners-hooks.md

test-execution.md

xml-configuration.md

tile.json