Chapter 14Lesson 05260–340 min

Checkpoint Lab — Logs, Reports, output.xml, Rebot, and Result Post-Processing

Build a governed evidence pipeline from two local executions, a controlled failure/rerun, a verified Rebot merge, CI-friendly derivatives, and an explicit retention/redaction policy.

Checkpoint labEvidence pipelineMerge verificationRetentionRedaction

Learning objectives

  • Predict artifact and status changes before execution and verify them independently.
  • Produce raw, combined, rerun, merged, report/log, and xUnit artifacts without overwriting first-failure evidence.
  • Verify test counts/statuses, schema/generator metadata, sizes, and checksums.
  • Diagnose one intentionally wrong combine/merge choice and repair it without deleting originals.
  • Write a concise CI artifact-retention and privacy policy that distinguishes restricted raw evidence from publishable derivatives.

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. Checkpoint scenario

You own a release-evidence pipeline for a synthetic product. Two independent smoke suites must be reported together. A separate release-gate suite intentionally fails once, is rerun with repaired synthetic input, and must be merged so the final view reflects the corrected test while retaining the original failure. Your deliverable is not merely “all green”: it is a reproducible evidence packet explaining every artifact and transformation.

2. Setup and preflight

python --version
python -m robot --version
python -m robot.rebot --version
  • Use Robot Framework 7.4.2 stable for the chapter baseline and Python 3.8+.
  • Use a new disposable directory such as rf14-checkpoint.
  • No network service, external library, Pabot, browser, database, SSH, CI provider, container, or paid platform is required.
  • Use only synthetic values. Do not introduce real credentials or personal data.
  • Create sources/, tools/, and evidence/; do not point --outputdir at an existing shared results directory.

3. Predict before execution

Action Prediction to write down before running
Independent run A One PASS test; new raw/log/report under evidence/a
Independent run B One PASS test; separate root under evidence/b
Combine A+B New parent suite; total two PASS tests
Original release-gate run One FAIL + one PASS; non-zero process status
Rerun failed Only prior failed test executes; repaired input should PASS
Merge original+rerun Full logical suite restored; two PASS tests; replacement provenance recorded
xUnit derivative Summary artifact created without new test execution
Privacy scan No forbidden fake-secret markers in publishable derivatives

4. Create the checkpoint sources

*** Test Cases ***
API Contract Fixture Is Coherent
    [Tags]    checkpoint    independent
    Should Be Equal    schema-v1    schema-v1

Save as sources/a.robot.

*** Test Cases ***
Package Fixture Is Coherent
    [Tags]    checkpoint    independent
    Should Be Equal As Integers    7    7

Save as sources/b.robot.

*** Variables ***
${STATE}    degraded

*** Test Cases ***
Release Gate
    [Tags]    checkpoint    rerun
    Should Be Equal    ${STATE}    healthy    msg=Synthetic release state must be healthy

Stable Invariant
    [Tags]    checkpoint    rerun
    Should Be Equal    stable    stable

Save as sources/release.robot. Reuse the read-only inspector/checksum/privacy scripts from Lesson 2, or recreate them from that lesson.

5. Execute and combine the independent evidence

python -m robot --outputdir evidence/a sources/a.robot
python -m robot --outputdir evidence/b sources/b.robot
python -m robot.rebot   --name "Checkpoint Independent Bundle"   --output combined.xml   --outputdir evidence/combined   evidence/a/output.xml evidence/b/output.xml

Verify the raw inputs still exist. Inspect combined.xml and confirm two tests beneath a new aggregate root. Record the exact command and process return code.

6. Capture the controlled failure before rerunning

python -m robot   --variable STATE:degraded   --outputdir evidence/release/original   sources/release.robot
# Preserve the expected non-zero status and first-failure artifacts.

python -m robot   --rerunfailed evidence/release/original/output.xml   --variable STATE:healthy   --outputdir evidence/release/rerun   sources/release.robot

Before merging, independently inspect both XML files. The original must show Release Gate FAIL and Stable Invariant PASS. The rerun should contain only Release Gate and it should PASS. If those observations differ, stop and diagnose selection/input identity rather than forcing a merge.

7. Intentionally make—and diagnose—the wrong aggregation choice

# Diagnostic exercise only: combining a rerun is semantically wrong for the final view.
python -m robot.rebot   --name "WRONG Rerun Bundle"   --output wrong-combined.xml   --outputdir evidence/release/wrong   evidence/release/original/output.xml   evidence/release/rerun/output.xml

Inspect the result. You have preserved both roots instead of replacing the failed test in the same logical suite. This can make a reviewer see both the old failure and the rerun as independent evidence. Keep this artifact only as the diagnostic example, then use --merge for the production-correct derivative.

8. Produce and verify the corrected merged result

python -m robot.rebot   --merge   --output merged.xml   --outputdir evidence/release/merged   evidence/release/original/output.xml   evidence/release/rerun/output.xml

Verify: same logical top-level suite, two total tests, both final PASS, replacement note for the rerun test, and the original failure still preserved under evidence/release/original. A green merged report is acceptable only because the evidence packet also explains the earlier failure and rerun.

9. Generate publication derivatives

python -m robot.rebot   --xunit xunit.xml   --outputdir evidence/release/publish   evidence/release/merged/merged.xml

This creates default log/report plus xUnit under the publication directory. For a restricted CI system you may publish all three. For a broader audience, publish only artifacts allowed by your privacy policy; do not assume HTML is inherently safe.

10. Verification checklist

  • Record generator, generated, schemaversion, top suite, test count, and statuses for each raw/combined/merged XML.
  • Confirm schema version is expected for the pinned Robot Framework version.
  • Confirm independent combination created a new parent rather than replacing tests.
  • Confirm the rerun executed only the original failed test.
  • Confirm merge restored the full logical suite and final test statuses.
  • Confirm original failure artifacts still exist unchanged.
  • Record sizes and SHA-256 checksums for raw and derived artifacts.
  • Open the log/report and verify hierarchy/status visually.
  • Confirm xUnit exists and its test count matches the intended final view.
  • Run the synthetic forbidden-marker scan over publishable artifacts.

11. Write the CI retention/redaction policy

Artifact class Example policy
Raw Robot output Restricted access; retain failed/release-gate runs for diagnostic/compliance window; checksum and preserve immutably
log.html Engineer access; retain when detailed diagnosis is required; review privacy before broader publication
report.html Publish to normal CI viewers if approved; still treat as potentially sensitive
xUnit Publish to CI test dashboard; retain as summary derivative, not sole Robot evidence
Merged/combined XML Label as derivative with input checksums and Rebot version/command
Wrong/stale diagnostic artifacts Keep only for the lab or incident record; clearly mark non-authoritative
Secrets/PII Prevent at source; no real values in test data/CLI/logs; restrict incident artifacts and rotate real credentials if leaked

12. Cleanup / rollback

Cleanup is intentionally boring: after the evidence review, remove only the run-owned rf14-checkpoint directory. Do not delete parent directories, shared CI workspaces, or repository source. In a real CI pipeline, cleanup happens only after required raw and derivative artifacts have been validated and uploaded to their correct retention tier.

13. What Chapter 14 adds to the production operating model

Chapter 13 made status truthful; Chapter 14 makes that truth durable. Your operating model now includes raw machine-readable evidence, explicit presentation derivatives, schema/version checks, combine-versus-merge identity rules, first-failure retention, artifact checksums, privacy/access tiers, and reproducible Rebot transformations. This is the foundation Chapter 15 will use when selecting tests, rerunning failures, and defining execution profiles.

14. Knowledge check

Why was the wrong combined rerun artifact kept temporarily?

What must be true before --merge is trusted?

Why retain original failed output after the merged result is green?

Which artifact is best for CI interoperability, and which is best for Robot-aware post-processing?

What does Chapter 15 add next?

15. Checkpoint complete

You have built a complete local evidence pipeline: separate raw runs, XML inspection, correct independent combination, preserved controlled failure, failed-test rerun, diagnosed wrong aggregation, correct merge, report/log/xUnit derivatives, checksums, privacy checks, and retention policy. The result is auditable because every transformation is explicit and the original evidence remains attributable.

Next lesson

Command-Line Selection, Tag Expressions, Reruns, and Execution Profiles: Core Concepts and Mental Model

Continue with Command-Line Selection, Tag Expressions, Reruns, and Execution Profiles: Core Concepts and Mental Model. 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.