This repository is a practical .NET + Jira integration example using @testream/dotnet-reporter. It shows how to upload test results from xUnit, NUnit, and MSTest into Jira via Testream from local runs and GitHub Actions.
If you are searching for ".NET Jira test reporting", "xUnit Jira reporter", "NUnit Jira integration", or "MSTest GitHub Actions Jira", this repo is the implementation template.
- Multi-framework coverage: Includes xUnit, NUnit, and MSTest in one solution.
- CI-ready: Workflow uploads each framework in separate steps.
- Framework-specific metadata: Uses
--test-typeper framework (xunit,nunit,mstest). - Failure visibility: Intentional failing tests demonstrate Jira triage behavior.
Testream is an automated test management and reporting platform for Jira teams. It ingests CI test runs, then provides failure diagnostics, trends, and release quality visibility inside Jira.
If this sample repository is not the framework you need, browse all native reporters in the Testream docs: https://docs.testream.app/.
Click to see how Testream turns raw CI test results into actionable Jira insights (failures, trends, and release visibility):
Install Testream Automated Test Management and Reporting for Jira in your Jira workspace to view uploaded runs.
src/
ShoppingCart/
Cart.cs - Cart behavior
Product.cs - Product model and service helpers
Discount.cs - Discount model and validation logic
tests/
ShoppingCart.XUnit.Tests/
CartTests.cs - xUnit tests (passing + 1 intentional failure)
ProductTests.cs - xUnit tests (passing + 1 intentional failure)
DiscountTests.cs - xUnit tests (passing + 1 intentional failure)
ShoppingCart.NUnit.Tests/
CartTests.cs
ProductTests.cs
DiscountTests.cs
ShoppingCart.MSTest.Tests/
CartTests.cs
ProductTests.cs
DiscountTests.cs
ShoppingCart.sln
.github/workflows/dotnet.yml
.env.example
The intentional failures help validate how each framework’s failed tests appear in Testream/Jira.
- Sign in at testream.app.
- Create a project.
- Copy your API key.
dotnet restoreRequires .NET 8 SDK+.
For local uploads:
export TESTREAM_API_KEY=<your key>For CI uploads, add it as a GitHub Actions secret.
dotnet test ./ShoppingCart.slnnpx @testream/dotnet-reporter \
-k "$TESTREAM_API_KEY" \
--project tests/ShoppingCart.XUnit.Tests/ShoppingCart.XUnit.Tests.csproj \
--test-environment local \
--app-name dotnet-jira-reporter-example \
--app-version 1.0.0 \
--test-type xunit \
--fail-on-errorThis repo uses the CLI uploader instead of an in-process test framework reporter.
Key behavior:
- Works per project (
--project) so each framework can be uploaded independently. - Uses explicit app/run metadata (
--app-name,--app-version,--test-environment,--test-type). --fail-on-erroris enabled in CI.- CI metadata (
--branch,--commit-sha,--repository-url,--build-number,--build-url) is auto-detected.
Reporter docs: https://docs.testream.app/reporters/dotnet
The workflow at .github/workflows/dotnet.yml runs on push, pull request, and manual dispatch.
Add this repository secret:
Settings -> Secrets and variables -> Actions -> New repository secret
| Name | Value |
|---|---|
TESTREAM_API_KEY |
Your Testream API key |
Each framework is uploaded in its own step:
- xUnit upload step
- NUnit upload step
- MSTest upload step
After connecting Testream to Jira, you get:
- Dashboard summaries across framework runs
- Failure diagnostics with stack traces and assertion details
- Trend analytics across commits/releases
- Jira issue creation directly from failed tests
- Verify Node.js and .NET SDK are installed.
- Verify
TESTREAM_API_KEYis set in your shell.
- Confirm
TESTREAM_API_KEYexists in repository secrets. - Confirm workflow has access to secrets in the run context.
- Verify the Testream project is connected to the intended Jira workspace.
Yes. You can keep only xUnit, NUnit, or MSTest and remove the other steps.
To demonstrate real failure triage across the three .NET test frameworks.
It is an example repository with production-style CI and upload wiring intended for adaptation.
| Approach | Benefit | Tradeoff |
|---|---|---|
| Store TRX/JUnit files as artifacts | Basic traceability | Limited Jira-native analytics |
| Build custom uploader | Flexible | Higher maintenance complexity |
| Testream .NET reporter (this repo) | Native Jira-focused reporting across frameworks | Requires Testream setup |
- Testream app: https://testream.app
- Testream Automated Test Management and Reporting for Jira: https://marketplace.atlassian.com/apps/3048460704/testream-automated-test-management-and-reporting-for-jira
- .NET reporter docs: https://docs.testream.app/reporters/dotnet
- .NET docs: https://dotnet.microsoft.com
