# Upload Allure results

Source: https://docs.qualflare.com/docs/cli/allure · Last updated: 2026-10-29

Upload an Allure 2 results directory to Qualflare with qf 0.4.0 or later: no --format needed, retries grouped into one test, and the fields qf reads.

To upload Allure 2 results to Qualflare, run `qf <identifier> collect allure-results/` on the directory your Allure adapter writes; you need qf 0.4.0 or later and a saved identifier for the project. qf reads the directory without `--format`, and groups each test's retries into one result.

Requires qf 0.4.0 or later.

## Before you begin

* qf 0.4.0 or later: `qf list-formats` lists `allure` under Generic. If it doesn't, [upgrade qf](https://docs.qualflare.com/docs/cli/installation#upgrading).
* A saved identifier for the project: `qf login <identifier>` ([Authenticate with qf login](https://docs.qualflare.com/docs/cli/authentication#qf-login)).
* Tests that write Allure 2 results, through an adapter such as allure-pytest, allure-junit5, allure-testng or allure-playwright.
* A clean results directory for each run. qf reads every `*-result.json` in it, so results left from an earlier run upload too, as retries of tests that ran again and as tests of their own otherwise.

## Upload the results

### Step 1: Run your tests

Run your tests with the Allure adapter on. It writes one `-result.json` file per test execution, and the attachment files, into its results directory, such as `allure-results/`.

### Step 2: Check the results directory

Optionally, check the directory before you upload; this needs no saved identifier:

```text
$ qf validate allure-results/
Validating 1 test result file(s)...
OK allure-results/: valid (allure, 5 tests)
```

The count is of tests, with each test's retries counted once.

### Step 3: Upload the directory

Run `collect` on the directory, with your identifier in place of `myapp`:

```bash
qf myapp collect allure-results/
```

Pass the directory, not its files. A single result file uploads without its attachments, and its retries are not grouped. The upload becomes one launch.

## Upload from CI

In a pipeline, run the same command in a step after your tests, with `qf login <identifier> --force` and the token in `QF_TOKEN` first, and let the step run when the tests fail. See [CI/CD integration](https://docs.qualflare.com/docs/cli/ci-cd).

## Check the launch

Open [**Launches**](https://docs.qualflare.com/docs/runs/launches) in the project; the newest launch is your upload.

* **Suite:** on the **Test Cases** tab, every test lands in one suite, named after the results' top-level suite label when only one appears, or `Allure results` otherwise.
* **Retries:** a test that ran more than once shows its **Retries** count, and one that failed and then passed is marked flaky.
* **Framework:** the launch's `framework` field, which [`qf <identifier> launch get`](https://docs.qualflare.com/docs/cli/read-commands#launch-get) prints, is the framework your results name in their `framework` label, as `qf list-formats` names it, when they name exactly one framework qf recognises; otherwise `allure`.

## What qf reads

From each `-result.json`, qf reads the test's status, name, suite labels, steps, parameters, links, failure message and attachments:

* `broken` and `unknown` become Error.
* Hidden parameters are left out; masked ones keep their name but not their value.
* Images, videos and trace zips go through the [artifact upload](https://docs.qualflare.com/docs/cli/artifacts): screenshots by default, videos and traces with `--upload-artifacts video,trace`. Other attachments up to 1 MiB travel inside the report.
* Not read: `*-container.json` fixtures, `executor.json`, `categories.json` and `environment.properties`.
* Pass a directory to upload every `.json` report directly inside it; a directory with a `*-result.json` file directly inside it is read as [Allure results](https://docs.qualflare.com/docs/cli/formats#allure) instead, and its other `.json` files are not uploaded.

Every field, one by one: [Allure results](https://docs.qualflare.com/docs/cli/formats#allure).

## Troubleshoot

* `failed to detect framework` when you pass the directory: your qf is older than 0.4.0. [Upgrade qf](https://docs.qualflare.com/docs/cli/installation#upgrading).
* `directory "allure-results/" contains no .json report files`: no `.json` file sits directly inside the directory. Check that the tests ran with the adapter on and wrote there.
* `file does not exist: allure-results/`: the path is wrong.
* The launch has no attachments: you passed `-result.json` files instead of the directory.
* Videos or traces are missing: add `--upload-artifacts video,trace` ([Upload videos and traces](https://docs.qualflare.com/docs/cli/artifacts#upload-videos-and-traces)).
* Other errors: [Troubleshoot qf and CI uploads](https://docs.qualflare.com/docs/cli/troubleshooting).

## Next steps

* [Allure results](https://docs.qualflare.com/docs/cli/formats#allure): every field qf reads
* [CI/CD integration](https://docs.qualflare.com/docs/cli/ci-cd): upload from your pipeline
* [Upload screenshots, videos and traces](https://docs.qualflare.com/docs/cli/artifacts)
* [Launches](https://docs.qualflare.com/docs/runs/launches)
* [Migrate from Allure TestOps](https://docs.qualflare.com/docs/migrate/allure-testops): import your test cases as well
