public class XMLResultAggregator extends Task implements XMLConstants
The main problem is due to the fact that a JVM can be forked for a testcase thus making it impossible to aggregate all testcases since the listener is (obviously) in the forked JVM. A solution could be to write a TestListener that will receive events from the TestRunner via sockets. This is IMHO the simplest way to do it to avoid this file hacking thing.
| Modifier and Type | Field and Description |
|---|---|
static String |
DEFAULT_DIR
The default directory: ..
|
static String |
DEFAULT_FILENAME
the default file name: TESTS-TestSuites.xml
|
protected ArrayList |
filesets
the list of all filesets, that should contains the xml to aggregate
|
protected int |
generatedId
the current generated id
|
protected File |
toDir
the directory to write the file to
|
protected String |
toFile
the name of the result file
|
protected Vector |
transformers |
ATTR_CLASSNAME, ATTR_ERRORS, ATTR_FAILURES, ATTR_ID, ATTR_MESSAGE, ATTR_NAME, ATTR_PACKAGE, ATTR_TESTS, ATTR_TIME, ATTR_TYPE, ATTR_VALUE, ERROR, FAILURE, HOSTNAME, PROPERTIES, PROPERTY, SYSTEM_ERR, SYSTEM_OUT, TESTCASE, TESTSUITE, TESTSUITES, TIMESTAMP| Constructor and Description |
|---|
XMLResultAggregator() |
| Modifier and Type | Method and Description |
|---|---|
void |
addFileSet(FileSet fs)
Add a new fileset containing the XML results to aggregate
|
protected void |
addTestSuite(Element root,
Element testsuite)
Add a new testsuite node to the document.
|
protected Element |
createDocument()
Create a DOM tree.
|
AggregateTransformer |
createReport()
Generate a report based on the document created by the merge.
|
void |
execute()
Aggregate all testsuites into a single document and write it to the specified directory and file.
|
File |
getDestinationFile()
Get the full destination file where to write the result.
|
protected File[] |
getFiles()
Get all
.xml files in the fileset. |
void |
setTodir(File value)
Set the destination directory where the results should be written.
|
void |
setTofile(String value)
Set the name of the aggregegated results file.
|
protected void |
writeDOMTree(Document doc,
File file)
Write the DOM tree to a file.
|
protected ArrayList filesets
protected String toFile
protected File toDir
protected Vector transformers
public static final String DEFAULT_DIR
public static final String DEFAULT_FILENAME
protected int generatedId
public AggregateTransformer createReport()
public void setTofile(String value)
DEFAULT_FILENAMEvalue - the name of the file.setTodir(File)public void setTodir(File value)
DEFAULT_DIR.
When given a relative directory it will resolve it from the project directory.value - the directory where to write the results, absolute or relative.public void addFileSet(FileSet fs)
fs - the new fileset of xml results.public void execute()
throws BuildException
BuildException - thrown if there is a serious error while writing the document.public File getDestinationFile()
protected File[] getFiles()
.xml files in the fileset.protected void writeDOMTree(Document doc, File file) throws IOException
doc - the XML document to dump to disk.file - the filename to write the document to. Should obviouslly be a .xml file.IOException - thrown if there is an error while writing the content.protected Element createDocument()
Create a DOM tree. Has 'testsuites' as firstchild and aggregates all testsuite results that exists in the base directory.
protected void addTestSuite(Element root, Element testsuite)
Add a new testsuite node to the document. The main difference is that it split the previous fully qualified name into a package and a name.
For example: org.apache.Whatever will be split into org.apache and Whatever.
root - the root element to which the testsuite node should be appended.testsuite - the element to append to the given root. It will slightly modify the original node to change the name
attribute and add a package one.Copyright © 2017 SAP SE. All Rights Reserved.