Команда testserver

Команда testserver применяется для запуска легковесного тестового сервера Django, который предварительно загружает указанные фикстуры в тестовую базу данных. Это позволяет разработчикам быстро проверить работу приложения с заранее подготовленными тестовыми данными, не затрагивая основную базу. Команда полезна для отладки, демонстрации функционала или проверки корректности работы интерфейса в изолированной среде.

Основное отличие testserver от стандартной команды runserver заключается в том, что она создает временную тестовую базу данных, загружает в нее указанные фикстуры и запускает сервер. После остановки сервера тестовая база данных удаляется, что гарантирует чистоту эксперимента.

Синтаксис

bashpython manage.py testserver [fixture1 fixture2 ...] [options]

Где fixture1 fixture2 ... - имена файлов фикстур (с расширением .json, .yaml или .xml), которые необходимо загрузить. Если фикстуры не указаны, команда запустит сервер без загрузки данных.

Параметры

Команда поддерживает стандартные опции Django, такие как --noinput для автоматического подтверждения действий, --verbosity для управления уровнем детализации вывода, --settings для указания файла настроек и другие. Также доступны параметры для управления адресом и портом сервера.

Пример . Фикстура

Для работы команды необходимо подготовить файл фикстуры в формате JSON. Рассмотрим пример фикстуры для модели Article:

json[
  {
    "model": "myapp.article",
    "pk": 1,
    "fields": {
      "title": "First article",
      "content": "Content of the first article",
      "status": "published",
      "created_at": "2026-01-01T10:00:00Z"
    }
  },
  {
    "model": "myapp.article",
    "pk": 2,
    "fields": {
      "title": "Second article",
      "content": "Content of the second article",
      "status": "draft",
      "created_at": "2026-01-02T12:00:00Z"
    }
  }
]

Такую фикстуру можно сохранить в файл articles.json в директории fixtures вашего приложения.

Пример . Запуск

Запустим тестовый сервер с загрузкой фикстуры из файла articles.json:

bashpython manage.py testserver articles.json

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

bash"Creating test database for alias 'default'..."
"Installing custom SQL..."
"Installing indexes..."
"Loaded 2 articles from fixtures."
"Starting development server at http://127.0.0.1:8000/"
"Quit the server with CONTROL-C."

Пример . С несколькими фикстурами

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

bashpython manage.py testserver categories.json articles.json comments.json

Пример . С указанием порта

Команда позволяет указать адрес и порт для запуска сервера, аналогично команде runserver:

bashpython manage.py testserver articles.json 8080

Или с указанием адреса:

bashpython manage.py testserver articles.json 0.0.0.0:9000

Пример . С опцией --noinput

Опция --noinput позволяет автоматически подтвердить все предупреждения без интерактивного ввода. Это полезно при автоматизации:

bashpython manage.py testserver articles.json --noinput

Практический пример

Рассмотрим ситуацию, когда необходимо проверить работу API с тестовыми данными. Создадим фикстуру для модели Category и Article:

json[
  {
    "model": "myapp.category",
    "pk": 1,
    "fields": {
      "name": "Technology",
      "slug": "technology"
    }
  },
  {
    "model": "myapp.article",
    "pk": 1,
    "fields": {
      "title": "Django testserver guide",
      "content": "Full guide about testserver command",
      "category": 1,
      "status": "published",
      "created_at": "2026-09-01T09:00:00Z"
    }
  }
]

Затем запускаем сервер и проверяем работу приложения:

bashpython manage.py testserver fixtures/initial_data.json --verbosity=2

После запуска можно открыть браузер и перейти на http://127.0.0.1:8000, чтобы увидеть приложение в действии с загруженными тестовыми данными.

Смотрите также

  • команда runserver,
    которая запускает стандартный сервер разработки
  • команда test,
    которая запускает тесты Django-проекта
  • команда dumpdata,
    которая создает фикстуры из данных базы данных
  • команда loaddata,
    которая загружает фикстуры в основную базу данных