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

Pytest-describe crashing with yarl.URL

Open Null665 opened this issue 1 year ago • 0 comments

Hi, during Python version upgrade I've found a case where pytest-describe crashes when yarl.URL object is initialized under describe_ block.

test.py

import yarl

def describe_case():
    url = yarl.URL("url")

    def test_it():
        pass

requirementa.txt

pytest==8.2.2
pytest-describe==2.2.0
yarl==1.9.4

Output:

$ pytest test.py
================================================= test session starts =================================================
platform linux -- Python 3.11.7, pytest-8.2.2, pluggy-1.5.0
rootdir: /home/as/dev/nonproject/pytest-yarl-case
plugins: describe-2.2.0
collected 0 items / 1 error                                                                                           

======================================================= ERRORS ========================================================
______________________________________________ ERROR collecting test.py _______________________________________________
test.py:4: in describe_case
    url = yarl.URL("url")
.venv/lib/python3.11/site-packages/yarl/_url.py:200: in __new__
    path = cls._PATH_REQUOTER(val[2])
yarl/_quoting_c.pyx:204: in yarl._quoting_c._Quoter.__call__
    ???
.venv/lib/python3.11/site-packages/pytest_describe/plugin.py:18: in _trace_func
    if (frame.f_back.f_locals.get('_trace_func') == _trace_func
E   AttributeError: 'NoneType' object has no attribute 'f_locals'
=============================================== short test summary info ===============================================
ERROR test.py::describe_case - AttributeError: 'NoneType' object has no attribute 'f_locals'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
================================================== 1 error in 0.12s ===================================================


This appears to happen since Python 3.11. In a bigger test suite this ended up with segmentation fault, but I haven't been able to find minimal example.

My current workaround is to move the variables under fixtures or into test functions, which IMO should have been done from the start.

Null665 avatar Jul 10 '24 08:07 Null665