pytest-bdd icon indicating copy to clipboard operation
pytest-bdd copied to clipboard

Fail to execute testrun with pytest-pylint plugin

Open toracle opened this issue 5 years ago • 0 comments
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.

toracle avatar Jun 20 '20 18:06 toracle