> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qa.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Regression Testing

> Run a test plan from CI after a deploy, on a schedule, or by hand.

Regression testing starts with a [test plan](/core-concepts/test-plans): the tests you chose, against the environment on that plan. You decide which tests run. A [change review](/pr-testing/overview) is the other workflow. It picks and creates tests for one pull request, and it does not use the test plan as its source.

## 1. Create a test plan

Create the plan before you connect CI. CI only starts it.

<Card title="Create a test plan" icon="clipboard-list" href="/core-concepts/test-plans">
  Choose the tests and the environment.
</Card>

## 2. Choose how to run it

<CardGroup cols={3}>
  <Card title="Manual" icon="play" href="/best-practices/running-tests#trigger-a-run-from-the-ui">
    Open the test plan and select Run Tests, or use `qatech run`.
  </Card>

  <Card title="Scheduled" icon="clock" href="/best-practices/running-tests#trigger-a-run-on-a-schedule">
    Open the test plan, select Manage Schedules, and add a cron expression.
  </Card>

  <Card title="CI or API" icon="code" href="#pick-your-ci">
    Start the plan from a pipeline or from `POST /v1/run`.
  </Card>
</CardGroup>

From the app, open the test plan and select **Run Tests**. [Manual and scheduled runs](/best-practices/running-tests#trigger-a-run-from-the-ui) covers a single test and its dependencies. From a terminal, run [`qatech run`](/cli/commands/run). From another system, call the [Start Run API](/api-reference/runs/start-test-run).

## Pick your CI

Each guide is only the regression setup. The same CI names under [PR Testing](/pr-testing/overview) review a pull request instead.

<CardGroup cols={3}>
  <Card title="GitHub" icon="github" href="/regression-testing/github">
    Test Run Action, with blocking.
  </Card>

  <Card title="GitLab" icon="gitlab" href="/regression-testing/gitlab">
    GitLab CI calls the Start Run API.
  </Card>

  <Card title="Bitrise" icon="mobile" href="/regression-testing/bitrise">
    Mobile build upload, or a web plan.
  </Card>

  <Card title="Envoyer" icon="php" href="/regression-testing/envoyer">
    A deploy hook starts the plan.
  </Card>

  <Card title="API" icon="code" href="/regression-testing/api">
    Bitbucket, Jenkins, CircleCI, or any HTTP client.
  </Card>
</CardGroup>

## How the suite grows

After a GitHub pull request merges, the [post-merge agent](/configuration/github-app#post-merge-agent) can promote tests that the review created. Promotion activates the test and labels it `regression` and `auto-added`. The agent only changes tests when its prompt asks it to.

New GitHub integrations default the agent on. Existing integrations leave it off until you enable **Run post-merge agent** under **Settings → Integrations → GitHub App**.

## While the suite runs

Parallelism, dependency order, and reused browser state:

* [Test dependencies](/core-concepts/dependencies)
* [Parallel tests](/core-concepts/parallel-test-execution)
* [Dependency output states](/core-concepts/output-state-optimization)
* [Session state lifetime](/core-concepts/session-state-lifetime)
* [Agent cache](/core-concepts/agent-cache)

After a run, start with [How to review test results](/best-practices/test-results), [Issues](/core-concepts/issues), and [Notifications](/core-concepts/notifications).
