Я тестирую свое Django приложение с Selenium в Docker. Я сталкиваюсь с особенностью, связанной с доступностью файлов cookie (я использую файлы cookie для проверки подлинности в своих тестах).
Вот код, который работает:
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from users.models import CustomUser
class SomeTest(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
cls.host = "web" # Docker service name
super().setUpClass()
CustomUser.objects.create_user(username="user", password="password")
def setUp(self):
self.browser = webdriver.Remote("http://selenium:4444/wd/hub", DesiredCapabilities.FIREFOX)
def tearDown(self):
self.browser.quit()
def test2(self):
self.client.login(username="user", password="password")
cookie = self.client.cookies["sessionid"]
...
Однако, когда я вставляю туда другой тест до test2
, пусть это будет что-то столь же простое, как
def test1(self):
pass
, тогда код вылетает со следующей ошибкой:
Traceback (most recent call last):
File "/home/mysite/functional_tests/test.py", line 28, in test2
cookie = self.client.cookies["sessionid"]
KeyError: 'sessionid'
Так что единственная разница между рабочим и не- рабочий код - фиктивная тестовая функция, но что она меняет? Насколько мне известно, методы setUp
и tearDown
обеспечивают, чтобы «среда» была одинаковой для каждого теста, независимо от того, что происходит в других методах тестирования, и здесь она явно зависит от (не) существования другие тесты перед выполнением моего теста ... Что-то я неправильно понял? Или это какая-то ошибка?
Любая помощь будет оценена.
Моя настройка:
Django==2.2.5
selenium==3.141.0
Docker version - 19.03.5