Сделайте тесты подразделения в базе данных «Live» в настройках .py при использовании Django 'Manage.py Test'
-
24-09-2019 - |
Вопрос
Если у вас есть настройка базы данных в Django, как вы можете получить TestRunner использовать базу данных «Live» (на настройки базы данных_ * settings.py
) вместо того, чтобы запустить их в эфемерной тестовой базе данных.
Например, я хотел бы запустить следующий тест на live
База данных, которая указана в settings.py
:
import unittest
from example import models
class DBDriverTest(unittest.TestCase):
db testDriver(self):
"Connect to the live database and drop in sample value."
m = models.MyModel('hello')
m.save() # ... save to the live database from settings.py
В настоящее время вышеуказанный код сэкономит только в тестовой базе данных, которая была построена. Это очень ограничивает, потому что мое приложение имеет несколько параллельных процессов, работающих над базой данных - и моители моих модулей будут неполными (и бессвязными) без возможности накачать вещи на «живую» базу данных и увидеть, где они стоят после короткого сна.
Два потенциальных варианта, которые я могу подумать:
Подключите API Django, чтобы выяснить, как «вручную» подключиться к базе данных в настройках .py
Сделайте низкоуровневое соединение с базой данных «Live» и заполнить его вручную
Предыдущий является проблематичным, потому что это будет полагаться на вещи под публичным API Django. Последнее проблематично, потому что он предвидел API базы данных базы данных Agnostic Django и более интенсивен вручную.
Я благодарен за ваши мысли и вклад.
Брайан
Решение
Вы должны были бы определить свой собственный test_runner
tearDown
Методы, поскольку каждый тест работает в изоляции, а база данных очищается после каждого запуска. Вы можете сделать, то, что вы просите, просто создавая свой собственный test_runner
, Мы сделали это один раз (хотя это было не в команде) с базой данных, доступ к веб-сервисам, и в течение некоторого времени у нас не было никакого способа удалить что-либо оттуда, но вручную удалить всю базу данных; - ) Это было довольно весело.
Отвечая на ваш вопрос: создать свой собственный test_runner
и подготовьтесь создать свой собственный tearDown
Методы, в которых вы будете удалять объекты, которые вы создали. Вы должны как-то хранить там primary keys
, Таким образом, вы не будете удалять ничего из живой базы данных.
Однако, Я не думаю, что это хороший способ сделать. Запуск тестов на живую базу данных спрашивают себя на бедствие. Рано или поздно вы попадете в неприятности с этим. Вместо этого вы должны сделать, это выбросить вашу живую базу данных, подготовиться приспособления Из этих данных и используйте их в ваших тестах. Это хорошо задокументировано и легко сделать. Таким образом, у вас будет живая среда, не рискуя своими драгоценными данными, и вам не нужно писать свои собственные test_runner
. Отказ Это лучший и самый безопасный способ пойти на мой взгляд.