> ## Documentation Index
> Fetch the complete documentation index at: https://trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# GoogleTest

> A guide for generating Trunk-compatible test reports for GoogleTest

You can automatically [detect and manage flaky tests](../../detection/) in your GoogleTest projects by integrating with Trunk. This document explains how to configure GoogleTest to output JUnit XML reports that can be uploaded to Trunk for analysis.

## Setup steps

Work through the steps below in order. Once you've finished the last one, you'll be ready to move on to [configure uploads in CI](../ci-providers/).

<Steps>
  <Step title={<a href="#generating-reports">Generate a compatible test report</a>} />

  <Step title={<a href="#report-file-path">Configure the report file path or glob</a>} />

  <Step title={<a href="#disable-retries">Disable retries for better detection accuracy</a>} />

  <Step title={<a href="#try-it-locally">Test uploads locally</a>} />
</Steps>

## Generating Reports

Before you can integrate with Trunk, you need to generate a Trunk-compatible report. For GoogleTest, the built in XML reporter will work. You can use the [`--gtest_output=xml`](https://google.github.io/googletest/advanced.html#generating-an-xml-report) argument when you run your built test project:

```shell theme={null}
./build/run_test --gtest_output=xml
```

### Report File Path

By default, the JUnit report will be written to a `test_detail.xml` file.

You can specify a custom directory and filename with:

```bash theme={null}
--gtest_output=xml:<path/to/file.xml>
```

For example, the following argument writes a JUnit report to `./junit.xml`:

```bash theme={null}
--gtest_output=xml:junit.xml
```

### Disable Retries

You need to disable automatic retries if you previously enabled them. Retries compromise the accurate detection of flaky tests.

Omit the[ ](https://docs.pytest.org/en/stable/how-to/cache.html)[`--gtest_repeat`](https://google.github.io/googletest/advanced.html#repeating-the-tests) argument if you've previously configured your CI with these options to disable retries.

## Try It Locally

### The Validate Command

<CodeGroup>
  ```bash Linux (x64) theme={null}
  SKU="trunk-analytics-cli-x86_64-unknown-linux.tar.gz"
  curl -fL --retry 3 \
    "https://github.com/trunk-io/analytics-cli/releases/latest/download/${SKU}" \
    | tar -xz

  chmod +x trunk-analytics-cli
  ./trunk-analytics-cli validate --junit-paths "./junit.xml"
  ```

  ```bash Linux (arm64) theme={null}
  SKU="trunk-analytics-cli-aarch64-unknown-linux.tar.gz"
  curl -fL --retry 3 \
    "https://github.com/trunk-io/analytics-cli/releases/latest/download/${SKU}" \
    | tar -xz

  chmod +x trunk-analytics-cli
  ./trunk-analytics-cli validate --junit-paths "./junit.xml"
  ```

  ```bash macOS (arm64) theme={null}
  SKU="trunk-analytics-cli-aarch64-apple-darwin.tar.gz"
  curl -fL --retry 3 \
    "https://github.com/trunk-io/analytics-cli/releases/latest/download/${SKU}" \
    | tar -xz

  chmod +x trunk-analytics-cli
  ./trunk-analytics-cli validate --junit-paths "./junit.xml"
  ```

  ```bash macOS (x64) theme={null}
  SKU="trunk-analytics-cli-x86_64-apple-darwin.tar.gz"
  curl -fL --retry 3 \
    "https://github.com/trunk-io/analytics-cli/releases/latest/download/${SKU}" \
    | tar -xz

  chmod +x trunk-analytics-cli
  ./trunk-analytics-cli validate --junit-paths "./junit.xml"
  ```
</CodeGroup>

### Test Upload

Before modifying your CI jobs to automatically upload test results to Trunk, try uploading a single test run manually.

You make an upload to Trunk using the following command:

```sh theme={null}
./trunk-analytics-cli upload --junit-paths "./junit.xml" \
    --org-url-slug <TRUNK_ORG_SLUG> \
    --token <TRUNK_ORG_TOKEN>
```

## Next Steps

Configure your CI to upload test runs to Trunk. Find the guides for your CI framework below:

<Columns cols={3}>
  <Card title="Azure DevOps Pipelines" href="../ci-providers/azure-devops-pipelines" img="https://mintcdn.com/trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito/A6MwHbo6xOwf1RiL/assets/azure.png?fit=max&auto=format&n=A6MwHbo6xOwf1RiL&q=85&s=f2d56ab1ee6b9e8dffa12c14b80b6bcc" width="1600" height="1000" data-path="assets/azure.png" />

  <Card title="BitBucket Pipelines" href="../ci-providers/bitbucket-pipelines" img="https://mintcdn.com/trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito/BmW0tIYwFT1FXVrd/assets/bitbucket.png?fit=max&auto=format&n=BmW0tIYwFT1FXVrd&q=85&s=2dcb5c6a20aec4d2b64ece295ec60c9d" width="1600" height="1000" data-path="assets/bitbucket.png" />

  <Card title="BuildKite" href="../ci-providers/buildkite" img="https://mintcdn.com/trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito/BmW0tIYwFT1FXVrd/assets/buildkite.png?fit=max&auto=format&n=BmW0tIYwFT1FXVrd&q=85&s=a8490b7679109ca712e12250c5f8d978" width="1600" height="1000" data-path="assets/buildkite.png" />

  <Card title="CircleCI" href="../ci-providers/circleci" img="https://mintcdn.com/trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito/BmW0tIYwFT1FXVrd/assets/circle-ci.png?fit=max&auto=format&n=BmW0tIYwFT1FXVrd&q=85&s=b4d0c12390bc4cfe087921ecd4d721db" width="1600" height="1000" data-path="assets/circle-ci.png" />

  <Card title="Drone CI" href="../ci-providers/droneci" img="https://mintcdn.com/trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito/5JWzCpsQ7DHJ6NIQ/assets/drone.png?fit=max&auto=format&n=5JWzCpsQ7DHJ6NIQ&q=85&s=ef4dd1d3a5e2f1066da034670802c46b" width="1600" height="1000" data-path="assets/drone.png" />

  <Card title="GitHub Actions" href="../ci-providers/github-actions" img="https://mintcdn.com/trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito/5JWzCpsQ7DHJ6NIQ/assets/github.png?fit=max&auto=format&n=5JWzCpsQ7DHJ6NIQ&q=85&s=6e93453082ff9c569cd86107f44815ee" width="1600" height="1000" data-path="assets/github.png" />

  <Card title="GitLab" href="../ci-providers/gitlab" img="https://mintcdn.com/trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito/5JWzCpsQ7DHJ6NIQ/assets/gitlab.png?fit=max&auto=format&n=5JWzCpsQ7DHJ6NIQ&q=85&s=dda9be34bfbce787ab00c1efd4810786" width="1600" height="1000" data-path="assets/gitlab.png" />

  <Card title="Jenkins" href="../ci-providers/jenkins" img="https://mintcdn.com/trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito/5JWzCpsQ7DHJ6NIQ/assets/jenkins.png?fit=max&auto=format&n=5JWzCpsQ7DHJ6NIQ&q=85&s=b98c6f28124567cbe84168f272f04c41" width="1600" height="1000" data-path="assets/jenkins.png" />

  <Card title="Semaphore" href="../ci-providers/semaphoreci" img="https://mintcdn.com/trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito/w00CiuFQxRCKGjSw/assets/semaphore.png?fit=max&auto=format&n=w00CiuFQxRCKGjSw&q=85&s=68e05db975e71bd795fa0024c84c22e2" width="1600" height="1000" data-path="assets/semaphore.png" />

  <Card title="TeamCity" img="https://mintcdn.com/trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito/w00CiuFQxRCKGjSw/assets/teamcity.png?fit=max&auto=format&n=w00CiuFQxRCKGjSw&q=85&s=c8c32d88891db0a324a0bdc44b14cde4" width="1600" height="1000" data-path="assets/teamcity.png" />

  <Card title="Travis CI" href="../ci-providers/travisci" img="https://mintcdn.com/trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito/w00CiuFQxRCKGjSw/assets/travis.png?fit=max&auto=format&n=w00CiuFQxRCKGjSw&q=85&s=616cf8d06d88135011b43d73d2431ca1" width="1600" height="1000" data-path="assets/travis.png" />

  <Card title="Other CI Providers" href="../ci-providers/otherci" img="https://mintcdn.com/trunk-4cab4936-sam-gutentag-changelog-flaky-tests-no-monito/YVns3J_sVIOh6UD4/assets/other.png?fit=max&auto=format&n=YVns3J_sVIOh6UD4&q=85&s=7e40230e8861a5080084646104b3182f" width="1600" height="1000" data-path="assets/other.png" />
</Columns>
