Package org.testng
Class TestRunner
- java.lang.Object
-
- org.testng.TestRunner
-
- All Implemented Interfaces:
IAttributes
,IConfigEavesdropper
,ITestResultNotifier
,ITestContext
,IThreadWorkerFactory<ITestNGMethod>
public class TestRunner extends java.lang.Object implements ITestContext, ITestResultNotifier, IThreadWorkerFactory<ITestNGMethod>, IConfigEavesdropper
This class takes care of running one Test.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private class
TestRunner.ConfigurationListener
static class
TestRunner.PriorityWeight
-
Field Summary
-
Constructor Summary
Constructors Modifier Constructor Description TestRunner(IConfiguration configuration, ISuite suite, XmlTest test, boolean skipFailedInvocationCounts, java.util.Collection<IInvokedMethodListener> invokedMethodListeners, java.util.List<IClassListener> classListeners, java.util.Comparator<ITestNGMethod> comparator, SuiteRunner suiteRunner)
TestRunner(IConfiguration configuration, ISuite suite, XmlTest test, boolean skipFailedInvocationCounts, java.util.Collection<IInvokedMethodListener> invokedMethodListeners, java.util.List<IClassListener> classListeners, SuiteRunner suiteRunner)
protected
TestRunner(IConfiguration configuration, ISuite suite, XmlTest test, java.lang.String outputDirectory, IAnnotationFinder finder, boolean skipFailedInvocationCounts, java.util.Collection<IInvokedMethodListener> invokedMethodListeners, java.util.List<IClassListener> classListeners, java.util.Comparator<ITestNGMethod> comparator, DataProviderHolder otherHolder, SuiteRunner suiteRunner)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) void
addConfigurationListener(IConfigurationListener icl)
void
addFailedButWithinSuccessPercentageTest(ITestNGMethod testMethod, ITestResult result)
void
addFailedTest(ITestNGMethod testMethod, ITestResult result)
void
addListener(ITestNGListener listener)
private void
addMetaGroup(java.lang.String name, java.util.List<java.lang.String> groupNames)
(package private) void
addMethodInterceptor(IMethodInterceptor methodInterceptor)
void
addPassedTest(ITestNGMethod tm, ITestResult tr)
void
addSkippedTest(ITestNGMethod tm, ITestResult tr)
(package private) void
addTestListener(ITestListener listener)
private void
afterRun()
private void
beforeRun()
Before run preparements.private ITestNGMethod[]
computeAndGetAllTestMethods()
private java.util.Map<java.lang.String,java.lang.String>
createGroups(java.util.List<java.lang.String> groups)
java.util.List<IWorker<ITestNGMethod>>
createWorkers(java.util.List<ITestNGMethod> methods)
Create a list of workers to run the methods passed in parameter.private void
dumpInvokedMethods()
private void
fireEvent(boolean isStart)
Trigger the start/finish event.private void
forgetHeavyReferencesIfNeeded()
ITestNGMethod[]
getAfterSuiteMethods()
ITestNGMethod[]
getAfterTestConfigurationMethods()
private java.util.List<XmlPackage>
getAllPackages()
Returns all packages to use for the current test.ITestNGMethod[]
getAllTestMethods()
java.lang.Object
getAttribute(java.lang.String name)
java.util.Set<java.lang.String>
getAttributeNames()
ITestNGMethod[]
getBeforeSuiteMethods()
ITestNGMethod[]
getBeforeTestConfigurationMethods()
java.util.List<IConfigurationListener>
getConfigurationListeners()
IResultMap
getConfigurationsScheduledForInvocation()
XmlTest
getCurrentXmlTest()
java.util.Date
getEndDate()
java.lang.String[]
getExcludedGroups()
java.util.Collection<ITestNGMethod>
getExcludedMethods()
ITestListener
getExitCodeListener()
IResultMap
getFailedButWithinSuccessPercentageTests()
IResultMap
getFailedConfigurations()
IResultMap
getFailedTests()
java.util.Set<ITestResult>
getFailedTests(ITestNGMethod tm)
java.lang.String
getHost()
java.lang.String[]
getIncludedGroups()
IInjectorFactory
getInjectorFactory()
IInvoker
getInvoker()
java.lang.String
getName()
java.lang.String
getOutputDirectory()
IResultMap
getPassedConfigurations()
IResultMap
getPassedTests()
java.util.Set<ITestResult>
getPassedTests(ITestNGMethod tm)
IResultMap
getSkippedConfigurations()
IResultMap
getSkippedTests()
java.util.Set<ITestResult>
getSkippedTests(ITestNGMethod tm)
java.util.Date
getStartDate()
ISuite
getSuite()
XmlTest
getTest()
java.util.Collection<ITestClass>
getTestClasses()
java.util.List<ITestListener>
getTestListeners()
static int
getVerbose()
private void
init()
private void
init(IConfiguration configuration, ISuite suite, XmlTest test, java.lang.String outputDirectory, IAnnotationFinder annotationFinder, boolean skipFailedInvocationCounts, java.util.Collection<IInvokedMethodListener> invokedMethodListeners, java.util.List<IClassListener> classListeners, SuiteRunner suiteRunner)
private void
initListeners()
private void
initMetaGroups(XmlTest xmlTest)
Initialize meta groupsprivate void
initMethods()
private void
initRunInfo(XmlTest xmlTest)
private ITestNGMethod[]
intercept(ITestNGMethod[] methods)
Apply the method interceptor (if applicable) to the list of methods.private void
invokeTestConfigurations(ITestNGMethod[] testConfigurationMethods)
private static void
log(java.lang.String s)
private void
logFailedTest(ITestResult tr, boolean withinSuccessPercentage)
private void
logStart()
Logs the beginning of thebeforeRun()
.private static java.util.stream.Stream<java.lang.reflect.Method>
methods(java.util.stream.Stream<ITestNGMethod> methods)
private static java.util.stream.Stream<java.lang.reflect.Method>
methods(IResultMap resultMap)
private static java.util.Comparator<ITestNGMethod>
newComparator(boolean needPrioritySort)
private static java.util.concurrent.BlockingQueue<java.lang.Runnable>
newQueue(boolean needPrioritySort)
private void
privateRun(XmlTest xmlTest)
Main method that create a graph of methods and then pass it to the graph executor to run them.private void
privateRunJUnit()
java.lang.Object
removeAttribute(java.lang.String name)
Remove the attributevoid
run()
The main entry method for TestRunner.private void
runJUnitWorkers(java.util.List<? extends IWorker<ITestNGMethod>> workers)
void
setAttribute(java.lang.String name, java.lang.Object value)
Set a custom attribute.private void
setExitCodeListener(ITestListener exitCodeListener)
void
setOutputDirectory(java.lang.String od)
void
setTestName(java.lang.String name)
void
setVerbose(int n)
private boolean
sortOnPriority(ITestNGMethod[] interceptedOrder)
-
-
-
Field Detail
-
DEFAULT_PROP_OUTPUT_DIR
private static final java.lang.String DEFAULT_PROP_OUTPUT_DIR
- See Also:
- Constant Field Values
-
LOGGER
private static final Logger LOGGER
-
comparator
private final java.util.Comparator<ITestNGMethod> comparator
-
m_suite
private ISuite m_suite
-
m_xmlTest
private XmlTest m_xmlTest
-
m_testName
private java.lang.String m_testName
-
m_injectorFactory
private IInjectorFactory m_injectorFactory
-
m_objectFactory
private ITestObjectFactory m_objectFactory
-
m_testClassesFromXml
private java.util.List<XmlClass> m_testClassesFromXml
-
m_invoker
private IInvoker m_invoker
-
m_annotationFinder
private IAnnotationFinder m_annotationFinder
-
m_testListeners
private final java.util.List<ITestListener> m_testListeners
ITestListeners support.
-
m_configurationListeners
private final java.util.Set<IConfigurationListener> m_configurationListeners
-
visualisers
private final java.util.Set<IExecutionVisualiser> visualisers
-
m_confListener
private final IConfigurationListener m_confListener
-
m_invokedMethodListeners
private java.util.Collection<IInvokedMethodListener> m_invokedMethodListeners
-
m_classListeners
private final java.util.Map<java.lang.Class<? extends IClassListener>,IClassListener> m_classListeners
-
holder
private final DataProviderHolder holder
-
m_startDate
private java.util.Date m_startDate
-
m_endDate
private java.util.Date m_endDate
-
testMethodsContainer
private final IContainer<ITestNGMethod> testMethodsContainer
-
m_classMap
private final java.util.Map<java.lang.Class<?>,ITestClass> m_classMap
A map to keep track of Class <-> IClass.
-
m_outputDirectory
private java.lang.String m_outputDirectory
Where the reports will be created.
-
m_xmlMethodSelector
private final XmlMethodSelector m_xmlMethodSelector
-
exitCodeListener
private ITestListener exitCodeListener
-
m_beforeSuiteMethods
private ITestNGMethod[] m_beforeSuiteMethods
-
m_afterSuiteMethods
private ITestNGMethod[] m_afterSuiteMethods
-
m_beforeXmlTestMethods
private ITestNGMethod[] m_beforeXmlTestMethods
-
m_afterXmlTestMethods
private ITestNGMethod[] m_afterXmlTestMethods
-
m_excludedMethods
private final java.util.List<ITestNGMethod> m_excludedMethods
-
m_groupMethods
private ConfigurationGroupMethods m_groupMethods
-
m_metaGroups
private final java.util.Map<java.lang.String,java.util.List<java.lang.String>> m_metaGroups
-
m_passedTests
private final IResultMap m_passedTests
-
m_failedTests
private final IResultMap m_failedTests
-
m_failedButWithinSuccessPercentageTests
private final IResultMap m_failedButWithinSuccessPercentageTests
-
m_skippedTests
private final IResultMap m_skippedTests
-
m_runInfo
private final RunInfo m_runInfo
-
m_host
private java.lang.String m_host
-
m_methodInterceptors
private java.util.List<IMethodInterceptor> m_methodInterceptors
-
m_classMethodMap
private ClassMethodMap m_classMethodMap
-
m_testClassFinder
private TestNGClassFinder m_testClassFinder
-
m_configuration
private IConfiguration m_configuration
-
m_allJunitTestMethods
private ITestNGMethod[] m_allJunitTestMethods
-
warnOnce
private static final java.util.concurrent.atomic.AtomicBoolean warnOnce
-
m_passedConfigurations
private final IResultMap m_passedConfigurations
-
m_skippedConfigurations
private final IResultMap m_skippedConfigurations
-
m_failedConfigurations
private final IResultMap m_failedConfigurations
-
m_configsToBeInvoked
private final IResultMap m_configsToBeInvoked
-
m_attributes
private final IAttributes m_attributes
-
-
Constructor Detail
-
TestRunner
protected TestRunner(IConfiguration configuration, ISuite suite, XmlTest test, java.lang.String outputDirectory, IAnnotationFinder finder, boolean skipFailedInvocationCounts, java.util.Collection<IInvokedMethodListener> invokedMethodListeners, java.util.List<IClassListener> classListeners, java.util.Comparator<ITestNGMethod> comparator, DataProviderHolder otherHolder, SuiteRunner suiteRunner)
-
TestRunner
public TestRunner(IConfiguration configuration, ISuite suite, XmlTest test, boolean skipFailedInvocationCounts, java.util.Collection<IInvokedMethodListener> invokedMethodListeners, java.util.List<IClassListener> classListeners, java.util.Comparator<ITestNGMethod> comparator, SuiteRunner suiteRunner)
-
TestRunner
public TestRunner(IConfiguration configuration, ISuite suite, XmlTest test, boolean skipFailedInvocationCounts, java.util.Collection<IInvokedMethodListener> invokedMethodListeners, java.util.List<IClassListener> classListeners, SuiteRunner suiteRunner)
-
-
Method Detail
-
init
private void init(IConfiguration configuration, ISuite suite, XmlTest test, java.lang.String outputDirectory, IAnnotationFinder annotationFinder, boolean skipFailedInvocationCounts, java.util.Collection<IInvokedMethodListener> invokedMethodListeners, java.util.List<IClassListener> classListeners, SuiteRunner suiteRunner)
-
getAllPackages
private java.util.List<XmlPackage> getAllPackages()
Returns all packages to use for the current test. This includes the test from the test suite. Never returns null.
-
getInvoker
public IInvoker getInvoker()
-
getBeforeSuiteMethods
public ITestNGMethod[] getBeforeSuiteMethods()
-
getAfterSuiteMethods
public ITestNGMethod[] getAfterSuiteMethods()
-
getBeforeTestConfigurationMethods
public ITestNGMethod[] getBeforeTestConfigurationMethods()
-
getAfterTestConfigurationMethods
public ITestNGMethod[] getAfterTestConfigurationMethods()
-
init
private void init()
-
initListeners
private void initListeners()
-
initMetaGroups
private void initMetaGroups(XmlTest xmlTest)
Initialize meta groups
-
initRunInfo
private void initRunInfo(XmlTest xmlTest)
-
initMethods
private void initMethods()
-
computeAndGetAllTestMethods
private ITestNGMethod[] computeAndGetAllTestMethods()
-
getTestClasses
public java.util.Collection<ITestClass> getTestClasses()
-
setTestName
public void setTestName(java.lang.String name)
-
setOutputDirectory
public void setOutputDirectory(java.lang.String od)
-
addMetaGroup
private void addMetaGroup(java.lang.String name, java.util.List<java.lang.String> groupNames)
-
createGroups
private java.util.Map<java.lang.String,java.lang.String> createGroups(java.util.List<java.lang.String> groups)
-
run
public void run()
The main entry method for TestRunner.This is where all the hard work is done: - Invoke configuration methods - Invoke test methods - Catch exceptions - Collect results - Invoke listeners - etc...
-
forgetHeavyReferencesIfNeeded
private void forgetHeavyReferencesIfNeeded()
-
beforeRun
private void beforeRun()
Before run preparements.
-
invokeTestConfigurations
private void invokeTestConfigurations(ITestNGMethod[] testConfigurationMethods)
-
privateRunJUnit
private void privateRunJUnit()
-
newComparator
private static java.util.Comparator<ITestNGMethod> newComparator(boolean needPrioritySort)
-
sortOnPriority
private boolean sortOnPriority(ITestNGMethod[] interceptedOrder)
-
newQueue
private static java.util.concurrent.BlockingQueue<java.lang.Runnable> newQueue(boolean needPrioritySort)
-
privateRun
private void privateRun(XmlTest xmlTest)
Main method that create a graph of methods and then pass it to the graph executor to run them.
-
intercept
private ITestNGMethod[] intercept(ITestNGMethod[] methods)
Apply the method interceptor (if applicable) to the list of methods.
-
createWorkers
public java.util.List<IWorker<ITestNGMethod>> createWorkers(java.util.List<ITestNGMethod> methods)
Create a list of workers to run the methods passed in parameter. Each test method is run in its own worker except in the following cases: - The method belongs to a class that has @Test(sequential=true) - The parallel attribute is set to "classes" In both these cases, all the methods belonging to that class will then be put in the same worker in order to run in the same thread.- Specified by:
createWorkers
in interfaceIThreadWorkerFactory<ITestNGMethod>
- Parameters:
methods
- tasks that need to be executed- Returns:
- list of workers
-
runJUnitWorkers
private void runJUnitWorkers(java.util.List<? extends IWorker<ITestNGMethod>> workers)
-
afterRun
private void afterRun()
-
logStart
private void logStart()
Logs the beginning of thebeforeRun()
.
-
fireEvent
private void fireEvent(boolean isStart)
Trigger the start/finish event.- Parameters:
isStart
- true if the event is for start, false if the event is for finish
-
methods
private static java.util.stream.Stream<java.lang.reflect.Method> methods(IResultMap resultMap)
-
methods
private static java.util.stream.Stream<java.lang.reflect.Method> methods(java.util.stream.Stream<ITestNGMethod> methods)
-
getName
public java.lang.String getName()
- Specified by:
getName
in interfaceITestContext
- Returns:
- The name of this test.
-
getStartDate
public java.util.Date getStartDate()
- Specified by:
getStartDate
in interfaceITestContext
- Returns:
- Returns the startDate.
-
getEndDate
public java.util.Date getEndDate()
- Specified by:
getEndDate
in interfaceITestContext
- Returns:
- Returns the endDate.
-
getPassedTests
public IResultMap getPassedTests()
- Specified by:
getPassedTests
in interfaceITestContext
- Returns:
- A list of all the tests that run successfully.
-
getSkippedTests
public IResultMap getSkippedTests()
- Specified by:
getSkippedTests
in interfaceITestContext
- Returns:
- A list of all the tests that were skipped
-
getFailedTests
public IResultMap getFailedTests()
- Specified by:
getFailedTests
in interfaceITestContext
- Returns:
- A map of all the tests that failed, indexed by their ITestNGMethod.
- See Also:
ITestNGMethod
-
getFailedButWithinSuccessPercentageTests
public IResultMap getFailedButWithinSuccessPercentageTests()
- Specified by:
getFailedButWithinSuccessPercentageTests
in interfaceITestContext
- Returns:
- A list of all the tests that failed but are being ignored because annotated with a successPercentage.
-
getIncludedGroups
public java.lang.String[] getIncludedGroups()
- Specified by:
getIncludedGroups
in interfaceITestContext
- Returns:
- All the groups that are included for this test run.
-
getExcludedGroups
public java.lang.String[] getExcludedGroups()
- Specified by:
getExcludedGroups
in interfaceITestContext
- Returns:
- All the groups that are excluded for this test run.
-
getOutputDirectory
public java.lang.String getOutputDirectory()
- Specified by:
getOutputDirectory
in interfaceITestContext
- Returns:
- Where the reports will be generated.
-
getSuite
public ISuite getSuite()
- Specified by:
getSuite
in interfaceITestContext
- Returns:
- Returns the suite.
-
getAllTestMethods
public ITestNGMethod[] getAllTestMethods()
- Specified by:
getAllTestMethods
in interfaceITestContext
- Returns:
- All the test methods that were run.
-
getHost
public java.lang.String getHost()
- Specified by:
getHost
in interfaceITestContext
- Returns:
- The host where this test was run, or null if it was run locally. The returned string has the form: host:port
-
getExcludedMethods
public java.util.Collection<ITestNGMethod> getExcludedMethods()
- Specified by:
getExcludedMethods
in interfaceITestContext
- Returns:
- All the methods that were not included in this test run.
-
getFailedConfigurations
public IResultMap getFailedConfigurations()
- Specified by:
getFailedConfigurations
in interfaceITestContext
- Returns:
- The information about the failed configuration method invocations.
- See Also:
ITestContext.getFailedConfigurations()
-
getConfigurationsScheduledForInvocation
public IResultMap getConfigurationsScheduledForInvocation()
- Specified by:
getConfigurationsScheduledForInvocation
in interfaceIConfigEavesdropper
-
getPassedConfigurations
public IResultMap getPassedConfigurations()
- Specified by:
getPassedConfigurations
in interfaceITestContext
- Returns:
- The information about the successful configuration method invocations.
- See Also:
ITestContext.getPassedConfigurations()
-
getSkippedConfigurations
public IResultMap getSkippedConfigurations()
- Specified by:
getSkippedConfigurations
in interfaceITestContext
- Returns:
- The information about the skipped configuration method invocations.
- See Also:
ITestContext.getSkippedConfigurations()
-
addPassedTest
public void addPassedTest(ITestNGMethod tm, ITestResult tr)
- Specified by:
addPassedTest
in interfaceITestResultNotifier
-
getPassedTests
public java.util.Set<ITestResult> getPassedTests(ITestNGMethod tm)
- Specified by:
getPassedTests
in interfaceITestResultNotifier
-
getFailedTests
public java.util.Set<ITestResult> getFailedTests(ITestNGMethod tm)
- Specified by:
getFailedTests
in interfaceITestResultNotifier
-
getSkippedTests
public java.util.Set<ITestResult> getSkippedTests(ITestNGMethod tm)
- Specified by:
getSkippedTests
in interfaceITestResultNotifier
-
addSkippedTest
public void addSkippedTest(ITestNGMethod tm, ITestResult tr)
- Specified by:
addSkippedTest
in interfaceITestResultNotifier
-
addFailedTest
public void addFailedTest(ITestNGMethod testMethod, ITestResult result)
- Specified by:
addFailedTest
in interfaceITestResultNotifier
-
addFailedButWithinSuccessPercentageTest
public void addFailedButWithinSuccessPercentageTest(ITestNGMethod testMethod, ITestResult result)
- Specified by:
addFailedButWithinSuccessPercentageTest
in interfaceITestResultNotifier
-
getTest
public XmlTest getTest()
- Specified by:
getTest
in interfaceITestResultNotifier
-
getTestListeners
public java.util.List<ITestListener> getTestListeners()
- Specified by:
getTestListeners
in interfaceITestResultNotifier
-
getConfigurationListeners
public java.util.List<IConfigurationListener> getConfigurationListeners()
- Specified by:
getConfigurationListeners
in interfaceITestResultNotifier
-
logFailedTest
private void logFailedTest(ITestResult tr, boolean withinSuccessPercentage)
-
log
private static void log(java.lang.String s)
-
getVerbose
public static int getVerbose()
-
setVerbose
public void setVerbose(int n)
-
addTestListener
void addTestListener(ITestListener listener)
-
addListener
public void addListener(ITestNGListener listener)
-
addConfigurationListener
void addConfigurationListener(IConfigurationListener icl)
-
setExitCodeListener
private void setExitCodeListener(ITestListener exitCodeListener)
-
getExitCodeListener
public ITestListener getExitCodeListener()
- Specified by:
getExitCodeListener
in interfaceITestResultNotifier
-
dumpInvokedMethods
private void dumpInvokedMethods()
-
addMethodInterceptor
void addMethodInterceptor(IMethodInterceptor methodInterceptor)
-
getCurrentXmlTest
public XmlTest getCurrentXmlTest()
- Specified by:
getCurrentXmlTest
in interfaceITestContext
- Returns:
- the current XmlTest.
-
getAttribute
public java.lang.Object getAttribute(java.lang.String name)
- Specified by:
getAttribute
in interfaceIAttributes
- Parameters:
name
- The name of the attribute to return- Returns:
- The attribute
-
setAttribute
public void setAttribute(java.lang.String name, java.lang.Object value)
Description copied from interface:IAttributes
Set a custom attribute.- Specified by:
setAttribute
in interfaceIAttributes
- Parameters:
name
- The attribute namevalue
- The attribute value
-
getAttributeNames
public java.util.Set<java.lang.String> getAttributeNames()
- Specified by:
getAttributeNames
in interfaceIAttributes
- Returns:
- all the attributes names.
-
removeAttribute
public java.lang.Object removeAttribute(java.lang.String name)
Description copied from interface:IAttributes
Remove the attribute- Specified by:
removeAttribute
in interfaceIAttributes
- Parameters:
name
- The attribute name- Returns:
- the attribute value if found, null otherwise
-
getInjectorFactory
public IInjectorFactory getInjectorFactory()
- Specified by:
getInjectorFactory
in interfaceITestContext
-
-