Django - тестирование с использованием больших таблиц статических данных - PullRequest
4 голосов
/ 17 мая 2010

Я использую «manage.py test» вместе с прибором JSON, который я создал с помощью «dumpdata»

Моя проблема в том, что несколько таблиц в приборе очень велики (например, одна содержит названия всех городов США), что делает запуск теста невероятно медленным.

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

Есть ли лучший способ протестировать этот код с использованием данных такого типа?

Ответы [ 2 ]

1 голос
/ 29 мая 2010

Это было мое решение:

class xxxx(TestCase):
    def setUp(self):
        import _mysql
        db=_mysql.connect('xxxx', 'xxxx', 'xxxx', "test_xxxxxxx")
        db.query(open('sql/xxxxxx.sql').read())

Файл sql представлял собой последовательность операторов вставки, которые я экспортировал с помощью phpMyAdmin. Чтение SQL-операторов намного быстрее, чем импорт JSON или YAML-данных. Это, конечно, не самое элегантное решение, но оно сработало.

Согласно третьему ответу в Загрузка дампа SQL перед запуском тестов Django , вам просто нужно сбросить этот файл sql в каталог 'sql' внутри каталога приложения. Это сработало для производственной базы данных при выполнении manage.py syncdb, но по какой-то причине эти данные фактически не импортировались в тестовую базу данных при выполнении manage.py test, даже если в строке «Установка пользовательского SQL Модель xxxx.xxxx 'появилась на выходе. Итак, я написал свой собственный код внутри setUp ()

0 голосов
/ 18 мая 2010

Вы должны проверить нос рамки. Похоже, у вас больше контроля над тем, когда вы загружаете тестовые приборы и когда вы разрываетесь:

"nose supports fixtures at the package, module, class, and test case level, so expensive initialization can be done as infrequently as possible. See Fixtures for more."

Более того, похоже, что для носа есть плагины django: в Google

Надеюсь, это поможет.

...