Сделайте тесты подразделения в базе данных «Live» в настройках .py при использовании Django 'Manage.py Test'

StackOverflow https://stackoverflow.com/questions/2381755

Вопрос

Если у вас есть настройка базы данных в 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

В настоящее время вышеуказанный код сэкономит только в тестовой базе данных, которая была построена. Это очень ограничивает, потому что мое приложение имеет несколько параллельных процессов, работающих над базой данных - и моители моих модулей будут неполными (и бессвязными) без возможности накачать вещи на «живую» базу данных и увидеть, где они стоят после короткого сна.

Два потенциальных варианта, которые я могу подумать:

  1. Подключите API Django, чтобы выяснить, как «вручную» подключиться к базе данных в настройках .py

  2. Сделайте низкоуровневое соединение с базой данных «Live» и заполнить его вручную

Предыдущий является проблематичным, потому что это будет полагаться на вещи под публичным API Django. Последнее проблематично, потому что он предвидел API базы данных базы данных Agnostic Django и более интенсивен вручную.

Я благодарен за ваши мысли и вклад.

Брайан

Это было полезно?

Решение

Вы должны были бы определить свой собственный test_runner tearDown Методы, поскольку каждый тест работает в изоляции, а база данных очищается после каждого запуска. Вы можете сделать, то, что вы просите, просто создавая свой собственный test_runner, Мы сделали это один раз (хотя это было не в команде) с базой данных, доступ к веб-сервисам, и в течение некоторого времени у нас не было никакого способа удалить что-либо оттуда, но вручную удалить всю базу данных; - ) Это было довольно весело.

Отвечая на ваш вопрос: создать свой собственный test_runner и подготовьтесь создать свой собственный tearDown Методы, в которых вы будете удалять объекты, которые вы создали. Вы должны как-то хранить там primary keys, Таким образом, вы не будете удалять ничего из живой базы данных.

Однако, Я не думаю, что это хороший способ сделать. Запуск тестов на живую базу данных спрашивают себя на бедствие. Рано или поздно вы попадете в неприятности с этим. Вместо этого вы должны сделать, это выбросить вашу живую базу данных, подготовиться приспособления Из этих данных и используйте их в ваших тестах. Это хорошо задокументировано и легко сделать. Таким образом, у вас будет живая среда, не рискуя своими драгоценными данными, и вам не нужно писать свои собственные test_runner. Отказ Это лучший и самый безопасный способ пойти на мой взгляд.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top