Я использую Selenium для запуска некоторых интеграционных тестов для приложения Django (используя postgres
для базы данных разработки).
Я настраиваю тесты, создавая объект Model.Затем тесты взаимодействуют с объектом через браузер (selenium-webdriver
) или напрямую через запросы к базе данных.
Тесты, использующие webdriver
, не могут получить доступ к объекту модели.База данных запросов может.
Я пришел к выводу, что webdriver
не указывает на правильную базу данных.
Я пытался использовать LiveServerTestCase
, явно указав ему порт и URL-адрес, который я хочу использовать (localhost:8001
), и используя live_server_url
, чтобы он сам решал.Ни один из них не сработал.
Вот проверяемая форма - это простой выбор из списка объектов.
forms.py
class FooForm(form.Form):
foo = forms.ModelChoice.Field(
required=False,
label='select',
queryset=Foo.objects.all(),
widget=forms.Select(),
)
Вот настройки БД.
settings.py
DATABASES = {
'default':{
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'app',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
Вот тесты.
test.py
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.select import Select
from django.test import LiveServerTestCase
from app.models import Foo
class BasicTestCase(LiveServerTestCase):
def setUp(self):
foo = Foo.objects.create(name='test_foo')
self.selenium = webdriver.Firefox()
super(BasicTestCase, self).setUp()
def tearDown(self):
self.selenium.quit()
super(BasicTestCase, self).tearDown()
def test_can_interact_via_db_query(self):
self.assertEqual(Foo.objects.get(id=1).name, 'test_foo')
def test_can_interact_via_webdriver_query(self):
self.selenium.get('%s%s' %(self.live_server_url, '/page/'))
elem = Select(self.selenium.find_element_by_id('id_foo'))
foo_name = elem.select_by_index(0)
self.assertEqual(foo_name, 'test_foo')
Я ожидаю, что оба эти теста пройдут,
Я вижу, как открывается браузер, и с которой взаимодействует страница.
test_can_interact_via_db_query
проходит.
test_can_interact_via_webdriver_query
завершается с ошибкой подтверждения None != test_foo
.