Chapter 14Lesson 01180–240 min

Logs, Reports, output.xml, Rebot, and Result Post-Processing: Core Concepts and Mental Model

Treat Robot Framework outputs as durable evidence: distinguish the machine-readable result model from HTML presentations and understand what Rebot changes without re-running tests.

output.xmlRebotEvidence modelSchemaAuditability

Learning objectives

  • Trace execution state into output.xml, log.html, report.html, xUnit, and post-processed artifacts.
  • Explain why output.xml is evidence input while HTML files are presentations generated from the result model.
  • Distinguish Rebot combine from --merge and identify when each preserves truthful identity.
  • Inspect schema/generator metadata and suite/test status without mutating the run.
  • Define retention, privacy, and ownership boundaries before post-processing evidence.

Current compatibility baseline. Verified 2026-08-31: Robot Framework 7.4.2 is the current stable release and requires Python 3.8+; 7.5b1 is a pre-release and is not required here. The 7.4.2 result.xsd is schema version 5; default XML outputs carry a schemaversion attribute and Robot Framework 7.x can also read legacy output. --legacyoutput exists for Robot Framework 6.x-compatible consumers. Rebot combines independent outputs by creating a new parent suite; --merge is for the same logical top-level suite, including reruns, where later matching test results replace earlier results and later SKIP results do not replace originals. The built-in Testdoc tool is deprecated in 7.4.2 in favor of external Testdoc and is not a result-reporting substitute.

1. The problem: a console session is not durable release evidence

Chapter 13 made failure semantics truthful. Chapter 14 asks what happens after the process exits. A green or red console line is transient. CI, incident review, release approval, reruns, and trend systems need artifacts that preserve exactly which suite/test ran, its status, messages, timing, tags, and hierarchy.

Robot Framework solves this with a result model. The executor builds result state while tests run and serializes it to an output file. The default XML file is commonly named output.xml. Human-facing log.html and report.html are presentations generated from that result state. Rebot reads output files later and can filter, combine, merge, or regenerate presentations without executing the system under test again.

2. Read-only preflight before touching artifacts

python --version
python -m robot --version
python -m robot.rebot --version
# Inspect the intended results directory before a run.
# PowerShell: Get-ChildItem -Recurse results -ErrorAction SilentlyContinue
# Bash:       find results -maxdepth 3 -type f 2>/dev/null

Record the interpreter, Robot Framework/Rebot version, execution command, selected source path, output directory, and any files that already exist. The important question is provenance: if report.html already exists, which output.xml produced it? Never overwrite the only first-failure artifact merely to make a prettier report.

3. Mental model: execution result → evidence → presentations → post-processing

Robot Framework result evidence flow
flowchart TD
A[.robot source + inputs] --> B[Robot executor]
B --> C[In-memory result model]
C --> D[output.xml / output.json]
C --> E[log.html]
C --> F[report.html]
C --> G[xUnit XML optional]
D --> H[Rebot]
H --> I[Filtered/combined/merged result model]
I --> J[new log/report]
I --> K[new output file optional]
I --> L[xUnit optional]
M[Artifact retention policy] --> D
M --> E
M --> F
M --> K
N[Privacy/access policy] --> M

The executor is the only box that calls test keywords and changes the system under automation. Rebot is downstream: it reads result artifacts and transforms result state. That distinction matters during an incident. A report regenerated with a different title is not a new test execution. A merged result can change the final presentation of a rerun, but it must retain enough provenance to explain which original result was replaced.

4. Define the owners before modifying result data

Object Owner / scope What may change it
Suite/test/task source Repository / test author Source edit; not Rebot
Robot variable/library/external state Execution runtime Robot run and libraries
In-memory result model Current Robot/Rebot process Execution or post-processing options/modifiers
output.xml Artifact filesystem / CI workspace Robot writes it; Rebot writes a new one only with --output
log.html / report.html Presentation artifacts Robot or Rebot generation
xUnit XML CI interoperability artifact Robot/Rebot with --xunit
Credentials/PII Secret/privacy boundary Must be prevented from leaking; HTML/XML are not secret stores
Retention/checksum manifest CI/release governance Artifact pipeline, not Robot test logic

5. What output.xml proves—and what it does not

In Robot Framework 7.4.2 the authoritative XSD is schema version 5. The root <robot> element can carry generator, generated, rpa, and schemaversion attributes. The file then contains the executed suite tree, optional statistics, and execution errors/warnings. Suite/test elements contain status and execution structure.

<robot generator="..." generated="..." rpa="false" schemaversion="5">
  <suite name="Example" source="..." id="s1">
    ... tests / keywords / messages ...
    <status status="PASS" .../>
  </suite>
  <statistics>...</statistics>
  <errors>...</errors>
</robot>

Do not treat a hand-copied XML fragment as proof by itself. Provenance also needs the command, source revision, framework/interpreter versions, environment inputs, artifact path, and ideally a checksum. The XML proves Robot's recorded execution result; it does not independently prove the external system was trustworthy or that a credential was handled safely.

6. Log, report, and xUnit serve different readers

Artifact Primary audience Strength Limitation
output.xml Robot/Rebot/tools Detailed machine-readable result evidence Can be large and privacy-sensitive
log.html Engineer diagnosing a run Hierarchical keyword/message detail HTML presentation; can embed sensitive data
report.html Reviewer/release owner Suite/tag/test summary and links Less diagnostic detail than log
xUnit XML CI/testing dashboards Broad interoperability Summary-oriented; not a replacement for Robot output
Console Person watching run Immediate feedback Transient and incomplete as evidence

7. Combine and merge answer different identity questions

Combine says: “these are independent result roots that belong under one reporting umbrella.” Rebot creates a new top-level suite and places the input roots below it. Merge says: “these files describe the same logical top-level suite, perhaps because I reran failures or split execution.” With --merge, matching later test results replace earlier ones; later skipped matches are ignored so they do not erase a real earlier result. Merging requires compatible top-level suite identity.

Situation Choose Why
Linux and Windows compatibility runs as independent roots Combine Preserve each root as a child under an aggregate report
Initial run plus rerun of failed tests --merge Replace matching failed-test results with the rerun result
Same suite executed in selected pieces --merge Reconstruct one logical suite tree
Two unrelated products with coincidentally similar test names Combine Do not pretend they are one logical suite

8. Artifact retention is a separate control plane

A test can pass while artifact upload fails. A test can fail while its evidence is safely retained. Therefore execution status and evidence-retention status are separate controls. Production CI should normally retain the raw machine-readable result needed for diagnosis, publish appropriate HTML/xUnit derivatives, record versions/checksums, and apply access/retention policy based on sensitivity.

Privacy boundary. Robot result artifacts can contain arguments, return values, keyword messages, paths, environment-derived data, HTTP bodies, and library output. Do not upload them to public artifacts by default. Secret masking helps only inside Secret-aware Robot surfaces and is not encryption or a guarantee against downstream library disclosure.

9. Why this matters in DevOps

A release gate becomes auditable when the same evidence can be consumed by a human, Rebot, CI, and later incident review. The durable contract is: preserve the original run, identify every derived artifact, make transformation commands reproducible, keep schema/version compatibility explicit, and never let report cosmetics replace source-of-truth status.

10. Knowledge check

If you regenerate log.html from output.xml with Rebot, did you execute the tests again?

When is --merge preferable to normal combining?

Why is xUnit not enough as the only retained Robot artifact?

What does schemaversion tell a consumer?

Does removing a secret-looking value from a derived HTML report prove the raw output is safe?

11. Summary and next step

You now have the evidence model: execution produces result state; output.xml is the machine-readable artifact; log/report/xUnit are different views or interoperability outputs; Rebot transforms recorded results; combine and merge preserve different identities; and retention/privacy are explicit operational controls. Lesson 2 turns this model into a complete local workflow.

Next lesson

Logs, Reports, output.xml, Rebot, and Result Post-Processing: Guided Hands-On Workflow

Continue with Logs, Reports, output.xml, Rebot, and Result Post-Processing: Guided Hands-On Workflow. It builds directly on the state, evidence, and operating assumptions established here, so carry those constraints forward rather than treating the next page as an isolated topic.

Further reading

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0 Send only Ethereum/ERC-20 compatible assets to this address.