Set up and run a script in your bitbucket-pipelines.yml file to import test results into the RTM system using its REST API.
image: maven:3.6.3-openjdk-17
pipelines:
default:
- step:
name: run tests
caches:
- maven
script:
- |
echo "execute tests"
mvn test
# use tar to create archive with test results
RESULTS_ARCHIVE=test_results.tar.gz
find ./target/surefire-reports -type f -name "*.xml" -exec tar czvf $RESULTS_ARCHIVE {} +
RTM_URL=https://your-rtm-instance.com
JOB_URL="https://bitbucket.org/${BITBUCKET_REPO_FULL_NAME}/pipelines/results/${BITBUCKET_BUILD_NUMBER}"
PROJECT_KEY=EXAMPLE
TE_SUMMARY="Automated tests report build: ${BITBUCKET_BUILD_NUMBER}"
printf "\n[RTM] Importing test results...\n"
IMPORT_RESULT=$(curl -s -S -X POST ${RTM_URL}/api/v2/automation/import-test-results \
-H "Authorization: Bearer ${RTM_API_TOKEN}" \
-F "projectKey=${PROJECT_KEY}" \
-F "name=${TE_SUMMARY}" \
-F "file=@${RESULTS_ARCHIVE}" \
-F 'reportType=JUNIT' \
-F "jobUrl=${JOB_URL}")
# checks in loop import status
if [[ $IMPORT_RESULT =~ ^.{8}-.{4}-.{4}-.{4}-.{12}$ ]]; then
printf "[RTM] Import created with taskId: $IMPORT_RESULT, checking import status"
TASK_STATUS='IMPORTING'
TRIES=0
while [[ "$TASK_STATUS" == *"IMPORTING"* && $TRIES != 30 ]]; do
TASK_STATUS=$(curl -s -S ${RTM_URL}/api/v2/automation/import-status/$IMPORT_RESULT -H "Authorization: Bearer ${RTM_API_TOKEN}")
if [[ "$TASK_STATUS" == *"IMPORTING"* ]]; then
printf "\n[RTM] Importing, retrying in 10 second"
sleep 10s
fi
((TRIES = TRIES + 1))
done
if [ $TRIES -gt 30 ]; then
printf "\n[RTM] Import timeout with last status: ${TASK_STATUS}\n"
else
printf "\n[RTM] Import completed with status: ${TASK_STATUS}\n"
fi
else
printf "\n[RTM] Import failed with response: ${IMPORT_RESULT}\n"
fi
Defining variables:
Creating archive of test results:
Importing test results:
Monitoring Import Status: