Skip to content

Commit 05099db

Browse files
committed
Add coverage testing, and codecov reporting
1 parent ca42c30 commit 05099db

File tree

6 files changed

+51
-12
lines changed

6 files changed

+51
-12
lines changed

.github/workflows/ci-tests.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,12 @@ jobs:
3636
matrix:
3737
os: ["ubuntu-latest"]
3838
python-version: ["3.10"]
39-
session: ["tests", "doctest", "gallery", "linkcheck"]
39+
session: ["doctest", "gallery", "linkcheck"]
4040
include:
41+
- os: "ubuntu-latest"
42+
python-version: "3.10"
43+
session: "tests"
44+
coverage: True
4145
- os: "ubuntu-latest"
4246
python-version: "3.9"
4347
session: "tests"
@@ -132,5 +136,10 @@ jobs:
132136
- name: "iris ${{ matrix.session }}"
133137
env:
134138
PY_VER: ${{ matrix.python-version }}
139+
COVERAGE: ${{ matrix.coverage }}
135140
run: |
136141
nox --session ${{ matrix.session }} -- --verbose
142+
143+
- name: Upload coverage report
144+
uses: codecov/codecov-action@v3
145+
if: ${{ matrix.coverage }}

lib/iris/tests/runner/_runner.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class TestRunner:
4747
"The number of processors used for running " "the tests.",
4848
),
4949
("create-missing", "m", "Create missing test result files."),
50+
("coverage", "l", "Enable coverage testing"),
5051
]
5152
boolean_options = [
5253
"no-data",
@@ -56,6 +57,7 @@ class TestRunner:
5657
"default-tests",
5758
"coding-tests",
5859
"create-missing",
60+
"coverage",
5961
]
6062

6163
def initialize_options(self):
@@ -67,6 +69,7 @@ def initialize_options(self):
6769
self.coding_tests = False
6870
self.num_processors = None
6971
self.create_missing = False
72+
self.coverage = False
7073

7174
def finalize_options(self):
7275
# These environment variables will be propagated to all the
@@ -136,6 +139,9 @@ def run(self):
136139
if self.stop:
137140
args.append("-x")
138141

142+
if self.coverage:
143+
args.extend(["--cov=lib/iris", "--cov-report=xml"])
144+
139145
result = True
140146
for test in tests:
141147
args[0] = test

noxfile.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
#: Cirrus-CI environment variable hook.
3030
PY_VER = os.environ.get("PY_VER", _PY_VERSIONS_ALL)
31+
COVERAGE = os.environ.get("COVERAGE", False)
3132

3233
#: Default cartopy cache directory.
3334
CARTOPY_CACHE_DIR = os.environ.get("HOME") / Path(".local/share/cartopy")
@@ -174,7 +175,8 @@ def prepare_venv(session: nox.sessions.Session) -> None:
174175
@nox.session(python=PY_VER, venv_backend="conda")
175176
def tests(session: nox.sessions.Session):
176177
"""
177-
Perform iris system, integration and unit tests.
178+
Perform iris system, integration and unit tests with coverage testing
179+
enabled.
178180
179181
Parameters
180182
----------
@@ -185,13 +187,15 @@ def tests(session: nox.sessions.Session):
185187
prepare_venv(session)
186188
session.install("--no-deps", "--editable", ".")
187189
session.env.update(ENV)
188-
session.run(
190+
run_args = [
189191
"python",
190192
"-m",
191193
"iris.tests.runner",
192194
"--default-tests",
193-
"--system-tests",
194-
)
195+
]
196+
if COVERAGE:
197+
run_args.append("--coverage")
198+
session.run(*run_args)
195199

196200

197201
@nox.session(python=_PY_VERSION_DOCSBUILD, venv_backend="conda")

pyproject.toml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,20 @@ verbose = "False"
4646
[tool.pytest.ini_options]
4747
addopts = "-ra"
4848
testpaths = "lib/iris"
49+
50+
[tool.coverage.run]
51+
branch = true
52+
source = [
53+
"lib/iris",
54+
]
55+
omit = [
56+
"lib/iris/tests/*",
57+
"lib/iris/etc/*",
58+
]
59+
60+
[tool.coverage.report]
61+
exclude_lines = [
62+
"pragma: no cover",
63+
"def __repr__",
64+
"if __name__ == .__main__.:"
65+
]

requirements/ci/nox.lock/py310-linux-64.lock

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Generated by conda-lock.
22
# platform: linux-64
3-
# input_hash: 234b47d943728b5abe70fba0fd74c6adc10e4f1e2a14b919344f8a693b5b3e6f
3+
# input_hash: f8af5f4aafcb766f463a1a897d3dab9e04f05f1494bced5931d78175ca0c66df
44
@EXPLICIT
55
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81
66
https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2022.12.7-ha878542_0.conda#ff9f73d45c4a07d6f424495288a26080
@@ -150,7 +150,7 @@ https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py310hbf28c38_1
150150
https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.14-hfd0df8a_1.conda#c2566c2ea5f153ddd6bf4acaf7547d97
151151
https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h3e3d535_1.conda#a3a0f7a6f0885f5e1e0ec691566afb77
152152
https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f
153-
https://conda.anaconda.org/conda-forge/linux-64/libcurl-7.88.0-hdc1c0ab_0.conda#c44acb3847ff118c068b662aff858afd
153+
https://conda.anaconda.org/conda-forge/linux-64/libcurl-7.88.1-hdc1c0ab_0.conda#81eaeb3b35163c8e90e57532bc93754d
154154
https://conda.anaconda.org/conda-forge/linux-64/libpq-15.2-hb675445_0.conda#4654b17eccaba55b8581d6b9c77f53cc
155155
https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-252-h2a991cd_0.tar.bz2#3c5ae9f61f663b3d5e1bf7f7da0c85f5
156156
https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.2.4-h1daa5a0_1.conda#77003f63d1763c1e6569a02c1742c9f4
@@ -191,14 +191,15 @@ https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2#
191191
https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h166bdaf_0.tar.bz2#c9b568bd804cb2903c6be6f5f68182e4
192192
https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h7f98852_1.tar.bz2#536cc5db4d0a3ba0630541aec064b5e4
193193
https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.10-h7f98852_1003.tar.bz2#f59c1242cc1dd93e72c2ee2b360979eb
194-
https://conda.anaconda.org/conda-forge/noarch/zipp-3.13.0-pyhd8ed1ab_0.conda#41b09d997939e83b231c4557a90c3b13
194+
https://conda.anaconda.org/conda-forge/noarch/zipp-3.14.0-pyhd8ed1ab_0.conda#01ea04980fa39d7b6dbdd6c67016d177
195195
https://conda.anaconda.org/conda-forge/noarch/babel-2.11.0-pyhd8ed1ab_0.tar.bz2#2ea70fde8d581ba9425a761609eed6ba
196196
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.11.2-pyha770c72_0.conda#88b59f6989f0ed5ab3433af0b82555e1
197197
https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-ha61ee94_1014.tar.bz2#d1a88f3ed5b52e1024b80d4bcd26a7a0
198198
https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py310h255011f_3.conda#800596144bb613cd7ac58b80900ce835
199199
https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py310hde88566_1.tar.bz2#94ce7a76b0c912279f6958e0b6b21d2b
200200
https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.0.7-py310hdf3cbec_0.conda#7bf9d8c765b6b04882c719509652c6d6
201-
https://conda.anaconda.org/conda-forge/linux-64/curl-7.88.0-hdc1c0ab_0.conda#5d9ac94ee84305ada32c3d287d0ec602
201+
https://conda.anaconda.org/conda-forge/linux-64/coverage-7.1.0-py310h1fa729e_0.conda#da7c45dbe780f5e162011a3af44e5009
202+
https://conda.anaconda.org/conda-forge/linux-64/curl-7.88.1-hdc1c0ab_0.conda#1968e4fef727858ac04746560e820928
202203
https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.38.0-py310h5764c6d_1.tar.bz2#12ebe92a8a578bc903bd844744f4d040
203204
https://conda.anaconda.org/conda-forge/linux-64/glib-2.74.1-h6239696_1.tar.bz2#f3220a9e9d3abcbfca43419a219df7e4
204205
https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.12.2-mpi_mpich_h5d83325_1.conda#811c4d55cf17b42336ffa314239717b0
@@ -234,6 +235,7 @@ https://conda.anaconda.org/conda-forge/linux-64/pandas-1.5.3-py310h9b08913_0.con
234235
https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.0.0-pyhd8ed1ab_0.conda#c34694044915d7f291ef257029f2e2af
235236
https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.4.1-py310h15e2413_1.conda#5be35366687def87437d210fd673100c
236237
https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.11.0-py310heca2aa9_3.conda#3b1946b676534472ce65181dda0b9554
238+
https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.0.0-pyhd8ed1ab_0.tar.bz2#c9e3f8bfdb9bfc34aa1836a6ed4b25d7
237239
https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.2.0-pyhd8ed1ab_0.conda#70ab87b96126f35d1e68de2ad9fb6423
238240
https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1
239241
https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-napoleon-0.7-py_0.tar.bz2#0bc25ff6f2e34af63ded59692df5f749
@@ -242,8 +244,8 @@ https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.0-h4243ec0
242244
https://conda.anaconda.org/conda-forge/noarch/identify-2.5.18-pyhd8ed1ab_0.conda#e07a5691c27e65d8d3d9278c578c7771
243245
https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369
244246
https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.0-mpi_mpich_h1e13492_2.conda#d4ed7704f0fa589e4d7656780fa87557
245-
https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.0-nompi_py310h0a86a1f_103.conda#7f69695b684f2595d9ba1ce26d693b7d
246-
https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.12-hd33c08f_1.conda#667dc93c913f0156e1237032e3a22046
247+
https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.2-nompi_py310h55e1e36_100.tar.bz2#4dd7aa28fb7d9a6de061c9579a30e7dd
248+
https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.13-hd33c08f_0.conda#e3b13445b8ee9d6a3d53a714f89ccd76
247249
https://conda.anaconda.org/conda-forge/linux-64/parallelio-2.5.10-mpi_mpich_h862c5c2_100.conda#56e43c5226670aa0943fae9a2628a934
248250
https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.0.0-pyhd8ed1ab_0.conda#d41957700e83bbb925928764cb7f8878
249251
https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.19.0-pyhd8ed1ab_0.conda#afaa9bf6992f67a82d75fad47a93ec84
@@ -266,4 +268,4 @@ https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.0-pyhd8ed1ab
266268
https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.11.1-pyhd8ed1ab_0.tar.bz2#729254314a5d178eefca50acbc2687b8
267269
https://conda.anaconda.org/conda-forge/noarch/sphinx-panels-0.6.0-pyhd8ed1ab_0.tar.bz2#6eec6480601f5d15babf9c3b3987f34a
268270
https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.21.1-py310hcb7e713_0.conda#bd14eaad9bbf54b78e48ecb8b644fcf6
269-
https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a
271+
https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a

requirements/ci/py310.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ dependencies:
3939
- pre-commit
4040
- psutil
4141
- pytest
42+
- pytest-cov
4243
- pytest-xdist
4344
- requests
4445

0 commit comments

Comments
 (0)