pytest-dev / pytest-django

A Django plugin for pytest.
https://pytest-django.readthedocs.io/
Other
1.37k stars 344 forks source link

4.8.0: pytest is failing #977

Open kloczek opened 2 years ago

kloczek commented 2 years ago

I'm trying to package your module as an rpm package. So I'm using the typical build, install and test cycle used on building packages from non-root account.

pytest is failing because it cannot find pytest_django_test which is in project root directory. Is it any special methdod to preload that modules during the test suite execution?

+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-pytest-django-4.5.1-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-pytest-django-4.5.1-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra tests
Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 703, in import_plugin
    __import__(importspec)
ModuleNotFoundError: No module named 'pytest_django_test'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/bin/pytest", line 33, in <module>
    sys.exit(load_entry_point('pytest==6.2.5', 'console_scripts', 'pytest')())
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 185, in console_main
    code = main()
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 143, in main
    config = _prepareconfig(args, plugins)
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 318, in _prepareconfig
    config = pluginmanager.hook.pytest_cmdline_parse(
  File "/usr/lib/python3.8/site-packages/pluggy/hooks.py", line 286, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
  File "/usr/lib/python3.8/site-packages/pluggy/manager.py", line 93, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "/usr/lib/python3.8/site-packages/pluggy/manager.py", line 84, in <lambda>
    self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
  File "/usr/lib/python3.8/site-packages/pluggy/callers.py", line 203, in _multicall
    gen.send(outcome)
  File "/usr/lib/python3.8/site-packages/_pytest/helpconfig.py", line 100, in pytest_cmdline_parse
    config: Config = outcome.get_result()
  File "/usr/lib/python3.8/site-packages/pluggy/callers.py", line 80, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/usr/lib/python3.8/site-packages/pluggy/callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 1003, in pytest_cmdline_parse
    self.parse(args)
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 1283, in parse
    self._preparse(args, addopts=addopts)
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 1168, in _preparse
    self.pluginmanager.consider_preparse(args, exclude_only=False)
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 635, in consider_preparse
    self.consider_pluginarg(parg)
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 660, in consider_pluginarg
    self.import_plugin(arg, consider_entry_points=True)
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 705, in import_plugin
    raise ImportError(
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 703, in import_plugin
    __import__(importspec)
ImportError: Error importing plugin "pytest_django_test": No module named 'pytest_django_test'
kloczek commented 2 years ago

I've been trying to run pytest with --pyargs pytest_django_test but it did not helped. How pytest-django shoud be tested using pytest?

kloczek commented 2 years ago

gentle ping 😃

kulikjak commented 2 years ago

I just had a similar problem when trying to test pytest-django on Solaris, and the problem was that pytest_django_test isn't being delivered, meaning that if you are running the test suite on installed packages or in proto area (which was our issue), it won't work. Adding the source directory to PYTHONPATH fixed the issue.

kloczek commented 6 months ago

Just tested 4.8.0 with django 5.03, python 3.9.18 and pytest 8.1.1 and now pytest fails other way

Here is pytest output: ```console + PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-pytest-django-4.8.0-2.fc36.x86_64/usr/lib64/python3.9/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-pytest-django-4.8.0-2.fc36.x86_64/usr/lib/python3.9/site-packages + /usr/bin/pytest -ra -m 'not network' tests --pyargs pytest_django_test Traceback (most recent call last): File "/usr/bin/pytest", line 8, in sys.exit(console_main()) File "/usr/lib/python3.9/site-packages/_pytest/config/__init__.py", line 197, in console_main code = main() File "/usr/lib/python3.9/site-packages/_pytest/config/__init__.py", line 155, in main config = _prepareconfig(args, plugins) File "/usr/lib/python3.9/site-packages/_pytest/config/__init__.py", line 337, in _prepareconfig config = pluginmanager.hook.pytest_cmdline_parse( File "/usr/lib/python3.9/site-packages/pluggy/_hooks.py", line 501, in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) File "/usr/lib/python3.9/site-packages/pluggy/_manager.py", line 119, in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) File "/usr/lib/python3.9/site-packages/pluggy/_callers.py", line 138, in _multicall raise exception.with_traceback(exception.__traceback__) File "/usr/lib/python3.9/site-packages/pluggy/_callers.py", line 121, in _multicall teardown.throw(exception) # type: ignore[union-attr] File "/usr/lib/python3.9/site-packages/_pytest/helpconfig.py", line 105, in pytest_cmdline_parse config = yield File "/usr/lib/python3.9/site-packages/pluggy/_callers.py", line 102, in _multicall res = hook_impl.function(*args) File "/usr/lib/python3.9/site-packages/_pytest/config/__init__.py", line 1143, in pytest_cmdline_parse self.parse(args) File "/usr/lib/python3.9/site-packages/_pytest/config/__init__.py", line 1492, in parse self._preparse(args, addopts=addopts) File "/usr/lib/python3.9/site-packages/_pytest/config/__init__.py", line 1396, in _preparse self.hook.pytest_load_initial_conftests( File "/usr/lib/python3.9/site-packages/pluggy/_hooks.py", line 501, in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) File "/usr/lib/python3.9/site-packages/pluggy/_manager.py", line 119, in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) File "/usr/lib/python3.9/site-packages/pluggy/_callers.py", line 138, in _multicall raise exception.with_traceback(exception.__traceback__) File "/usr/lib/python3.9/site-packages/pluggy/_callers.py", line 121, in _multicall teardown.throw(exception) # type: ignore[union-attr] File "/usr/lib/python3.9/site-packages/_pytest/warnings.py", line 150, in pytest_load_initial_conftests return (yield) File "/usr/lib/python3.9/site-packages/pluggy/_callers.py", line 121, in _multicall teardown.throw(exception) # type: ignore[union-attr] File "/usr/lib/python3.9/site-packages/_pytest/capture.py", line 153, in pytest_load_initial_conftests yield File "/usr/lib/python3.9/site-packages/pluggy/_callers.py", line 102, in _multicall res = hook_impl.function(*args) File "/home/tkloczko/rpmbuild/BUILDROOT/python-pytest-django-4.8.0-2.fc36.x86_64/usr/lib/python3.9/site-packages/pytest_django/plugin.py", line 361, in pytest_load_initial_conftests _setup_django(early_config) File "/home/tkloczko/rpmbuild/BUILDROOT/python-pytest-django-4.8.0-2.fc36.x86_64/usr/lib/python3.9/site-packages/pytest_django/plugin.py", line 237, in _setup_django django.setup() File "/usr/lib/python3.9/site-packages/django/__init__.py", line 16, in setup from django.urls import set_script_prefix File "/usr/lib/python3.9/site-packages/django/urls/__init__.py", line 1, in from .base import ( File "/usr/lib/python3.9/site-packages/django/urls/base.py", line 8, in from .exceptions import NoReverseMatch, Resolver404 File "/usr/lib/python3.9/site-packages/django/urls/exceptions.py", line 1, in from django.http import Http404 File "/usr/lib/python3.9/site-packages/django/http/__init__.py", line 2, in from django.http.request import ( File "/usr/lib/python3.9/site-packages/django/http/request.py", line 8, in from django.core import signing File "/usr/lib/python3.9/site-packages/django/core/signing.py", line 44, in from django.utils.crypto import constant_time_compare, salted_hmac File "/usr/lib/python3.9/site-packages/django/utils/crypto.py", line 10, in from django.utils.encoding import force_bytes File "/usr/lib/python3.9/site-packages/django/utils/encoding.py", line 5, in from types import NoneType ImportError: cannot import name 'NoneType' from 'types' (/usr/lib64/python3.9/types.py) ```