diff --git a/django/test/utils.py b/django/test/utils.py index 78bbb0cf65..63067c98a6 100644 --- a/django/test/utils.py +++ b/django/test/utils.py @@ -728,12 +728,13 @@ class CaptureQueriesContext: self.connection.ensure_connection() self.initial_queries = len(self.connection.queries_log) self.final_queries = None - request_started.disconnect(reset_queries) + self.reset_queries_disconnected = request_started.disconnect(reset_queries) return self def __exit__(self, exc_type, exc_value, traceback): self.connection.force_debug_cursor = self.force_debug_cursor - request_started.connect(reset_queries) + if self.reset_queries_disconnected: + request_started.connect(reset_queries) if exc_type is not None: return self.final_queries = len(self.connection.queries_log) diff --git a/tests/test_utils/tests.py b/tests/test_utils/tests.py index ae123920e0..e468c24727 100644 --- a/tests/test_utils/tests.py +++ b/tests/test_utils/tests.py @@ -435,6 +435,14 @@ class CaptureQueriesContextManagerTests(TestCase): self.assertIn(self.person_pk, captured_queries[0]["sql"]) self.assertIn(self.person_pk, captured_queries[1]["sql"]) + def test_with_client_nested(self): + with CaptureQueriesContext(connection) as captured_queries: + Person.objects.count() + with CaptureQueriesContext(connection): + pass + self.client.get(self.url) + self.assertEqual(2, len(captured_queries)) + @override_settings(ROOT_URLCONF="test_utils.urls") class AssertNumQueriesContextManagerTests(TestCase): @@ -475,6 +483,13 @@ class AssertNumQueriesContextManagerTests(TestCase): self.client.get(self.url) self.client.get(self.url) + def test_with_client_nested(self): + with self.assertNumQueries(2): + Person.objects.count() + with self.assertNumQueries(0): + pass + self.client.get(self.url) + @override_settings(ROOT_URLCONF="test_utils.urls") class AssertTemplateUsedContextManagerTests(SimpleTestCase):