-
Notifications
You must be signed in to change notification settings - Fork 551
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support coverage for py_test
#43
Comments
@damienmg assigning to you to redirect appropriately. |
fwiw, I've also been poking at this as documented here: https://groups.google.com/d/msg/bazel-discuss/LC97zBrMG84/cfVNdus-AwAJ It's been slow going, as I'm pretty unfamiliar with Bazel internals, and haven't been able to get the ear of somebody who is. |
Setting P4 because this isn't a blocker for 1.0 support. |
Has this feature been implemented yet? If so, in what release version? It seems like coverage has been able to cover every other bit of our code repo except for all python files which is makes up most of our code base. Please let me know! |
Is there a way to make This is kind of important because we want to be able to run |
how is it possible that coverage, python, and bazel don't work together, in the year of our lord 2020 |
IIUC this problem lies in |
This issue has been automatically marked as stale because it has not had any activity for 180 days. It will be closed if no further activity occurs in 30 days. |
We at Camus Energy still want this. Python doesn't scale well without good test coverage, and coverage reports are valuable leverage. If the author of an eventual PR is ever in San Francisco, we will buy you a taco, and tell you all about how weird it is to develop software in the energy sector. (Hopefully these words of support count as activity.) |
This issue has been automatically marked as stale because it has not had any activity for 180 days. It will be closed if no further activity occurs in 30 days. |
Boop. We still desire this 🙂 |
Then implement it, perhaps? 🙃 |
At this point upstream coveragepy has |
Summary: - A script to update URLs and sha256 values used to download platform specific coverage.py wheels. - Allow to specify `coverage_tool` attribute in `python_repository`. - Register `coverage.py` when running `pip_install_dependencies` function. - Ensure that `use_repo` includes coverage tool, so that `bzlmod` users can use it too. - Have a boolean flag, which disables setting `coverage_tool` in the toolchain code. Does not work/bad/ugly: - Use coverage.py v6.5.0 because the latest has `types.py` in the package directory, which imports from Python's stdlib `types` [1]. Somehow the Python interpreter is thinking that the `from types import FrameType` is referring to the currently interpreted file and everything breaks. I would have expected the package to use absolute imports and only attempt to import from `coverage.types` if we use `coverage.types` and not just a plain `types` import. - The `multi_python_versions` example cannot show coverage for the more complex tests that are using `subprocess`. I am wondering if this is related to the fact that we are including `coverage.py` via the toolchain and not through other mechanisms [2]. - The `__init__.py` files in the root of the WORKSPACE in `bzlmod` is breaking, when running under `bazel coverage //:test`. However, it started working when I renamed `__init__.py` to `lib.py`. I am suspecting that this has to do with the fact that the layer of indirection that `coverage` introduces could be something to do with that. Work towards bazelbuild#43. [1]: https://github.com/nedbat/coveragepy/blob/master/coverage/types.py [2]: https://bazel.build/configure/coverage
@aignas do we have more work to do on this? |
this issue has been open for 6 years |
I think we can safely close it now as we have docs and there are quite a few versions supporting toolchain with coverage.py enabled. |
@aignas I just set up a brand new project on top of rules_python, using Bazel 7 and Bzlmod, and coverage still doesn't work out of the box. Where do you see toolchains supporting coverage? |
bazel coverage
should generate a coverage report for the python tests it runs. Ideally, it gathers the list of dependencies, and then computes coverage over that for a given test. When multiple tests are run in the same Bazel invocation, their reports should be merged into a single one.I'm dropping this here mostly as a python-specific version of bazelbuild/bazel#1118. I know that the
py_test
rule is currently implemented natively in Bazel, and the implementation inrules_python
just forwards there, but this is fundamentally a python issue, so this repo feels appropriate.The general plan is to modify the python test runner within Bazel to use
coverage.py
to generate reports when running under coverage. I suspect it is a journey fraught with peril.Alternatively, if it is possible to invoke
coverage.py
in ways other than modifying core Bazel, I'm open to suggestions.The text was updated successfully, but these errors were encountered: