aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkubi <jean.gaoliang@huawei.com>2015-09-14 02:50:50 -0400
committerkubi <jean.gaoliang@huawei.com>2015-10-28 11:21:26 +0800
commit607148f8e4eb4ebb443dd5098b4fea5f880f9fbb (patch)
treef220a594c6688144d2ebcfea5b4f14f98190179c
parentf37d291f6397891cd0dc37c6140b114868921b61 (diff)
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 <jean.gaoliang@huawei.com>
-rw-r--r--.gitignore3
-rw-r--r--ci/cover.sh66
-rwxr-xr-xrun_tests.sh13
-rwxr-xr-xsetup.py4
4 files changed, 83 insertions, 3 deletions
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"]