Problem
Local runs (and some CI runs) lack structured metadata that would allow filtering and grouping in the Dashboard. A developer cannot currently annotate a run with information like which team owns it, which JIRA ticket it relates to, or which machine profile was used — making Dashboard search and filtering over local runs impractical.
Proposed Solution
Add an optional Tags configuration property accepting a Dictionary<string, string> with a corresponding XPING_TAGS environment variable override using a comma-separated key:value format (Datadog convention).
Behaviour
- Tags are a set of
key:value string pairs attached at the session level (not per-test).
XPING_TAGS env var uses comma-separated key:value format; it merges with (and overrides) any tags set in config.
- Keys and values are case-insensitive, trimmed.
- Tags are included in the upload payload and stored as a JSON column on the session entity in the Dashboard.
- Tags are indexed for faceted filtering in the Dashboard (e.g. filter by
developer:jane or ticket:JIRA-1234).
Configuration
Via appsettings.json / SDK options:
{
"Xping": {
"Tags": {
"team": "payments",
"ticket": "JIRA-1234"
}
}
}
Via environment variable:
export XPING_TAGS="developer:jane,branch:feat/payment,ticket:JIRA-1234,machine:macbook-m3"
Naming rationale
XPING_TAGS (plural) follows the Datadog DD_TAGS convention. It is distinct from the per-test Tags already present on TestMetadata — this is a session-level concept.
Industry References
- Datadog Test Visibility:
DD_TAGS with key:value comma-separated format is the direct precedent.
- Playwright and Cypress both support
--tag CLI flags for session-level labelling.
- OpenTelemetry resource attributes use the same structured
key=value pattern for signal metadata.
Acceptance Criteria
Problem
Local runs (and some CI runs) lack structured metadata that would allow filtering and grouping in the Dashboard. A developer cannot currently annotate a run with information like which team owns it, which JIRA ticket it relates to, or which machine profile was used — making Dashboard search and filtering over local runs impractical.
Proposed Solution
Add an optional
Tagsconfiguration property accepting aDictionary<string, string>with a correspondingXPING_TAGSenvironment variable override using a comma-separatedkey:valueformat (Datadog convention).Behaviour
key:valuestring pairs attached at the session level (not per-test).XPING_TAGSenv var uses comma-separatedkey:valueformat; it merges with (and overrides) any tags set in config.developer:janeorticket:JIRA-1234).Configuration
Via
appsettings.json/ SDK options:{ "Xping": { "Tags": { "team": "payments", "ticket": "JIRA-1234" } } }Via environment variable:
Naming rationale
XPING_TAGS(plural) follows the DatadogDD_TAGSconvention. It is distinct from the per-testTagsalready present onTestMetadata— this is a session-level concept.Industry References
DD_TAGSwithkey:valuecomma-separated format is the direct precedent.--tagCLI flags for session-level labelling.key=valuepattern for signal metadata.Acceptance Criteria
XpingConfigurationhas a nullableTagsproperty (Dictionary<string, string>?)XPING_TAGSenv var (key:value,key:value) is parsed and merged with config tags (env takes precedence on key conflicts)key:valueentries inXPING_TAGSare skipped with a warning (not a hard failure)