Как запустить тест в Django с использованием производственных данных (только для чтения)? - PullRequest
0 голосов
/ 08 сентября 2018

Я хотел бы запустить тест в Django, но для запуска теста мне нужен доступ к данным из производственной базы данных (я не хочу настраивать совершенно новую базу данных для тестирования).

Как можно использовать эти данные из производственной базы данных, не разрешая запись в моем скрипте?Я не хочу, чтобы этот тест повлиял на что-либо, но мне нужен доступ к этим данным, чтобы запустить этот тест.Кажется смешным запускать (и оплачивать) совершенно новую базу данных, чтобы получить несколько строк данных, совет?

Ответы [ 3 ]

0 голосов
/ 08 сентября 2018

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

Если вы выполните хороший модульный тест, вы можете mock свои модели и протестировать функции, которые вы хотите протестировать. Я делаю это часто, когда хочу проверить метод.

Если вам нужно, вы можете создать некоторую служебную функцию, которая поможет вам настроить ситуацию, вам нужно создать модели и связанные с ними модели для построения среды, которую вы хотите протестировать.

0 голосов
/ 08 сентября 2018

Я согласен с другими, что это плохая идея по разным причинам.Если вы все равно хотите двигаться вперед, настройте отдельного пользователя базы данных с правами только для чтения.То, как вы это сделаете, зависит от сервера базы данных, который вы используете.

Дважды проверьте, действительно ли вы используете учетные данные пользователя, доступного только для чтения, в ваших тестах.

0 голосов
/ 08 сентября 2018

Я бы рекомендовал не делать этого. У вас не будет полного контроля над состоянием базы данных при выполнении тестов, и прохождение теста может зависеть от содержимого производственной базы данных. И будет невозможно проверить крайние случаи, прежде чем они произойдут. Не говоря уже о том, что если вы что-то напутаете, вы рискуете заполнить вашу производственную базу данных тестовыми данными или уничтожить записи из вашей производственной базы данных.

Django делает создание тестовых баз данных очень простым. При использовании команды python manage.py test [app_name] для вас будет создана тестовая база данных с теми же настройками, что и для вашей базы данных производства / разработки.

Чтобы получить эту функциональность, укажите документацию по тестированию Django:

Если ваши тесты основаны на доступе к базе данных, такой как создание или запрос моделей, обязательно создайте свои тестовые классы как подклассы django.test.TestCase, а не unittest.TestCase.

Подробнее о тестовой базе данных Django: https://docs.djangoproject.com/en/2.1/topics/testing/overview/#the-test-database

Что касается вашей заботы о поддержке тестовой базы данных, Django раскручивает базу данных до запуска тестов и уничтожает базу данных после их завершения. Тестовая база данных также создается на вашем локальном компьютере (при условии, что вы запускаете ее на своем локальном компьютере). Поэтому я не думаю, что цены должны быть проблемой.

Edit: При заполнении тестовой базы данных перед тестами:

1. Создание экземпляров в тесте до запуска логики теста. Они будут уничтожены после завершения теста. Пример: * 1 023 *

class Tester(TestCase):
    def test_works(self):
        instance = Model.create(data=data)
        # then run your test logic

или

2. Создание экземпляров в методе setUp тестового класса. Все в setUp будет (пере) создаваться перед каждым методом тестирования класса и уничтожаться после завершения каждого теста. Пример: * +1032 *

class Tester(TestCase):
    def setUp(self):
        self.instance = Model.create(data=data)

    def test_works(self):
        # run test logic with access to self.instance

или

3. Использование приборов для заполнения перед запуском тестов. Определите данные для некоторых экземпляров ваших моделей в каталоге fixtures в любом приложении, в котором вы тестируете (каталог, вероятно, нужно будет создать). Вы можете определить их в JSON или YAML, и я уверен, что другие форматы. Тогда в ваших тестах:

class Tester(TestCase):
    def setUp(self):
        fixtures = ['/myapp/fixtures/dump.json']

    def test_works(self):
        # test logic and you can access all the instances created from the data in dump.json

Подробнее о светильниках: https://django -testing-docs.readthedocs.io / en / latest / fixtures.html

Если вы хотите, чтобы в вашей тестовой базе данных были данные, аналогичные производственной базе данных, вы можете извлечь данные из производственной базы данных и сохранить их в фиксаторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...