Используйте базу данных тестовой базы данных для тестирования представлений

Я пишу тесты для представлений приложений django, и я новичок в этом. Я знаю, что перед запуском тестов создается новая база данных, которая содержит только данные, которые создаются во время выполнения тестов, но в тестах моего представления я делаю вызовы API по URL-адресу на моем сервере, который использует мою базу данных по умолчанию, а не тест базы данных следующим образом.

  def test_decline_activity_valid_permission(self):
        url = 'http://myapp:8002/api/v1/profile/' + self.profileUUID + '/document/' + \
              self.docUUID + '/decline/'
        response = requests.post(
            url,
            data=json.dumps(self.payload_valid_permission),
            headers=self.headers,
        )
        self.assertEquals(response.status_code, status.HTTP_201_CREATED)

Я хочу знать, можем ли мы использовать тестовую базу данных для тестирования наших взглядов или нет. И в чем разница между использованием запроса и использованием клиента?


person Shoaib Iqbal    schedule 15.11.2018    source источник
comment
requests делает полный HTTP-запрос. Тестовый клиент Django избегает накладных расходов HTTP и работает напрямую с файлом django. Также тестовый клиент не требует запуска веб-сервера.   -  person Jonhy Beebop    schedule 15.11.2018


Ответы (1)


Вы можете попробовать использовать LiveServerTestCase от Django. Это работает как TransactionTestCase, но запустит сервер на localhost, указывающий на тестовую базу данных. Он запускается/останавливается в начале/конце каждого теста.

Затем вы можете настроить URL-адрес в своем тесте, чтобы он указывал на этот локальный сервер. Django предоставляет self.live_server_url для доступа к URL-адресу сервера.

Как упоминалось в комментариях, тестовый клиент Django позволяет тестировать представления без реальных HTTP-запросов. В то время как библиотека запросов, которую вы используете в своем тесте, будет отправлять и получать реальный HTTP-запрос и ответы.

person Will Keeling    schedule 15.11.2018