Use following step script in you .gitlab-ci.yml file.
stages:
- build
- test
- report
variables:
RTM_URL: https://your-rtm-instance.com
JOB_URL: $CI_PIPELINE_URL
PROJECT_KEY: EXAMPLE
TE_SUMMARY: Automated tests report build $CI_PIPELINE_ID
build_job:
stage: build
script:
- echo "Building the project..."
- ./gradlew build
test_job:
stage: test
script:
- echo "Running tests..."
- ./gradlew test
artifacts:
when: always
reports:
junit:
- build/test-results/test/*.xml
paths:
- build/test-results/test/*.xml
import_test_results:
stage: report
script: |
RESULTS_ARCHIVE=test_results.tar.gz
find ./build/test-results/test -type f -name "*.xml" -exec tar czvf $RESULTS_ARCHIVE {} +
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
See REST API for all available options to import endpoint.