Monday 13 May 2019 — This is over five years old. Be careful.
Development of version 5 of coverage.py is going slowly, but it is progressing. The latest alpha is out: coverage.py 5.0a5.
The biggest changes are due to Stephan Richter and Justas Sadzevičius, from Shoobox. They improved the support for recording dynamic contexts, informally known as Who Tests What.
Now third-party code, either as a coverage.py plugin or using the coverage.py API can set the dynamic context.
I’ve added support for this to the pytest-cov plugin, to record the pytest test id as the dynamic context. If you’d like to try it:
pip install coverage==5.0a5
pip install git+https://github.com/nedbat/pytest-cov.git@nedbat/contexts
pytest --cov=. --cov-context
The .coverage data file is now a SQLite database. Coverage.py has no support yet for using the collected context data, but you can examine the raw data in the database:
$ sqlite3 .coverage
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
sqlite> select * from context;
id context
---------- --------------------------------------------------
1
2 test_it.py::test_prod1|setup
3 test_it.py::test_prod1|call
4 test_it.py::test_prod1|teardown
5 test_it.py::test_prod2|setup
6 test_it.py::test_prod2|call
7 test_it.py::test_prod2|teardown
8 test_it.py::test_prod3[1-1]|setup
9 test_it.py::test_prod3[1-1]|call
10 test_it.py::test_prod3[1-1]|teardown
11 test_it.py::test_prod3[10-100]|setup
12 test_it.py::test_prod3[10-100]|call
13 test_it.py::test_prod3[10-100]|teardown
14 test_it.py::test_prod3[11-121]|setup
15 test_it.py::test_prod3[11-121]|call
16 test_it.py::test_prod3[11-121]|teardown
sqlite> select * from arc where context_id = 9;
file_id context_id fromno tono
---------- ---------- ---------- ----------
1 9 -14 15
1 9 15 16
1 9 16 17
1 9 17 -14
sqlite> select * from file where id = 1;
id path
---------- --------------------------------------------------
1 /Users/ned/lab/pytest_func_test/src/product.py
I’m looking for feedback about what kinds of reporting would be useful. Stephan has a pull request to provide some context-based reporting. Does it do what you want? Have you used contexts? What needs to happen before they are ready for everybody?
Comments
Add a comment: