From 607148f8e4eb4ebb443dd5098b4fea5f880f9fbb Mon Sep 17 00:00:00 2001 From: kubi Date: Mon, 14 Sep 2015 02:50:50 -0400 Subject: [PATCH] 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 --- .gitignore | 3 ++- ci/cover.sh | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ run_tests.sh | 13 +++++++++++- setup.py | 4 +++- 4 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 ci/cover.sh diff --git a/.gitignore b/.gitignore index dcaa10f42..5614ae866 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,5 @@ setuptools*zip dist/ pep8.log test.log - +.testrepository/ +cover/ 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 +} diff --git a/run_tests.sh b/run_tests.sh index b4ddc94ce..d1567af9c 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -53,6 +53,11 @@ run_tests() { fi } +run_coverage() { + source ci/cover.sh + run_coverage_test +} + run_functional_test() { mkdir -p .testrepository @@ -62,8 +67,14 @@ run_functional_test() { EXIT_CODE=$? subunit-stats < .testrepository/subunit.log - exit $EXIT_CODE + if [ $EXIT_CODE -ne 0 ]; then + exit 1 + else + echo "OK" + fi } + run_flake8 run_tests +run_coverage run_functional_test diff --git a/setup.py b/setup.py index a6848ec63..b8a6fe987 100755 --- a/setup.py +++ b/setup.py @@ -16,6 +16,7 @@ setup( }, url="https://www.opnfv.org", install_requires=["backport_ipaddress", # remove with python3 + "coverage>=3.6", "flake8", "Jinja2>=2.6", "PyYAML>=3.10", @@ -28,7 +29,8 @@ setup( "mock>=1.0.1", # remove with python3 "paramiko", "six", - "testrepository>=0.0.18" + "testrepository>=0.0.18", + "testtools>=1.4.0" ], extras_require={ 'plot': ["matplotlib>=1.4.2"] -- 2.16.6