Skip to content
Snippets Groups Projects
run_pytest.sh 1.34 KiB
#!/bin/bash

# run pytest for all modules
python3 -m pytest test/ | tee test_results.out

IS_FAILED=$?

# 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