From 607148f8e4eb4ebb443dd5098b4fea5f880f9fbb Mon Sep 17 00:00:00 2001 From: kubi Date: Mon, 14 Sep 2015 02:50:50 -0400 Subject: part 2 :add coverage report in Jenkins for Yardstick this part is focus on script on run coverage test,not only show missing lines but also show diff between your patch and master, actually,it produce a html for coverage,but now ,it just on your local machine extra missing lines is 10-lines,final target is 4-lines JIRA:YARDSTICK-108 Change-Id: I550dff51d6f89562447e12127646155325e38a4a Signed-off-by: kubi --- ci/cover.sh | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 ci/cover.sh (limited to 'ci') diff --git a/ci/cover.sh b/ci/cover.sh new file mode 100644 index 000000000..51b009de8 --- /dev/null +++ b/ci/cover.sh @@ -0,0 +1,66 @@ +############################################################################## +# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +# make coverage report +############################################################################## + +show_diff () { + head -1 $1 + diff -U 0 $1 $2 | sed 1,2d +} + + +run_coverage_test() { + + ALLOWED_EXTRA_MISSING=10 + + + # Stash uncommitted changes, checkout master and save coverage report + uncommited=$(git status --porcelain | grep -v "^??") + [[ -n $uncommited ]] && git stash > /dev/null + git checkout HEAD^ + + baseline_report=$(mktemp -t yardstick_coverageXXXXXXX) + find . -type f -name "*.pyc" -delete && python setup.py testr --coverage --testr-args="$*" + coverage report > $baseline_report + baseline_missing=$(awk 'END { print $3 }' $baseline_report) + + # Checkout back and unstash uncommitted changes (if any) + git checkout - + [[ -n $uncommited ]] && git stash pop > /dev/null + + # Generate and save coverage report + current_report=$(mktemp -t yardstick_coverageXXXXXXX) + find . -type f -name "*.pyc" -delete && python setup.py testr --coverage --testr-args="$*" + coverage report > $current_report + current_missing=$(awk 'END { print $3 }' $current_report) + + # Show coverage details + allowed_missing=$((baseline_missing+ALLOWED_EXTRA_MISSING)) + + echo "Allowed to introduce missing lines : ${ALLOWED_EXTRA_MISSING}" + echo "Missing lines in master : ${baseline_missing}" + echo "Missing lines in proposed change : ${current_missing}" + + if [ $allowed_missing -gt $current_missing ]; + then + if [ $baseline_missing -lt $current_missing ]; + then + show_diff $baseline_report $current_report + echo "I believe you can cover all your code with 100% coverage!" + else + echo "Thank you! You are awesome! Keep writing unit tests! :)" + fi + else + show_diff $baseline_report $current_report + echo "Please write more unit tests, we should keep our test coverage :( " + rm $baseline_report $current_report + exit 1 + fi + + rm $baseline_report $current_report +} -- cgit 1.2.3-korg