Can I use Python Debugger In Bazel Test

旧巷老猫 提交于 2019-12-10 15:10:04

问题


I am trying to debug my tests using pdb (Python debugger) while running them with bazel.

This is a sample test I have:

class TestMembersResource(TestCase):

    def test_get(self):
        response = self.client.get('/api/v1/members/')
        import ipdb; ipdb.set_trace()
        self.assertEqual(response.status_code)

When I try to run it with bazel test ... I get the following output:

Traceback (most recent call last):
    File "/root/.cache/bazel/_bazel_root/ae988d93859d448ae36776fcb135b36c/execroot/__main__/bazel-out/k8-fastbuild/bin/webserver/members/api/tests/test_members_resource.runfiles/__main__/webserver/members/api/tests/test_members_resource.py", line 22, in test_get
    self.assertEqual(response.status_code, 200,
    File "/root/.cache/bazel/_bazel_root/ae988d93859d448ae36776fcb135b36c/execroot/__main__/bazel-out/k8-fastbuild/bin/webserver/members/api/tests/test_members_resource.runfiles/__main__/webserver/members/api/tests/test_members_resource.py", line 22, in test_get
    self.assertEqual(response.status_code, 200,
    File "/usr/lib/python2.7/bdb.py", line 49, in trace_dispatch
    return self.dispatch_line(frame)
    File "/usr/lib/python2.7/bdb.py", line 68, in dispatch_line
    if self.quitting: raise BdbQuit
BdbQuit

Without pdb everything works pretty smooth.

Is there a way to get an interactive shell and use the standard pdb commands with bazel test?

Thanks!


回答1:


You need to use --run_under:

bazel test --run_under=/usr/bin/pdb //webserver/members/api/tests:test_members_resource



回答2:


You can do this using the --run_under flag, as mentioned. It's important to note that you need to point to the pdb.py for your python install. To find where to point to, you can do the following:

Check where your python version is installed. This should be using something like python2.7, or python3.6, not just python or python3, as those are frequently just symlinks.

$ which python3.6
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6

Note that this is where the binary is located, while we want to point to a library file. To do so, replace the last bin with lib, and specify the desired file, something like this:

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pdb.py

Now you can run your targets like this:

bazel run --run_under="/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pdb.py"


来源:https://stackoverflow.com/questions/51709590/can-i-use-python-debugger-in-bazel-test

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!