Класс AsyncClient
Класс AsyncClient предназначен для асинхронного тестирования Django-приложений. Он имитирует браузерный запрос и позволяет выполнять GET, POST, PUT, PATCH, DELETE и другие HTTP-методы в асинхронном режиме. Основное отличие от синхронного Client заключается в том, что все методы AsyncClient являются асинхронными и требуют использования ключевого слова await при вызове. Этот класс удобно использовать при тестировании асинхронных представлений (ASGI-приложений) или при написании асинхронных тестов.
Синтаксис
from django.test import AsyncClient
client = AsyncClient()
response = await client.get('/path/')
Пример . Тестирование GET-запроса
Выполним GET-запрос к главной странице и проверим код ответа:
from django.test import AsyncClient, TestCase
class HomePageTest(TestCase):
async def test_homepage_status(self):
client = AsyncClient()
response = await client.get('/')
self.assertEqual(response.status_code, 200)
Пример . Тестирование POST-запроса
Отправим POST-запрос с данными формы и проверим результат:
from django.test import AsyncClient, TestCase
class LoginTest(TestCase):
async def test_user_login(self):
client = AsyncClient()
response = await client.post('/login/', {
'username': 'john',
'password': 'secret'
})
self.assertEqual(response.status_code, 302)
Результат выполнения кода:
"User successfully logged in"
Пример . Работа с заголовками
Добавим пользовательские заголовки в запрос:
from django.test import AsyncClient, TestCase
class APITest(TestCase):
async def test_api_with_headers(self):
client = AsyncClient()
response = await client.get(
'/api/data/',
headers={
'X-Requested-With': 'XMLHttpRequest',
'Authorization': 'Bearer token123'
}
)
self.assertEqual(response.status_code, 200)
Результат выполнения кода:
"Request processed successfully"
Пример . Использование в асинхронном тестовом классе
Используем AsyncClient в тестовом классе с асинхронным методом:
from django.test import AsyncClient, TransactionTestCase
class AsyncViewTest(TransactionTestCase):
async def test_async_response(self):
client = AsyncClient()
response = await client.get('/async/')
self.assertEqual(response.status_code, 200)
self.assertContains(response, "Hello, World!")
Смотрите также
-
класс
Client,
синхронный клиент для тестирования -
класс
AsyncRequestFactory,
фабрика для создания асинхронных запросов -
метод
get,
выполнение GET-запроса через клиент -
метод
post,
выполнение POST-запроса через клиент