| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- import os
- import sys
- def _show_skimage_info():
- import skimage
- print(f"skimage version {skimage.__version__}")
- class PytestTester:
- """
- Pytest test runner.
- This class is made available in ``skimage._shared.testing``, and a test
- function is typically added to a package's __init__.py like so::
- from skimage._shared.testing import PytestTester
- test = PytestTester(__name__)
- del PytestTester
- Calling this test function finds and runs all tests associated with the
- module and all its sub-modules.
- Attributes
- ----------
- module_name : str
- Full path to the package to test.
- Parameters
- ----------
- module_name : module name
- The name of the module to test.
- """
- def __init__(self, module_name):
- self.module_name = module_name
- def __call__(
- self,
- label='fast',
- verbose=1,
- extra_argv=None,
- doctests=False,
- coverage=False,
- durations=-1,
- tests=None,
- ):
- """
- Run tests for module using pytest.
- Parameters
- ----------
- label : {'fast', 'full'}, optional
- Identifies the tests to run. When set to 'fast', tests decorated
- with `pytest.mark.slow` are skipped, when 'full', the slow marker
- is ignored.
- verbose : int, optional
- Verbosity value for test outputs, in the range 1-3. Default is 1.
- extra_argv : list, optional
- List with any extra arguments to pass to pytests.
- doctests : bool, optional
- .. note:: Not supported
- coverage : bool, optional
- If True, report coverage of scikit-image code. Default is False.
- Requires installation of (pip) pytest-cov.
- durations : int, optional
- If < 0, do nothing, If 0, report time of all tests, if > 0,
- report the time of the slowest `timer` tests. Default is -1.
- tests : test or list of tests
- Tests to be executed with pytest '--pyargs'
- Returns
- -------
- result : bool
- Return True on success, false otherwise.
- """
- import pytest
- module = sys.modules[self.module_name]
- module_path = os.path.abspath(module.__path__[0])
- # setup the pytest arguments
- pytest_args = ["-l"]
- # offset verbosity. The "-q" cancels a "-v".
- pytest_args += ["-q"]
- # Filter out annoying import messages. Want these in both develop and
- # release mode.
- pytest_args += [
- "-W ignore:Not importing directory",
- "-W ignore:numpy.dtype size changed",
- "-W ignore:numpy.ufunc size changed",
- ]
- if doctests:
- raise ValueError("Doctests not supported")
- if extra_argv:
- pytest_args += list(extra_argv)
- if verbose > 1:
- pytest_args += ["-" + "v" * (verbose - 1)]
- if coverage:
- pytest_args += ["--cov=" + module_path]
- if label == "fast":
- pytest_args += ["-m", "not slow"]
- elif label != "full":
- pytest_args += ["-m", label]
- if durations >= 0:
- pytest_args += [f"--durations={durations}"]
- if tests is None:
- tests = [self.module_name]
- pytest_args += ["--pyargs"] + list(tests)
- # run tests.
- _show_skimage_info()
- try:
- code = pytest.main(pytest_args)
- except SystemExit as exc:
- code = exc.code
- return code == 0
|