Как сделать django среду тестирования считанной из живой базы данных?

Я понимаю, что здесь существует подобный вопрос, но у этого есть другой подход: у Меня есть django приложение, которое делает запросы по данным, индексированным с djapian; я хотел бы записать модульные тесты на поисковый компонент этого приложения, и, очевидно, мне будут нужны django модуль настроек и все соединения с активной базой данных, таким образом, исполнитель тестов, который предоставляет django, будет казаться идеальным. однако, django среда тестирования создает фиктивную базу данных, и я не хотел бы вывести все свои данные к приспособлению и затем индексировать их (тесты возьмут навсегда!);

Мои данные не находятся в опасности, потому что тесты только читали бы из базы данных, таким образом, как это могло быть достигнуто?-I'm, новый в этой целой вещи поблочного тестирования, таким образом, решение записи нового исполнителя тестов я читал, в котором подобный вопрос не просвещает меня немного, по крайней мере, не без некоторых деталей

1
задан lfborjas 14 June 2010 в 00:43
поделиться

1 ответ

Читая тестовые примеры для djapian, я обнаружил кое-что действительно интересное: эти ребята используют метод setUp для класса TestCase: они создают объект, а затем используют метод обновления для индексатора, так что у них фактически есть документ для найдите и способ написания тестов контролируемых запросов! Для любопытных этот метод выглядит примерно так:

def setUp(self):
    p = Person.objects.create(name="Alex")

    for i in range(self.num_entries):
        Entry.objects.create(author=p, title="Entry with number %s" % i, text="foobar " * i)

    Entry.indexer.update()

Я думаю, это подойдет, но мы должны помнить, что я тестирую здесь небольшую поисковую систему, так что это решение может быть простым выходом; Однако я не могу возражать, поэтому, если у вас есть ответ, который поможет определить стратегию тестирования такого рода веб-приложений на Python в целом, это более чем приветствуется!

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

РЕДАКТИРОВАТЬ : Хорошо, чтобы быть верным решению для всех, кого это интересует, я столкнулся с другой проблемой: индекс xapian (как указано в комментарии). Чтобы решить эту проблему, я создал средство запуска тестов по умолчанию, которое изменило производственный индекс xapian на тестовый индекс (меньший, созданный с помощью сценария управления).Этот бегун довольно прост:

def custom_run_tests(test_labels, verbosity=1, interactive=True, extra_tests=[]):
    """Set the test indices"""
    settings.CATEGORY_CLASSIFIER_DATA = settings.TEST_CLASSIFIER_DATA    
    return run_tests(test_labels, verbosity, interactive, extra_tests)

И, чтобы использовать его, я просто добавил настройку:

TEST_RUNNER = 'search.tests.custom_run_tests'

Я отказался от вышеупомянутого подхода (создание документов в setUp) по соображениям производительности и удобочитаемости: для тестирования базы данных мне понадобился приличное количество документов с некоторым текстом (параграф или два), поэтому в итоге я создал приспособление для этого (я использовал команду управления, которая создавала документы в реальной базе данных, сериализовала их - записывала их в файл - а затем удаляла 'Эм). Итак, в конце концов, я вообще не читал из live db, а вместо этого использовал тестовые инструменты, созданные с помощью несколько хитроумного скрипта и настраиваемого бегуна, и это было не так уж сложно :)

2
ответ дан 2 September 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: