Живой сервер Django LiveServerTestCase преждевременно отключается
Я пытался запустить несколько функциональных тестов (LiveServerTestCase) с помощью Selenium для приложения Django. Для демонстрации это приложение для создания заметок. Когда я пытаюсь имитировать создание заметок, требуется аутентификация, поэтому в настройках нужно зайти в панель администратора, вставить учетные данные в поля формы, а затем отправить.
После этого я программно перенаправляюсь на страницу, где должен написать заметки, но как только я нажимаю на кнопку submit, возникает запрещенная ошибка. В ней говорится, что экземпляр, выполняющий тест, является AnonymousUser, следовательно, отправка не происходит. Не забывайте, что отправка происходит в конце тестового случая, поэтому я не могу не предположить, что сервер завершается преждевременно. Есть ли флаг или конфигурация, которую я упускаю, чтобы объяснить, почему это происходит?
Пример кода тестового примера:
class NoteTakingTest(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
chrome_options = Options()
cls.selenium = WebDriver(options=chrome_options)
cls.selenium.implicitly_wait(10)
@classmethod
def tearDownClass(cls):
cls.selenium.quit()
return super().tearDownClass()
def setUp(self):
super().setUp()
user = User.objects.create_superuser(email="admin@testing.com", password="admin")
self.selenium.get(f"{self.live_server_url}/admin/login")
email = self.selenium.find_element(By.ID, "id_username")
password = self.selenium.find_element(By.ID, "id_password")
email.send_keys("admin@testing.com")
password.send_keys("admin")
form = self.selenium.find_element(By.ID, "login-form")
form.submit()
def access(self, url):
self.selenium.get(self.live_server_url + url)
def test_pipeline_page_access(self):
pipeline_url = reverse("notes")
self.access(pipeline_url)
self.assertFalse(self.selenium.title.startswith("404"))
wait = WebDriverWait(self.selenium, 10)
submit_button = wait.until(EC.visibility_of_element_located((By.ID, f'note-submit-btn')))
self.selenium.execute_script("arguments[0].scrollIntoView();", submit_button)
# Clicking on the submit button triggers a POST request to /notes
submit_button.click()
Пример кода тестового примера:
class NoteViewSet(viewsets.ModelViewSet):
"""
A viewset that provides the standard actions
"""
serializer_class = NoteSerializer
permission_classes = (permissions.IsAuthenticated,)
def perform_create(self, serializer):
if not self.request.user.is_authenticated:
raise PermissionDenied("You are not authorized to create a note.")
updated_object = serializer.save()