#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.

Reply via email to