Browse Source

Restored multiprocessing concurrency on coverage.py settings

* Revert "Reverted "Fixed #33213 -- Doc'd testing code coverage in parallel and used it.""

This reverts commit 78da5ca0c1f2ab3201f8f6cd629e80d805ea023d.

* Restored coverage multiprocess concurrency with threads

Investigating https://github.com/nedbat/coveragepy/issues/1585 revealed
that thread tracing gets disabled when passing
`concurrency = multiprocessing`. Adding `thread` restores it, and
ensures that the `auser()` is reported as covered since the test suite
uses `AsyncToSync` to execute this middleware (which spawns threads).
Marc Gibbons 1 year ago
parent
commit
070cbac0db
3 changed files with 12 additions and 5 deletions
  1. 1 1
      .gitignore
  2. 9 4
      docs/internals/contributing/writing-code/unit-tests.txt
  3. 2 0
      tests/.coveragerc

+ 1 - 1
.gitignore

@@ -13,6 +13,6 @@ docs/_build/
 docs/locale/
 node_modules/
 tests/coverage_html/
-tests/.coverage
+tests/.coverage*
 build/
 tests/report/

+ 9 - 4
docs/internals/contributing/writing-code/unit-tests.txt

@@ -337,14 +337,19 @@ Contributors are encouraged to run coverage on the test suite to identify areas
 that need additional tests. The coverage tool installation and use is described
 in :ref:`testing code coverage<topics-testing-code-coverage>`.
 
-Coverage should be run in a single process to obtain accurate statistics. To
-run coverage on the Django test suite using the standard test settings:
+To run coverage on the Django test suite using the standard test settings:
 
 .. console::
 
-   $ coverage run ./runtests.py --settings=test_sqlite --parallel=1
+   $ coverage run ./runtests.py --settings=test_sqlite
 
-After running coverage, generate the html report by running:
+After running coverage, combine all coverage statistics by running:
+
+.. console::
+
+   $ coverage combine
+
+After that generate the html report by running:
 
 .. console::
 

+ 2 - 0
tests/.coveragerc

@@ -1,5 +1,7 @@
 [run]
 branch = True
+concurrency = multiprocessing,thread
+data_file = .coverages/.coverage
 omit =
     */django/utils/autoreload.py
 source = django