Django: is there a way to count SQL queries from an unit test?

前端 未结 8 923
广开言路
广开言路 2021-01-31 13:55

I am trying to find out the number of queries executed by a utility function. I have written a unit test for this function and the function is working well. What I would like to

8条回答
  •  南方客
    南方客 (楼主)
    2021-01-31 14:30

    Vinay's response is correct, with one minor addition.

    Django's unit test framework actually sets DEBUG to False when it runs, so no matter what you have in settings.py, you will not have anything populated in connection.queries in your unit test unless you re-enable debug mode. The Django docs explain the rationale for this as:

    Regardless of the value of the DEBUG setting in your configuration file, all Django tests run with DEBUG=False. This is to ensure that the observed output of your code matches what will be seen in a production setting.

    If you're certain that enabling debug will not affect your tests (such as if you're specifically testing DB hits, as it sounds like you are), the solution is to temporarily re-enable debug in your unit test, then set it back afterward:

    def test_myself(self):
        from django.conf import settings
        from django.db import connection
    
        settings.DEBUG = True
        connection.queries = []
    
        # Test code as normal
        self.assert_(connection.queries)
    
        settings.DEBUG = False
    

提交回复
热议问题