4

Suppose we have installed huge library like SageMath. Let consider trivial test file:

from sage.all_cmdline import *   # import sage library


class TestClass:
        def test_method(self):
                assert True

It runs for about 1.5 sec with Nosetest

$ time nosetests test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
nosetests test.py  1.38s user 0.14s system 97% cpu 1.567 total

Whereas with pytest it runs for ~4.5 sec!

platform linux -- Python 3.8.2, pytest-5.4.1, py-1.8.1, pluggy-0.13.1
rootdir: /home/user/pytest, inifile: pytest.ini
plugins: profiling-1.7.0
collecting 1 item 

/usr/lib/python3.8/site-packages/sage/misc/sage_unittest.py:20:
PytestCollectionWarning: cannot collect test class 'TestSuite' because it has a __init__ constructor (from: test.py)

  class TestSuite(object):
collected 1 item

test.py .                                                                                                                                               [100%]

====================================================================== 1 passed in 3.26s ======================================================================
pytest test.py  3.86s user 0.46s system 101% cpu 4.253 total

It looks (according to the warning) like pytest collects some tests from the library itself or may be something else.

The question is: how to speedup pytest startup in the cases like this with huge library to load? And how to avoid loading tests from that huge library?

P.S. See detailed discussion on the subject: https://github.com/pytest-dev/pytest/issues/7111

petRUShka
  • 9,812
  • 12
  • 61
  • 95
  • Use [`testpaths`](https://docs.pytest.org/en/latest/reference.html#confval-testpaths) to explicitly name test directories; `pytest` will ignore any dir that is not in `testpaths`. Or use [`norecursedirs`](https://docs.pytest.org/en/latest/reference.html#confval-norecursedirs) to exclude directories `pytest` shouldn't visit when looking for tests. – hoefling Apr 23 '20 at 10:05
  • @hoefling, doesn't help. Pytest doesn't actually collect tests from library (I have only one particular test), but it loads it somehow. – petRUShka Apr 23 '20 at 11:32

0 Answers0