Configure ABLUnit output writers
- Last Updated: October 15, 2026
- 3 minute read
- OpenEdge
- Version 13.1
- Documentation
ABLUnit supports two output writer formats, giving you the flexibility to generate results compatible with both Progress Developer Studio for OpenEdge and third-party CI/CD tools:
ablunitwriter (implemented byResultsXmlWriter) โ the Progress Developer Studio for OpenEdge-compatible format, based on a lenient Jenkins JUnit schema. This is the default.junitwriter (implemented byJUnitXmlWriter) โ a stricter format based on the Apache Ant JUnit schema, intended for CI/CD tooling such as Jenkins, Azure DevOps, GitLab CI, GitHub Actions, and TeamCity.
An ablunit.config.schema file is included with the ABLUnit source code to
validate the JSON configuration file passed as -param
"CFG=C:\config-file" when executing
ABLUnitCore.p.
Default writer behavior
If the writers object is not specified, ABLUnit uses the
fileName and format properties to configure
the default ablunit writer. Existing configuration files continue
to work without modification:
|
Configure writers
To generate output from one or both writers, add a writers object under
output:
|
Each writer behaves as follows:
- If a writer key is present, even with a
nullvalue, that writer runs using its default settings. - If
writersis specified, it overrides thefileNameandformatproperties set directly underoutput, which otherwise configure the defaultablunitwriter. - Each writer can set its own
fileName. Defaults apply if not specified. - Both writers default to, and currently only support,
"xml".
Example: Use both writers with defaults
|
Generates both results.xml (ablunit writer) and
junit-results.xml (junit writer), using
default file names.
Example: Generate JUnit output only
|
Generates only ci-test-results.xml, from the junit
writer.
Example: writers takes precedence over fileName
|
Generates only junit-output.xml. Because writers is
present, "fileName": "direct-results" is ignored.
junit writer metadata
The junit writer produces strict Apache Ant JUnit schema output and includes
metadata not present in the ablunit writer's output:
- An ISO 8601 timestamp on each
<testsuite>element, indicating when the suite ran:<testsuite name="MyTestClass" timestamp="2026-08-21T14:32:05" ...> - The hostname of the machine that ran the tests, on each
<testsuite>element, for traceability in distributed CI/CD environments:<testsuite name="MyTestClass" hostname="build-server-01" ...> - Time values in decimal seconds with millisecond precision:
<testsuite name="MyTestClass" time="1.234" ...> <testcase name="testMethod1" classname="MyTestClass" time="0.456" /> </testsuite> - A required classname attribute on every
<testcase>element - Required (though currently empty)
<system-out>and<system-err>elements
Format comparison
| Feature | ablunit writer |
junit writer |
|---|---|---|
| Schema | Lenient JUnit (Jenkins-compatible) | Apache Ant JUnit (strict) |
| Timestamp | Not included | ISO 8601 timestamp on <testsuite> |
| Hostname | Not included | Hostname on <testsuite> |
| Time Format | Decimal seconds | Decimal seconds (same) |
| Classname | Optional | Required on <testcase> |
| System Output | Not included | Required on <system-out> and
<system-err> |
| Testsuites Attributes | Includes summary counts | Container only (no attributes) |
| Use Case | Progress Developer Studio for OpenEdge integration | CI/CD tooling (Jenkins, Azure DevOps, GitLab CI) |
Both writers can run from a single test execution, so you can generate Progress Developer Studio for OpenEdge-compatible and CI/CD-compatible results without running tests twice.