Commit 0bb519c2 by Christine Lytwynec

Merge pull request #8727 from edx/clytwynec/TE-878

use 1 coveragerc file to generate 1 coverage report per build
parents 64a142d0 e9e4e3cf
# .coveragerc for edx-platform
[run]
data_file = reports/.coverage
source =
cms
common/djangoapps
common/lib/calc
common/lib/capa
common/lib/xmodule
lms
openedx/core/djangoapps
pavelib
omit =
cms/envs/*
cms/manage.py
cms/djangoapps/*/migrations/*
cms/djangoapps/*/features/*
lms/envs/*
lms/djangoapps/*/migrations/*
lms/djangoapps/*/features/*
common/djangoapps/terrain/*
common/djangoapps/*/migrations/*
openedx/core/djangoapps/*/migrations/*
[report]
ignore_errors = True
exclude_lines =
pragma: no cover
raise NotImplementedError
[html]
title = edx-platform Python Test Coverage Report
directory = reports/cover
[xml]
output = reports/coverage.xml
[paths]
jenkins_source =
/home/jenkins/workspace/edx-platform-unit-coverage
/home/jenkins/workspace/edx-platform-test-subset
devstack_source =
/edx/app/edxapp/edx-platform
# .coveragerc for cms
[run]
data_file = reports/cms/.coverage
source = cms,common/djangoapps,openedx/core/djangoapps
omit =
cms/envs/*
cms/manage.py
common/djangoapps/terrain/*
common/djangoapps/*/migrations/*
openedx/core/djangoapps/*/migrations/*
cms/djangoapps/*/migrations/*
cms/djangoapps/*/features/*
[report]
ignore_errors = True
[html]
title = CMS Python Test Coverage Report
directory = reports/cms/cover
[xml]
output = reports/cms/coverage.xml
# .coveragerc for common/lib/calc
[run]
data_file = reports/common/lib/calc/.coverage
source = common/lib/calc
branch = true
[report]
ignore_errors = True
[html]
title = Calc Python Test Coverage Report
directory = reports/common/lib/calc/cover
[xml]
output = reports/common/lib/calc/coverage.xml
# .coveragerc for common/lib/capa
[run]
data_file = reports/common/lib/capa/.coverage
source = common/lib/capa
[report]
ignore_errors = True
[html]
title = Capa Python Test Coverage Report
directory = reports/common/lib/capa/cover
[xml]
output = reports/common/lib/capa/coverage.xml
# .coveragerc for common/lib/xmodule
[run]
data_file = reports/common/lib/xmodule/.coverage
source = common/lib/xmodule
[report]
ignore_errors = True
exclude_lines =
pragma: no cover
raise NotImplementedError
[html]
title = XModule Python Test Coverage Report
directory = reports/common/lib/xmodule/cover
[xml]
output = reports/common/lib/xmodule/coverage.xml
# .coveragerc for lms
[run]
data_file = reports/lms/.coverage
source = lms,common/djangoapps,openedx/core/djangoapps
omit =
lms/envs/*
common/djangoapps/terrain/*
common/djangoapps/*/migrations/*
openedx/core/djangoapps/*/migrations/*
lms/djangoapps/*/migrations/*
lms/djangoapps/*/features/*
[report]
ignore_errors = True
[html]
title = LMS Python Test Coverage Report
directory = reports/lms/cover
[xml]
output = reports/lms/coverage.xml
...@@ -196,44 +196,33 @@ def coverage(options): ...@@ -196,44 +196,33 @@ def coverage(options):
""" """
compare_branch = getattr(options, 'compare_branch', 'origin/master') compare_branch = getattr(options, 'compare_branch', 'origin/master')
for directory in Env.LIB_TEST_DIRS + ['cms', 'lms']: report_dir = Env.REPORT_DIR
report_dir = Env.REPORT_DIR / directory rcfile = Env.PYTHON_COVERAGERC
if (report_dir / '.coverage').isfile(): if not (report_dir / '.coverage').isfile():
# Generate the coverage.py HTML report # This may be that the coverage files were generated using -p,
sh("coverage html --rcfile={dir}/.coveragerc".format(dir=directory)) # try to combine them to the one file that we need.
sh("coverage combine --rcfile={}".format(rcfile))
# Generate the coverage.py XML report
sh("coverage xml -o {report_dir}/coverage.xml --rcfile={dir}/.coveragerc".format( if not os.path.getsize(report_dir / '.coverage') > 50:
report_dir=report_dir, # Check if the .coverage data file is larger than the base file,
dir=directory # because coverage combine will always at least make the "empty" data
)) # file even when there isn't any data to be combined.
err_msg = colorize(
'red',
"No coverage info found. Run `paver test` before running "
"`paver coverage`.\n"
)
sys.stderr.write(err_msg)
return
# Generate the coverage.py XML report
sh("coverage xml --rcfile={}".format(rcfile))
# Generate the coverage.py HTML report
sh("coverage html --rcfile={}".format(rcfile))
call_task('diff_coverage', options=dict(options)) call_task('diff_coverage', options=dict(options))
@no_help
@task
@needs('pavelib.prereqs.install_prereqs')
def combine_jenkins_coverage():
"""
Combine coverage reports from jenkins build flow.
"""
coveragerc = Env.REPO_ROOT / 'test_root' / '.jenkins-coveragerc'
for directory in Env.LIB_TEST_DIRS + ['cms', 'lms']:
report_dir = Env.REPORT_DIR / directory
# Only try to combine the coverage if we've run the tests.
if report_dir.isdir():
sh(
"cd {} && coverage combine --rcfile={}".format(
report_dir,
coveragerc,
)
)
@task @task
@needs('pavelib.prereqs.install_prereqs') @needs('pavelib.prereqs.install_prereqs')
@cmdopts([ @cmdopts([
...@@ -255,7 +244,8 @@ def diff_coverage(options): ...@@ -255,7 +244,8 @@ def diff_coverage(options):
if not xml_reports: if not xml_reports:
err_msg = colorize( err_msg = colorize(
'red', 'red',
"No coverage info found. Run `paver test` before running `paver coverage`.\n" "No coverage info found. Run `paver test` before running "
"`paver coverage`.\n"
) )
sys.stderr.write(err_msg) sys.stderr.write(err_msg)
else: else:
......
...@@ -22,6 +22,9 @@ class Env(object): ...@@ -22,6 +22,9 @@ class Env(object):
REPORT_DIR = REPO_ROOT / 'reports' REPORT_DIR = REPO_ROOT / 'reports'
METRICS_DIR = REPORT_DIR / 'metrics' METRICS_DIR = REPORT_DIR / 'metrics'
# Python unittest dirs
PYTHON_COVERAGERC = REPO_ROOT / ".coveragerc"
# Bok_choy dirs # Bok_choy dirs
BOK_CHOY_DIR = REPO_ROOT / "common" / "test" / "acceptance" BOK_CHOY_DIR = REPO_ROOT / "common" / "test" / "acceptance"
BOK_CHOY_LOG_DIR = REPO_ROOT / "test_root" / "log" BOK_CHOY_LOG_DIR = REPO_ROOT / "test_root" / "log"
......
...@@ -63,10 +63,10 @@ class NoseTestSuite(TestSuite): ...@@ -63,10 +63,10 @@ class NoseTestSuite(TestSuite):
cmd0 = "`which {}`".format(cmd0) cmd0 = "`which {}`".format(cmd0)
cmd = ( cmd = (
"python -m coverage run {cov_args} --rcfile={root}/.coveragerc " "python -m coverage run {cov_args} --rcfile={rcfile} "
"{cmd0} {cmd_rest}".format( "{cmd0} {cmd_rest}".format(
cov_args=self.cov_args, cov_args=self.cov_args,
root=self.root, rcfile=Env.PYTHON_COVERAGERC,
cmd0=cmd0, cmd0=cmd0,
cmd_rest=cmd_rest, cmd_rest=cmd_rest,
) )
......
#!/usr/bin/env bash #!/usr/bin/env bash
source scripts/jenkins-common.sh source scripts/jenkins-common.sh
# Combine the data files that were generated using -p
paver combine_jenkins_coverage
# Get the diff coverage and html reports for unit tests # Get the diff coverage and html reports for unit tests
NO_PREREQ_INSTALL=true paver coverage paver coverage
# Get coverage reports for bok choy # Get coverage reports for bok choy
# paver bokchoy_coverage # paver bokchoy_coverage
......
[paths]
build_jenkins_source =
/home/jenkins/workspace/edx-platform-unit-coverage
/home/jenkins/workspace/edx-platform-test-subset
test_jenkins_source =
/home/jenkins/workspace/test-edx-platform-unit-coverage
/home/jenkins/workspace/*test-edx-platform-test-subset
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment