pytest-bdd
pytest-bdd copied to clipboard
Fail to execute testrun with pytest-pylint plugin
trafficstars
I met error below when I added pytest-pylint plugin along with pytest-bdd.
$ python -m pytest --pylint
===================== test session starts ========================================
platform linux -- Python 3.7.3, pytest-5.4.3, py-1.8.2, pluggy-0.13.1
rootdir: /home/toracle/projects/pytest-error
plugins: bdd-3.4.0, pylint-0.17.0
collected 5 items
--------------------------------------------------------------------------------
Linting files
....
--------------------------------------------------------------------------------
Traceback (most recent call last):
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/_pytest/main.py", line 191, in wrap_session
session.exitstatus = doit(config, session) or 0
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/_pytest/main.py", line 246, in _main
config.hook.pytest_collection(session=session)
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pluggy/hooks.py", line 286, in __call__
return self._hookexec(self, self.get_hookimpls(), kwargs)
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pluggy/manager.py", line 93, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pluggy/manager.py", line 87, in <lambda>
firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pluggy/callers.py", line 208, in _multicall
return outcome.get_result()
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pluggy/callers.py", line 80, in get_result
raise ex[1].with_traceback(ex[2])
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pluggy/callers.py", line 187, in _multicall
res = hook_impl.function(*args)
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/_pytest/main.py", line 257, in pytest_collection
return session.perform_collect()
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/_pytest/main.py", line 455, in perform_collect
session=self, config=self.config, items=items
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pluggy/hooks.py", line 286, in __call__
return self._hookexec(self, self.get_hookimpls(), kwargs)
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pluggy/manager.py", line 93, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pluggy/manager.py", line 87, in <lambda>
firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pluggy/callers.py", line 208, in _multicall
return outcome.get_result()
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pluggy/callers.py", line 80, in get_result
raise ex[1].with_traceback(ex[2])
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pluggy/callers.py", line 187, in _multicall
res = hook_impl.function(*args)
File "/home/toracle/.virtualenvs/api/lib/python3.7/site-packages/pytest_bdd/plugin.py", line 114, in pytest_collection_modifyitems
items.sort(key=item_key)
TypeError: '<' not supported between instances of 'int' and 'NoneType'
item.reportinfo()[:2] tuple on plugin.py:L112 is a pair of function name and line number of testcase function, and pytest-pylint seems add special testcases which has no line number (which is None), so it fails to sort items.
Reproduce procedure
Install below:
- pytest (5.4.3)
- pytest-bdd (3.4.0)
- pytest-pylint (0.17.0)
Setup a simple test code
rootdir
+-- src/
+-- __init__.py
+-- main.py
+-- test/
+-- __init__.py
+-- test_main.py
main.py
def mysum(a, b):
return a + b
test_main.py
from src.main import mysum
def test_mysum():
assert mysum(2, 3) == 5
And run python -m pytest --pylint occurs error above.