Behave Django Testing - Behave тестирование с помощью selenium использует только базу данных dev вместо test
Извините, я очень новичок в мире тестирования Django Behave, и не могу найти никаких ресурсов в Интернете относительно вопроса, который у меня есть:
Как правильно настроить поведение django, чтобы он мог использовать selenium для тестирования с тестовой базой данных, загруженной тестовыми фикстурами?
Я пытаюсь написать интеграционный тест, который будет тестировать простую функцию разрешения, где пользователь может войти в систему, а ответ будет содержать auth_token
, который последующие страницы будут использовать для блокировки или разрешения в зависимости от пользователя. Тестовый пользователь загружается с помощью фикстуры test-users.json
, но при запуске тестов поведения я получаю 400 (неверные учетные данные) на моем сервере dev и не могу войти в систему с помощью selenium. Я могу войти только с пользователем, который в настоящее время присутствует в моей базе данных dev. Это заставляет меня думать, что либо мои фикстуры не загружаются, либо что selenium не использует тестовую базу данных, которая была установлена behave?
Вот части моего givens.py, evironment.py setup и моего settings.py
# tests/acceptance/environment.py
from rest_framework.test import APIClient
from seleniumrequests import Chrome
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'core.settings.settings'
def django_ready(context):
context.test.client = APIClient()
context.browser = Chrome()
context.browser.implicitly_wait(1)
context.server_url = 'http://localhost:8000'
context.fixtures = [
'test-initial-users.json',
'all-initial-data.json',
'test-initial-accountEmails.json',
'initial-test-sms-data.json']
# core/settings/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': env('DATABASE_NAME'),
'USER': 'postgres',
'PASSWORD': env('DATABASE_PASSWORD'),
'HOST': env('DATABASE_HOST'),
'PORT': env('DATABASE_PORT'),
}
}
# dev initial data:
FIXTURE_DIRS = [os.path.join(BASE_DIR, '../fixtures')]
Мой данный шаг, который вызывает проблему:
tests/acceptance/steps/givens.py
LOGIN_PATH = '/auth/login/'
LOGIN_PW = 'abc'
@given('logged on as superuser')
def logged_on_as_superuser(context):
# POST to login
auth_resp = context.browser.request(
'POST', f'{context.server_url}{LOGIN_PATH}', json={'email': f'{UserTestHelper.TEST_SUPERUSER}@localhost', 'password': LOGIN_PW})
# auth_resp.status_code = 400
# the following works, the only user in my dev database and returns 200 from server
# resp = context.browser.request('POST', f'{context.server_url}{LOGIN_PATH}', json={'email': f'root@localhost', 'password': 'toor'})
# add server response access token as a cookie of browser
context.browser.add_cookie(
{"name": "sms-auth", "value": auth_resp.access_token})
# making sure that browser's cookie and our authentication response token value are the same
context.test.assertEqual(context.browser.get_cookie(
"sms-auth"), auth_resp.access_token)
Чтобы запустить мои тесты поведения, я запускаю: python manage.py runserver
в одном окне, и python manage.py behave
в другом.
Может кто-нибудь объяснить, почему мои фикстуры не загружаются, и что при запуске автоматизированных тестов selenium с behave, запросы попадают в мою базу данных dev, а не test?