Bitbucket is one of the widely known CI/CD tools. In this document, we will show you how to integrate AgileTest with Bitbucket via the REST API.
π
Prerequisite:
Make sure your account has permission to create TestCase and TestExecution issues; otherwise, the import will fail.
As a Jira admin, you can update this permission in the Space setting β Permission β Create Issues.
For the Cloud version, Client id and Client secret are needed. Please refer to this instruction to get them: API integration
For Data Center version, you will need a Personal access token (PAT) instead. In Jira, select βοΈ (top right corner) β System -> Administeringpersonalaccess tokens, and create yourself a token. Please refer to this article from Jira for more details.
Learn more about how to integrate AgileTest into the Bitbucket CI/CD pipeline.
1. Setup your Bitbucket repository
When you integrate AgileTest with Bitbucket, you need to securely store certain authentication details, such as your Client ID and Client Secret. By doing it, you ensure that sensitive data is kept secure and is not exposed in your code or logs, reuse variables in different places, etc. These credentials are also required for AgileTest to authenticate and communicate with Bitbucket in the pipeline.
1.1 For Cloud version
We recommend that you set up 5 repository variables:
In case you are working with AgileTest Data Center version, you only need 3 variables as follows.
Variables
Description
Is secured
Example
DC_TOKEN
Your Personal access token
β
BASE_URL
Base URL to submit your report to
PROJECT_KEY
Your project key
RKE
1.3 Setup Bitbucket variables
To set up these variables, follow these steps:
Click on the Repositorysettings.
Select the Pipelines dropdown on the left-hand side bar.
Choose Repository variables.
Click the βAddβ button and enter details.
2. Upload your test result
After you have set up the Bitbucket repository, you can prepare the YAML file in Bitbucket to connect AgileTest with this tool and upload the test results.
You can have your report in different types of test frameworks. Here is a sample NUnit report to play around with.
image: mcr.microsoft.com/dotnet/sdk
options:
docker: true
definitions:
steps:
- step: &linting
name: Linting
caches:
- dotnetcore
script:
- echo "linting"
pipelines:
pull-requests:
develop:
- step: *linting
master:
- step: *linting
# TODO: build docker image
branches:
nunit:
# - step: *linting
- step: &run-test
name: Test and upload report
script:
# Run test
- cd ./Nunit/PrimeService && dotnet restore
- cd .. && dotnet sln add PrimeService/PrimeService.csproj
- cd ./PrimeService.Tests && dotnet restore
- cd .. && dotnet sln add PrimeService.Tests/PrimeService.Tests.csproj
- dotnet test --logger:"nunit;LogFilePath=test-result.xml"
# Upload the report
- export token=$(curl "$BASE_AUTH_URL/api/apikeys/authenticate" -X POST -H 'Content-Type:application/json' --data '{"clientId":"'"$CLIENT_ID"'","clientSecret":"'"$CLIENT_SECRET"'"}' | tr -d '"')
- curl -X POST "$BASE_URL/ds/test-executions/nunit?projectKey=$PROJECT_KEY&testExecutionKey=$TEST_EXECUTION_KEY" -H "Content-Type:application/xml" -H "Authorization:JWT $token" --data-binary "@PrimeService.Tests/test-result.xml"
In this file, we use 2 endpoints in the API document
POSTapi/v1/apikeys/authenticate to get a temporary token using the acquired client_id and client_secret.
POSTds/test-executions/nunit to submit the test report to Agile Test so that the application can create or update Test execution and Test cases accordingly.
2.1.2 For Data Center version
AgileTest Data center - bitbucket-pipelines.yml
CODE
image: mcr.microsoft.com/dotnet/sdk
options:
docker: true
definitions:
steps:
- step: &linting
name: Linting
caches:
- dotnetcore
script:
- echo "linting"
pipelines:
pull-requests:
develop:
- step: *linting
master:
- step: *linting
# TODO: build docker image
branches:
nunit:
# - step: *linting
- step: &run-test
name: Test and upload report
script:
# Run test
- cd ./Nunit/PrimeService && dotnet restore
- cd .. && dotnet sln add PrimeService/PrimeService.csproj
- cd ./PrimeService.Tests && dotnet restore
- cd .. && dotnet sln add PrimeService.Tests/PrimeService.Tests.csproj
- dotnet test --logger:"nunit;LogFilePath=test-result.xml"
# Upload the report
- curl -X POST "$BASE_URL/ds/test-executions/nunit?projectKey=$PROJECT_KEY&testExecutionKey=$TEST_EXECUTION_KEY" -H "Content-Type:application/xml" -H "Authorization:Bearer $DC_TOKEN" --data-binary "@PrimeService.Tests/test-result.xml"
For the Data center version, we only use 1 endpoint POSTds/test-executions/nunit with DC_TOKEN variable instead of the token that is requested using the Client Id and Client Secret.
The file sets up a two-step process: run-test and upload-report. These steps run with different container images β run-test uses a .NET image, and upload-report uses a specialized image for the Agile Test CLI.
In run-teststep, we run the automation test scripts and the process yields the report. The report is then pushed to pipeline artifact in order to be used for the later step. Next, in upload-report step, the report is uploaded to AgileTest by using AgileTest CLI. Below is the command used for the task.
AgileTest supports you in tracking the status of your pipeline after it has been triggered. To enable this feature, just add the following directives to your workflow file.
For the Cloud version, we use the endpoint testexecutions/{test_execution_id}/pipeline/history
For the Data center version, please use rest/agiletest/1.0/test-executions/{test_execution_id}/pipeline/history
Your file should look like this now.
YAML file that includes pipeline status update call
CODE
name: Agile Test Demo
# This workflow represents a set of basic End-to-End tests
on:
workflow_dispatch:
env:
BASE_URL: ${{ vars.BASE_URL }}
DC_TOKEN: ${{secrets.DC_TOKEN}}
PROJECT_KEY: ${{ vars.PROJECT_KEY }}
jobs:
test:
name: run test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: "17"
distribution: "temurin"
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: Submit test result to Agile Test
run: |
docker run --rm \
-e AGILETEST_BASE_URL=$BASE_URL \
-e AGILETEST_DC_TOKEN=$DC_TOKEN \
-v ${{ github.workspace }}/target/surefire-reports:/reports \
ghcr.io/agiletestapp/agiletest-cli:latest \
--data-center \
test-execution import --framework-type junit --project-key $PROJECT_KEY \
/reports/TEST-calculateTest.xml
- name: After-Run Script
if: always()
run: |
after-script:
- if [ "$BITBUCKET_EXIT_CODE" -eq 0 ]; then
RESULT="success";
else
RESULT="failed";
fi
- export token=$(curl "$BASE_AUTH_URL/api/apikeys/authenticate" -X POST -H 'Content-Type:application/json' --data '{"clientId":"'"$CLIENT_ID"'","clientSecret":"'"$CLIENT_SECRET"'"}' | tr -d '"')
- |
curl "$BASE_AUTH_URL/ds/test-executions/$TEST_EXECUTION_KEY/pipeline/history?projectKey=$PROJECT_KEY" -X POST -H "Content-Type: application/json" -H "Authorization: JWT $token" --data '{ "buildNumber": '"$BITBUCKET_BUILD_NUMBER"', "tool": "'"bitbucket"'", "repoSlug": "'"$BITBUCKET_REPO_SLUG"'", "workspace": "'"$BITBUCKET_WORKSPACE"'", "result": "'"$RESULT"'" }'
Once you include this part in your YAML file, on pipelineβs completion, a history log with pipeline status will be added on the right panel of the execution issue screen as below.
Should you need any assistance or further AgileTest inquiries, contact our 24/7 Support Desk!
JavaScript errors detected
Please note, these errors can depend on your browser setup.
If this problem persists, please contact our support.