Как мне протестировать сайт Django, который использует UDFs в базе данных?

#django #postgresql #django-unittest

#django #postgresql #django-unittest

Вопрос:

У меня есть проект django, который использует postgres db с несколькими UDFS. UDFS написаны на plpythonu. Поскольку plpyhtonu является ненадежным языком, только суперпользователи базы данных могут использовать его для создания UDFS. Это создает серьезную проблему, поскольку у меня нет возможности программно создать их в наборе тестов. Прямо сейчас я вижу два варианта:

  1. Измените django.db.backends.creation._create_test_db для создания тестовой базы данных из шаблона, в который уже загружены мои UDFS. Это кажется хакерским и трудоемким в обслуживании.
  2. Создайте суперпользователя с аутентификацией MD5 и загрузите UDFS в набор тестов с помощью psycopg2. Это кажется небезопасным.

Есть ли менее ужасные способы, которыми я могу это сделать?

Спасибо.

Ответ №1:

Я не знаю модель PG UDF, только MySQL и SQLite. Несколько других обходных путей могут быть:

  1. Создайте экземпляр PG, который вы используете только для тестирования, изолированный, чтобы потенциальные проблемы безопасности не вызывали беспокойства. В конце концов, базы данных дешевы.
  2. Если UDFS просты (или размер тестовых данных делает их простыми), воссоздайте их в SQLite и используйте эту базу данных для тестирования. Это предполагает, что вам не нужно тестировать функциональность plpython как часть проекта.
  3. Если функциональность UDF намного более стабильна, чем в остальной части проекта, тогда разделите код UDF на его собственный подпроект, а для остальной части кода предположите, что UDFS будет присутствовать. По крайней мере, это позволит автоматизировать большую часть кода, и только UDF-код нуждается в ручном вмешательстве для указания пароля.

Ответ №2:

Я выбрал # 1. Это не идеально, но работает нормально.