Живой сервер 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()
Вернуться на верх