#!/bin/bash # run pytest for all run_modules python3 -m pytest --html=report.html --self-contained-html test/ | tee test_results.out IS_FAILED=$? # move html test report mkdir test_results/ BRANCH_NAME=$( echo -e "${CI_COMMIT_REF_NAME////_}") mkdir test_results/${BRANCH_NAME} mkdir test_results/recent cp report.html test_results/${BRANCH_NAME}/. cp report.html test_results/recent/. if [[ "${CI_COMMIT_REF_NAME}" = "master" ]]; then cp -r report.html test_results/. fi # exit 0 if no tests implemented RUN_NO_TESTS="$(grep -c 'no tests ran' test_results.out)" if [[ ${RUN_NO_TESTS} > 0 ]]; then echo "no test available" echo "incomplete" > status.txt echo "no tests avail" > incomplete.txt exit 0 fi # extract if tests passed or not TEST_FAILED="$(grep -oP '(\d+\s{1}failed)' test_results.out)" TEST_FAILED="$(echo ${TEST_FAILED} | (grep -oP '\d*'))" TEST_PASSED="$(grep -oP '\d+\s{1}passed' test_results.out)" TEST_PASSED="$(echo ${TEST_PASSED} | (grep -oP '\d*'))" if [[ -z "$TEST_FAILED" ]]; then TEST_FAILED=0 fi let "TEST_PASSED=${TEST_PASSED}-${TEST_FAILED}" # calculate metrics let "SUM=${TEST_FAILED}+${TEST_PASSED}" let "TEST_PASSED_RATIO=${TEST_PASSED}*100/${SUM}" # report if [[ ${IS_FAILED} == 0 ]]; then if [[ ${TEST_PASSED_RATIO} -lt 100 ]]; then echo "only ${TEST_PASSED_RATIO}% passed" echo "incomplete" > status.txt echo "${TEST_PASSED_RATIO}%25 passed" > incomplete.txt if [[ ${TEST_PASSED_RATIO} -lt ${FAILURE_THRESHOLD} ]]; then echo -e "\033[1;31monly ${TEST_PASSED_RATIO}% passed!!\033[0m" exit 1 fi else echo "passed" echo "success" > status.txt fi exit 0 else echo "not passed" exit 1 fi