Since the release of pytest 8.0, a pytest internal error is raised while launching tests:
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/_pytest/main.py", line 272, in wrap_session
INTERNALERROR> session.exitstatus = doit(config, session) or 0
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/_pytest/main.py", line 326, in _main
INTERNALERROR> config.hook.pytest_runtestloop(session=session)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_hooks.py", line 501, in __call__
INTERNALERROR> return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_manager.py", line 119, in _hookexec
INTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 138, in _multicall
INTERNALERROR> raise exception.with_traceback(exception.__traceback__)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 121, in _multicall
INTERNALERROR> teardown.throw(exception) # type: ignore[union-attr]
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/_pytest/logging.py", line 796, in pytest_runtestloop
INTERNALERROR> return (yield) # Run all the tests.
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 102, in _multicall
INTERNALERROR> res = hook_impl.function(*args)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/_pytest/main.py", line 351, in pytest_runtestloop
INTERNALERROR> item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_hooks.py", line 501, in __call__
INTERNALERROR> return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_manager.py", line 119, in _hookexec
INTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 181, in _multicall
INTERNALERROR> return outcome.get_result()
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_result.py", line 99, in get_result
INTERNALERROR> raise exc.with_traceback(exc.__traceback__)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 166, in _multicall
INTERNALERROR> teardown.throw(outcome._exception)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/_pytest/warnings.py", line 109, in pytest_runtest_protocol
INTERNALERROR> return (yield)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 166, in _multicall
INTERNALERROR> teardown.throw(outcome._exception)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/_pytest/assertion/__init__.py", line 174, in pytest_runtest_protocol
INTERNALERROR> return (yield)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 166, in _multicall
INTERNALERROR> teardown.throw(outcome._exception)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/_pytest/unittest.py", line 408, in pytest_runtest_protocol
INTERNALERROR> res = yield
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 166, in _multicall
INTERNALERROR> teardown.throw(outcome._exception)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/_pytest/faulthandler.py", line 85, in pytest_runtest_protocol
INTERNALERROR> return (yield)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 102, in _multicall
INTERNALERROR> res = hook_impl.function(*args)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/_pytest/runner.py", line 114, in pytest_runtest_protocol
INTERNALERROR> runtestprotocol(item, nextitem=nextitem)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/_pytest/runner.py", line 133, in runtestprotocol
INTERNALERROR> reports.append(call_and_report(item, "call", log))
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/_pytest/runner.py", line 228, in call_and_report
INTERNALERROR> report: TestReport = hook.pytest_runtest_makereport(item=item, call=call)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_hooks.py", line 501, in __call__
INTERNALERROR> return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_manager.py", line 119, in _hookexec
INTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 155, in _multicall
INTERNALERROR> teardown[0].send(outcome)
INTERNALERROR> File "/root/venv/lib/python3.10/site-packages/pytest_selenium/pytest_selenium.py", line 256, in pytest_runtest_makereport
INTERNALERROR> exclude = item.config.getini("selenium_exclude_debug").lower()
INTERNALERROR> AttributeError: 'NoneType' object has no attribute 'lower'
After investigating it appears that the cause is in a change of behaviour in parser.addini (cf pytest changelog). The current implementation clearly needs default value to be a string (due to lower method). But since Pytest 8.0, the default value is None (second bullet point of pytest documentation).
Hi,
Since the release of pytest 8.0, a pytest internal error is raised while launching tests:
After investigating it appears that the cause is in a change of behaviour in
parser.addini
(cf pytest changelog). The current implementation clearly needs default value to be a string (due tolower
method). But since Pytest 8.0, the default value isNone
(second bullet point of pytest documentation).