ChatGPT解决这个技术问题 Extra ChatGPT

Unable to debug in pycharm with pytest

I cannot debug in PyCharm using py.test. All the test suite is running ok in "Debug mode" but it doesn't stop on breakpoints.

https://i.stack.imgur.com/gPHyL.png

I also have py.test as the default test runner.

Maybe this is not important, but debugging works correctly in my Django server.

Any ideas?

https://i.stack.imgur.com/vP9ou.png

References:

pycharm-enabling-disabling-and-removing-breakpoints

Run/Debug Configuration: py.test


N
Neuron

For my situation, I found what the problem is:

If there is --cov in pytest.ini, then breakpoints in pycharm won't work, after deleting all --cov in pytest.ini, the breakpoints in pycharm can work.

Reason:

"The coverage module and pycharm's debugger use the same tracing api (sys.settrace) - they don't work together. " -- https://github.com/pytest-dev/pytest-cov/issues/131

References:

How to debug py.test in PyCharm when coverage is enabled


py.test test_dir --no-cov
Where is the pytest.ini file?
@silverest Create by yourself, you can see docs.pytest.org/en/latest/customize.html#finding-the-rootdir.
This also solves the same issue in PyDev (because both use pydevd). It's also worth looking around for pytest.ini or the like, which may impose coverage reporting.
@madzohan and joaoricardo000 answers I think is the best. As this can be applied in the debug configuration as an additional argument, without changing the pytest.ini file which is likely to be in version control.
j
joaoricardo000

The root issue is debugging does not work if you have coverage enabled by default (usually on pytest.ini).

To disable just on pycharm, just add --no-cov on the Additional Arguments on the Run/Debug Configurations.
Update Templates -> Python tests -> pytest, so every new test gets this configuration.
After this, delete your current debug settings and redebug it.

https://i.stack.imgur.com/DmgRr.png

Pycharm 2018.3.x (still works in 2020.x)


Thanks, works for me. This preferable to deactivating coverage in the pytest.ini as suggested in the accepted answer. Now running the tests from the command line or during the CI builds still results in coverage reports.
Problem solved. But being new to PyCharm I had a hell of a time finding out how to get to the Run/Debug Configurations (navigation bar was hidden, and I didn't know...) jetbrains.com/help/pycharm/…
I had to install pytest-cov to try this. However, it did not work for me.
In Pycharm Pro 2020.2 it is in "Run Configuration Templates for New Projects" under "New Project Settings" in the File menu, or you can get to it when pressing "Add configuration" in the run menu.
I added --no-cov to the pyproject.toml file in a kedro project and it solved my problem. Thanks!
A
Alessio

TL;DR: Disable the "Gevent compatible" flag in the "Build, execution, Deployment" -> "Python Debugger".

It seems that at some point I enabled the "Gevent compatible" debugger in pycharm, and since then pytest-pycharm stopped working. Disabling it will make pytest-pycharm work again. I hope this will solve the issue for some of you.


I have PyCharm 2018.2.1 and the option is already disabled by default
I believe I enabled this to try to resolve a warning or error in a previous version and upon upgrading hardly any breakpoints would work (only those in my main.py). Unchecking it restored expected operation.
Thanks a lot Alessio, this solved my problem. And yes this flag is indeed disabled by default, but I for example needed to enable it to debug large deep learning models with PyTorch (stackoverflow.com/a/47801392/1081551). So it's quite critical to understand when to enable/disable it
O
Or b

I know that you had it right, but for me actually setting the Default test runner to pytest solved the problem. In PyCharm: Settings -> Python Integrated Tools -> Testing section -> Default test runner -> choose pytest from the dropdown menu -> Apply. And it instantly works.


m
mrbattle

None of the solutions mentioned here or elsewhere worked for me.

I have multiple copies of the same project in different folders. Some copies were fine, others exhibited the following behavior:

debugger would ignore any breakpoints in tests (regardless if these were run as single functions, classes, modules, batches)

breakpoints set in actual code called by these tests were hit

What did work for me (4 broken repos and counting):

Delete contents of __pycache__ folders in your project, starting out from the directory where your undebuggable test module is located. Remove the .pyc file with the name of the undebuggable module first. If this doesn't help, identify any own imports used in the test, locate and delete the __pycache__/.pyc for them as well. (Note: use a file browsing tool like File Explorer because Pycharm doesn't show these directories in the project view.)

If you're still out of luck or just plain lazy (like me), wipe all the __pycache__ folders you have in your repo. You can do this via your command line/terminal, just navigate yourself to the repo folder and then:

find . -name __pycache__ -type d -exec rm -rf {} \; [linux, mac] (see How to remove folders with a certain name)

FOR /d /r . %d IN ("__pycache__") DO @IF EXIST "%d" rd /s /q "%d" [win] (see Batch command to delete all subfolders with a specific name)

EDIT: Made the description a bit detailed after recent findings, added a quick wipe hint. Noticed afterwards that @mcsj120 already suggested this in Antonin's post, so kudos to him!


Running the command to remove __pycache__ recursively solved the problem.
A
Antonin G.

I'd like to add to this conversation that these fixes does not seem to work in the case a single test function is launched in PyCharm (rather than the whole test file).

I yet haven't found a solution online to activate breakpoints when debugging a single test function instead of the whole file, and if someone has a solution, I would be interested. If I find it myself, I'll try to update this post.


I was having this same issue where a single text fixture wouldn't stop on breakpoints and used @mrbattle 's solution by deleting all of the pycache files using the command find . -name __pycache__ -type d -exec rm -rf {} \; (Mac) Afterwards, I was able to hit breakpoints.
e
eXTure

For me the solution was to just create empty pytest.ini file in the test folder. After doing this I can also launch debug for specific functions.


关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now