Frequently asked questions
Answers about runs that do not appear, suites and cases created from JUnit XML, job retries, the webhook, and API keys.
Sending results from CI
- Why does my CI pipeline complete successfully, but no test runs appear in Qably?
Verify that the
QABLY_API_KEYenvironment variable is defined as a repository secret for that CI job and that the reporting step executed. Using theif: always()condition ensures the upload runs even when tests fail.Confirm that your test runner generated the XML report at the specified file path before the upload step. If the
curlcommand returns an HTTP error code (such as401for a revoked key or400for malformed XML), inspect the runner logs to determine the exact cause.- How does Qably automatically create and organize test suites and cases?
When importing a JUnit XML report, Qably inspects the XML attributes to identify each suite and test case. If a suite with that name does not already exist in the project, the server creates it immediately and assigns the test cases to it.
You do not need to register tests in advance through the web interface or manage numerical identifiers. When posting JSON payloads directly to the API, pass the
suiteNamefield so the system automatically matches or creates the suite.- What happens in Qably if I retry a failed test job in CI?
Qably handles retries idempotently when you supply an
externalIdquery parameter. Deriving this value from runner execution identifiers (such as the workflow run ID and job name in GitHub Actions) instructs the server to update the existing run instead of creating duplicate records.This ensures project pass rates and test metrics reflect the final status of the run without skewing historical analytics.
- Can I record individual test steps and expected results when uploading JUnit XML?
The JUnit XML standard only records the final status of each test case (passed, failed, or skipped), its execution duration, and failure stack traces. For this reason, XML imports leave step definitions and expected outcomes empty.
To track structured test procedures with individual steps and expected results, send JSON payloads directly to the
POST /runs/ingestendpoint, or maintain structured test definitions within the web dashboard.
Repository and API keys
- Why are commits and branches missing from the project Repository section?
The Repository view relies exclusively on the SCM webhook configured for your GitHub repository. Submitting test reports from CI populates execution history, but does not synchronize commit activity or branch metadata.
To inspect code changes and link them with your test runs, configure the repository webhook using the payload URL and secret described in step 2 of the quickstart.
- Can a single API key submit test results to multiple projects?
No. Each API key is scoped strictly to a single project within your organization. The server infers the target project directly from the token and restricts its permissions solely to test ingestion.
For monorepos or multi-service architectures, generate a dedicated API key for each project and configure the corresponding secret in your CI workflows.