Opened 10 years ago
Last modified 8 months ago
#23746 new New feature
Remedy assertNumQueries dependence on some caches state — at Initial Version
Reported by: | Wojtek Ruszczewski | Owned by: | nobody |
---|---|---|---|
Component: | Testing framework | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Tim Graham, Ülgen Sarıkavak | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
The assertNumQueries
manager / method may return different results depending on what is in various caches. Consequently, some tests using it to rely on test ordering, particularly those that count some content type queries. For instance if you run the suite in reverse you'll see test_group_permission_performance
failing due to ContentType
being or not being asked about auth.Group
in some preceding test 1.
The proposed solution resets "query" caches on entering the manager (with a switch to disable it for actual caching tests). After introducing the change 10 tests started to fail (ContentType
cache tests and some prefetch_related
tests), 2 specific workarounds were no longer necessary (#17377, #20432) and a failure from PR 3426 disappeared 2.
Note to prospective reviewers: Are there any other caches that should be cleared besides the ContentType
and Site
? Related objects caches maybe? Do the affected prefetch_related
operations actually require content type queries? Would it be better to clear all the caches after every test case to avoid other kinds of dependencies?
[1] What happens in the likewise failing with "--reverse" test_user_permission_performance
is a bit intriguing and probably more involved -- two identical content type queries, savepoint, content type insertion and a release?
[2] Only tested with Python 3.3 / Postgres,