Метод assertURLEqual
Метод assertURLEqual применяется к экземпляру класса TestCase
и проверяет, что два переданных URL-адреса эквивалентны.
Сравнение выполняется без учета порядка параметров запроса,
что позволяет избежать ложных срабатываний при разных
последовательностях аргументов. Метод автоматически обрабатывает
кодирование символов и нормализует пути, делая сравнение
максимально удобным для тестирования веб-приложений.
Синтаксис
self.assertURLEqual(url1, url2, msg=None)
Параметры метода:
- url1 - первый сравниваемый URL-адрес (строка);
- url2 - второй сравниваемый URL-адрес (строка);
- msg - необязательное сообщение об ошибке, которое будет выведено при несовпадении URL-адресов.
Пример . С простыми URL-адресами
Проверим равенство двух простых URL-адресов:
from django.test import TestCase
class URLTestCase(TestCase):
def test_simple_urls(self):
url1 = '/articles/2025/09/07/'
url2 = '/articles/2025/09/07/'
self.assertURLEqual(url1, url2)
# Сравнение с полным URL
full_url = 'https://example.com/articles/2025/09/07/'
self.assertURLEqual(full_url, url2)
Результат выполнения кода:
"All assertions passed successfully"
Пример . С параметрами запроса
Метод игнорирует порядок параметров в строке запроса:
from django.test import TestCase
class URLParamsTestCase(TestCase):
def test_url_with_query_params(self):
url1 = '/search/?q=django&page=2&sort=date'
url2 = '/search/?page=2&sort=date&q=django'
# Порядок параметров не важен
self.assertURLEqual(url1, url2)
# Сравнение с другим значением параметра
url3 = '/search/?q=python&page=2&sort=date'
self.assertURLEqual(url1, url3)
Результат выполнения кода:
"AssertionError: '/search/?q=django&page=2&sort=date' != '/search/?q=python&page=2&sort=date'"
Пример . Использование в тестировании редиректов
Метод удобно применять для проверки редиректов с помощью клиента:
from django.test import TestCase
from django.urls import reverse
class RedirectTestCase(TestCase):
def test_redirect_to_article(self):
response = self.client.get('/old-article/')
# Проверяем URL редиректа
expected_url = '/articles/2025/09/07/django-testing/'
self.assertURLEqual(response.url, expected_url)
# Проверяем с параметрами
response = self.client.get('/search/?q=django')
expected_url = '/search/results/?query=django&page=1'
self.assertURLEqual(response.url, expected_url)
Пример . Работа с относительными и абсолютными путями
Метод корректно сравнивает относительные и абсолютные URL:
from django.test import TestCase
class RelativeURLTestCase(TestCase):
def test_relative_vs_absolute(self):
relative = '/articles/2025/09/07/'
absolute = 'https://example.com/articles/2025/09/07/'
# Сравнение относительного и абсолютного URL
self.assertURLEqual(relative, absolute)
# Сравнение с разными доменами
absolute2 = 'https://another.com/articles/2025/09/07/'
self.assertURLEqual(absolute, absolute2)
Смотрите также
-
метод
assertRedirects,
который проверяет редирект и соответствие URL-адреса -
метод
assertContains,
который проверяет наличие текста в ответе сервера -
метод
assertInHTML,
который проверяет наличие HTML-фрагмента -
метод
assertJSONEqual,
который сравнивает два JSON-объекта