РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
776 of 818 menu

Класс Client

Класс Client применяется в тестах Django для имитации GET и POST запросов к приложению. Он позволяет проверять ответы сервера, содержимое страниц и состояние сессии без запуска реального веб-сервера. Клиент автоматически обрабатывает куки и редиректы, что делает тестирование максимально приближенным к реальной работе браузера.

Синтаксис

from django.test import Client # Создание экземпляра клиента client = Client() # Выполнение GET запроса response = client.get('/path/', {'param': 'value'}) # Выполнение POST запроса response = client.post('/path/', {'data': 'value'})

Пример

Создадим тестовый метод, который проверяет доступность главной страницы сайта:

from django.test import TestCase, Client class HomePageTest(TestCase): def setUp(self): self.client = Client() def test_home_page_status(self): response = self.client.get('/') self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, 'home.html')

Результат выполнения кода:

"Тест успешно пройден"

Пример

Выполним POST запрос для создания новой статьи через форму с проверкой редиректа:

from django.test import TestCase, Client from django.urls import reverse class ArticleCreateTest(TestCase): def setUp(self): self.client = Client() def test_article_creation(self): article_data = { 'title': 'New Article', 'content': 'Content of new article', } response = self.client.post( reverse('article_create'), article_data ) self.assertRedirects(response, '/articles/') self.assertEqual(response.status_code, 302)

Результат выполнения кода:

"Redirect successful to /articles/"

Пример

Проверим работу аутентификации с помощью методов login и logout:

from django.test import TestCase, Client from django.contrib.auth.models import User class LoginTest(TestCase): def setUp(self): self.client = Client() self.user = User.objects.create_user( username='testuser', password='testpass' ) def test_user_login(self): login_success = self.client.login( username='testuser', password='testpass' ) self.assertTrue(login_success) response = self.client.get('/profile/') self.assertEqual(response.status_code, 200) self.client.logout() response = self.client.get('/profile/') self.assertEqual(response.status_code, 302)

Результат выполнения кода:

"User logged in, profile accessed, logged out"

Пример

Использование метода force_login для быстрой аутентификации в тестах без проверки пароля:

from django.test import TestCase, Client from django.contrib.auth.models import User class AdminTest(TestCase): def setUp(self): self.client = Client() self.admin_user = User.objects.create_superuser( username='admin', password='adminpass' ) def test_admin_access(self): self.client.force_login(self.admin_user) response = self.client.get('/admin/') self.assertEqual(response.status_code, 200) self.assertContains(response, 'Administration')

Результат выполнения кода:

"Admin page accessed successfully"

Смотрите также

  • класс TestCase,
    который предоставляет тестовую среду с поддержкой базы данных
  • метод get,
    который выполняет GET запрос через клиент
  • метод post,
    который выполняет POST запрос через клиент
  • метод force_login,
    который выполняет принудительную аутентификацию пользователя
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить