QAOps test results
Important
This section contains information that is only applicable to Skyline employees.
A QAOps test result contains the outcome of one test case execution.
Required fields
Each test result must include the following fields:
Name: A short, human-readable name for the test case. Any non-empty string is allowed.
Outcome: The final test result. Allowed values are case-insensitive:
Ok,Fail,NotExecuted, andNotApplicable.
Optional fields
You can add the following fields to provide more context:
Message: Additional details, such as what was tested or how to investigate a failure.
Duration: The execution time of the test case.
Tags: A semicolon-separated or comma-separated list of tags that can be used for filtering in the low-code app or for ownership and categorization metadata.
TestAspect: The result type. Allowed values are
ExecutionandAssertion.Executionindicates the health of the test framework or runner itself (for example, script setup failures).Assertionindicates the outcome of the actual product or solution behavior that is being tested.
Storage behavior
At present, QAOps stores test results in memory and in STaaS through elements on the QAOps system.
This storage model is intended for short-term retention, similar to keeping only the most recent runs of a Jenkins pipeline or GitHub workflow.
Long-term retention through additional technology stacks is planned in 2026.
The current design prioritizes speed and cost efficiency. The framework and low-code apps load active data directly from memory for each active user.
Sending results to QAOps
You can send test results to QAOps in four ways:
Use the PowerShell API with
Push-TestCaseResultto send test results from your QAOps test package pipeline.Use HTTP POST calls to
http://localhost:5200/QAOps/testcaseresult.For DataMiner source code tests (to support the current test pool), results sent through QAHelperLib are redirected to QAOps when they run on a QAOps system.
For legacy GitHub test projects that use QAPortalAPI, results are redirected to QAOps when they run on a QAOps system.
PowerShell API reference
Push-TestCaseResult posts a single test case result to the QAOps Bridge API.
The cmdlet serializes input to camelCase JSON, omits null fields, and sends an HTTP POST request with a 30-second timeout.
Endpoint resolution
The target endpoint is selected in this order:
-ApiUrlparameter (explicit override).QAOPS_API_URLenvironment variable.Built-in default:
http://localhost:5200/QAOps/testcaseresult.
Parameters
-Outcome(required):Ok,Fail,NotExecuted, orNotApplicable(case-insensitive).-Name(required): Short test case name.-TestCaseId(optional): ULID string. In most cases, this will be left empty, and a new ULID will be generated client-side. You can also generate a ULID yourself if this is preferred. In addition, in case you want to change the name later and make sure your test results still get set to the same test case, you can specify the ULID of your test case and change the name.-Message(optional): Free-form details. Omitted from payload if empty.-DateTime(optional): Timestamp of the result. If omitted, the server sets current UTC time.-Duration(optional): Test duration as a PowerShellTimeSpan.-Tags(optional): Tag string converted to a key-value dictionary.Use
;or,to separate items.Use
key=valueor a bare key.A bare key is stored as value
"true".Only the first
=splits key and value.Duplicate keys are case-insensitive, and the last value wins.
If no valid tags are provided, the
tagsfield is omitted.
-TestAspect(optional, defaultAssertion):AssertionorExecution(case-insensitive).-ApiUrl(optional): Overrides endpoint selection.
Syntax
Push-TestCaseResult -Outcome {Ok | Fail | NotExecuted | NotApplicable} `
-Name <string> `
[-TestCaseId <string>] `
[-Message <string>] `
[-DateTime <datetime>] `
[-Duration <timespan>] `
[-Tags <string>] `
[-TestAspect {Assertion | Execution}] `
[-ApiUrl <string>] `
[<CommonParameters>]
Payload shape
{
"testCaseId": "<ULID>",
"name": "<string>",
"outcome": "<Ok|Fail|NotExecuted|NotApplicable>",
"message": "<string|null>",
"dateTime": "<ISO 8601|null>",
"duration": "<TimeSpan|null>",
"tags": {
"<key>": "<value>"
},
"testAspect": "<Assertion|Execution|null>"
}
If no tags are supplied, the tags field is omitted.
Examples
# Minimal
Push-TestCaseResult -Outcome Ok -Name "Ping basic"
# With message and timing
Push-TestCaseResult -Outcome Fail -Name "Login form" `
-Message "Submit returned 500" -Duration "00:00:02.340"
# With explicit timestamp
Push-TestCaseResult -Outcome NotExecuted -Name "Backup job" `
-DateTime "2025-10-07 09:15:00"
# Tags with mixed separators
Push-TestCaseResult -Outcome Ok -Name "ETL step" `
-Tags 'env=prod;team=data,runId=42;note="morning batch"'
# Bare tag flags
Push-TestCaseResult -Outcome Ok -Name "Feature check" `
-Tags 'featureX;tenant=acme'
# Execution aspect
Push-TestCaseResult -Outcome Fail -Name "Setup containers" `
-TestAspect Execution -Message "Docker daemon unavailable"
# Custom endpoint
Push-TestCaseResult -Outcome Ok -Name "Smoke" `
-ApiUrl "https://qaops.example.com/QAOps/testcaseresult"
# Endpoint via environment variable
$env:QAOPS_API_URL = "https://bridge:5200/QAOps/testcaseresult"
Push-TestCaseResult -Outcome Ok -Name "Nightly sanity"
Troubleshooting
HTTP
400or422: Verify-Outcomeand-Tagsformat.HTTP
401or403: Verify authentication and endpoint permissions.HTTP
404: Verify the path/QAOps/testcaseresult.TLS or certificate errors: Verify HTTPS configuration and certificate trust.
Timeout: Default client timeout is approximately 30 seconds. Verify connectivity and server health.
Date parsing errors: ISO 8601 format is preferred, for example,
2025-10-07T14:23:00Z.Duration parsing errors: Use standard
TimeSpanformats, for example,hh:mm:ss.Missing tags in output: Empty or whitespace-only
-Tagsvalues are omitted.
Additional resources
You can use the following commands to get a detailed block of help directly in the CLI:
Get-Help Push-TestCaseResult -FullGet-Help about_CommonParametersGet-Command Push-TestCaseResult -Syntax