Imported from Trac ticket #36327, reported by Javier Buzzi on 2025-04-14. This repository is a migration demo, not Django's real tracker.
Assigned to: Javier Buzzi · Keywords: query count testcase assertNumQueries · Resolution: wontfix
PR 19380
Relevant discussions:
The goal is to enhance the behavior of TestCase.assertNumQueries(). In large Django projects, the data structure is often split into multiple databases—for example, one for user data, another for business data, one for events, and even a dedicated one for certain monetary compliance logs. As a result, tests may need to validate query counts across several databases. For instance, you might have code that looks like this:
class TestThing(TestCase):
databases = {"db1", "db2", "db3", "db4"}
def test_thing(self):
with self.assertNumQueries(4, using="db1"), self.assertNumQueries(0, using="db2"), self.assertNumQueries(1, using="db3"), self.assertNumQueries(0, using="db4"):
thing()
The desired improvement is to simplify this syntax. Instead of writing a separate context manager for each database, you could pass multiple databases at once. For example:
class TestThing(TestCase):
databases = {"db1", "db2", "db3", "db4"}
def test_thing(self):
with self.assertNumQueries(5, using={"db1", "db2", "db3", "db4"}):
thing()
Alternatively, you might be able to use a special keyword like __all__ to achieve the same effect:
with self.assertNumQueries(5, using="__all__"):
...
This approach not only makes the test code more manageable but also helps improve clarity by consolidating query count assertions across all databases.
PR 19380
Relevant discussions:
The goal is to enhance the behavior of
TestCase.assertNumQueries(). In large Django projects, the data structure is often split into multiple databases—for example, one for user data, another for business data, one for events, and even a dedicated one for certain monetary compliance logs. As a result, tests may need to validate query counts across several databases. For instance, you might have code that looks like this:The desired improvement is to simplify this syntax. Instead of writing a separate context manager for each database, you could pass multiple databases at once. For example:
Alternatively, you might be able to use a special keyword like
__all__to achieve the same effect:This approach not only makes the test code more manageable but also helps improve clarity by consolidating query count assertions across all databases.