Skip to content

Custom Metadata Feature#5685

Open
febb0e wants to merge 3 commits into
robotframework:masterfrom
imbus:feature/custom-metadata
Open

Custom Metadata Feature#5685
febb0e wants to merge 3 commits into
robotframework:masterfrom
imbus:feature/custom-metadata

Conversation

@febb0e

@febb0e febb0e commented Jun 15, 2026

Copy link
Copy Markdown

Closes #4409

Overview

Add support for testcase metadata via the normal test setting syntax:

  • [Metadata] Name Value

This metadata is now carried through execution, written to output.xml, parsed back from XML, into the log.

What changed

  • Test case settings now accept Metadata.
  • Test model (running + result) now includes metadata on test cases.
  • Suite runner copies test metadata from parsed data to result objects.
  • XML logger writes test metadata as <meta name="...">...</meta> under each <test>.
  • XML result parsing accepts and restores test-level <meta> entries.
  • JS model/log rendering now includes test metadata (same as already used for suite metadata).

Compatibility

  • Existing suite metadata behavior is unchanged.
  • XML parsing remains compatible.

Tests

Added acceptance suite for the core flow:

  • parse test metadata from test settings
  • verify metadata in in-memory result model
  • verify metadata in output.xml
  • verify metadata survives rebot processing
  • verify metadata is present in log output

Notes

This change is only about explicit [Metadata] in test cases.
It does not introduce custom bracket settings like [Owner] or a new CLI filtering flag.

Usage example

*** Test Cases ***
Login With Valid Credentials
	[Metadata]    Owner     QA Team
	[Metadata]    Ticket    RF-4409
	[Metadata]    Component     Authentication
	Open Application
	Login With Credentials
	Click Login Button
	Dashboard Should Be Visible
	[Teardown]    Close Application

Copilot AI review requested due to automatic review settings June 15, 2026 13:52

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Adds support for per-test-case metadata end-to-end (parsing → running model → result model → XML output → Rebot → log/report JS model + HTML rendering).

Changes:

  • Parse [Metadata] in test cases and store it on running/result TestCase models.
  • Persist test metadata in output.xml (<meta name="...">value</meta>) and read it back.
  • Expose test metadata in JS log model, update log.html template, and add acceptance tests.

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
utest/reporting/test_jsmodelbuilders.py Updates expected JS model structure to include metadata for tests.
src/robot/running/suiterunner.py Passes parsed test metadata into the execution result test object.
src/robot/running/model.py Extends running test model constructor to carry metadata.
src/robot/running/builder/transformers.py Collects per-test metadata during parsing/model transformation.
src/robot/result/xmlelementhandlers.py Allows <meta> children under <test> when building results from XML.
src/robot/result/model.py Extends result test model constructor to accept metadata.
src/robot/reporting/jsmodelbuilders.py Emits test metadata into the JS model used by logs/reports.
src/robot/parsing/lexer/settings.py Enables Metadata setting within test case settings.
src/robot/output/xmllogger.py Writes test metadata into output.xml as <meta> elements.
src/robot/model/testcase.py Adds metadata to the data model and includes it in to_dict().
src/robot/htmldata/rebot/testdata.js Parses metadata from the JS model and shifts indices accordingly.
src/robot/htmldata/rebot/model.js Stores parsed metadata on the JS Test object.
src/robot/htmldata/rebot/log.html Renders test metadata rows in the log.
atest/testdata/output/testcase_metadata.robot New test data exercising [Metadata] in test cases.
atest/robot/output/testcase_metadata.robot New acceptance tests covering model, XML, Rebot, and log rendering.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 152 to 157
self._resolve_setting(data.tags),
self._get_timeout(data),
data.lineno,
metadata=data.metadata.copy(),
start_time=datetime.now(),
)
Comment on lines +283 to +288
{{each metadata}}
<tr>
<th>{{html $value[0]}}:</th>
<td class="doc">{{html $value[1]}}</td>
</tr>
{{/each}}
Comment on lines 215 to +219
data["doc"] = self.doc
if self.tags:
data["tags"] = tuple(self.tags)
if self.metadata:
data["metadata"] = self.metadata
tags: "Tags | Sequence[str]" = (),
timeout: "str | None" = None,
lineno: "int | None" = None,
metadata: "dict | None" = None,
return Tags(tags)

@setter
def metadata(self, metadata: "dict|None") -> Metadata:
@Noordsestern

Copy link
Copy Markdown
Member

Makes #5495 obsolete

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Test metadata

3 participants