Если вы не возражаете против изменения среды тестирования, рассмотрите pytest с пакетом pytest-django
. Вы можете легко параметризовать тест, используя @pytest.mark.parametrize
:
import pytest
@pytest.mark.parametrize("page_name", ['homepage', 'dashboard', 'profile'])
def test_some_page(page_name, client):
client.login(username='test', password='test')
response = client.get(reverse_lazy(page))
assert response.status_code == 200
client.logout()
response = client.get(reverse_lazy(page))
assert response.status_code == 302
Если нет, вы можете создать фабрику тестовых функций, которая будет принимать имя страницы и возвращать тестовую функцию для этой страницы:
class MyTestCase(TestCase):
def _create_page_test(page_name):
def test_function(self):
self.c.login(username='test', password='test')
response = self.c.get(reverse_lazy(page_name))
self.assertEqual(200, response.status_code, msg=page_name)
self.c.logout()
response = self.c.get(reverse_lazy(page_name))
self.assertEqual(302, response.status_code, msg=page_name)
return test_function
test_homepage = _create_page_test("homepage")
test_dashboard = _create_page_test("dashboard")
test_profile = _create_page_test("profile")
Дополнительным преимуществом таких изменений является то, что каждая страница имеет отдельный тест, независимый от других. Это облегчает отладку.