#36327: Improve TestCase.assertNumQueries() to allow for multiple databases
-------------------------------------+-------------------------------------
Reporter: Javier Buzzi | Type: New
| feature
Status: new | Component: Testing
| framework
Version: dev | Severity: Normal
Keywords: query count | Triage Stage:
testcase assertNumQueries | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Relevant discussions:
* https://forum.djangoproject.com/t/add-ability-to-capture-all-the-db-
queries-at-once-during-tests/39650
* https://github.com/pytest-dev/pytest-django/pull/1177
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.
--
Ticket URL: <https://code.djangoproject.com/ticket/36327>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/django-updates/01070196350eddfd-192e8a60-5330-40b1-a3b9-272db1f15eea-000000%40eu-central-1.amazonses.com.