1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/scu-zrb-djmockserver

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 12 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 22:13 2546a04

djmockserver

Введение

Данная программа представляет собой mock-сервер, разработанный на основе Django. Она предназначена для создания динамических и сложных mock-ответов.

В другом проекте автора используется open-source инструмент moco в качестве mock-сервиса. Однако moco не полностью удовлетворяет потребности в создании сложных динамических ответов в реальных приложениях, что требует дополнительной разработки и настройки. Для удовлетворения потребностей проекта была разработана эта программа.

Хотя она проста, она также практична. Подобно moco, данная программа использует файлы JSON для управления mock-данными и поддерживает многоуровневые каталоги для организации файлов. Поддерживаются протоколы HTTP и HTTPS.

Особенности

  1. Сохранение mock-данных в формате JSON (аналогично moco), поддержка как одного файла, так и многоуровневых каталогов для управления данными.
  2. Возможность настройки различных ответов для одного и того же URI в зависимости от содержания запроса.
  3. Динамическое обновление mock-данных без необходимости перезапуска сервера (перезапуск требуется при изменении или удалении mock-файлов).
  4. Поддержка выполнения строковых выражений Python с белым списком, для генерации динамических данных.
  5. Поддержка пользовательских функций для формирования ответных данных.
  6. Соответствие между mock-интерфейсами и реальными интерфейсами.
  7. Поддержка пересылки запросов к не-mock интерфейсам.

Архитектура программного обеспечения

djmockserver 架构图

Инструкция по установке

Предлагается два способа установки:

  • Сборка через Dockerfile.
  • Установка в среде разработки.

Сборка и развёртывание через Dockerfile

  1. Предполагается наличие готовой среды Docker (необходимо настроить самостоятельно).
  2. Скачайте файл Dockerfile из проекта или выполните git clone для загрузки проекта.
  3. Перейдите в каталог с файлом Dockerfile и выполните команды docker build -t mockserver . и docker run -d --name=ms1 --restart=always -p 替换为要访问的端口:80 mockserver.
Пример вывода:
[root@zrb mockserver]# docker build -t mockserver .
Sending build context to Docker daemon  3.584kB
Step 1/8 : FROM scuzrb/py3_dev:v1.0
 ---> 0917af555736
......
Step 8/8 : CMD ["uwsgi", "--ini", "uwsgi.ini"]
 ---> Running in 9d15e79bbc3c
Removing intermediate container 9d15e79bbc3c
 ---> 4920fa944331
Successfully built 4920fa944331
Successfully tagged mockserver:latest

[root@zrb mockserver]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
mockserver            latest              4920fa944331        16 seconds ago      526MB
scuzrb/py3_dev        v1.0                0917af555736        10 days ago         489MB

[root@zrb mockserver]# docker run -d --name=ms1 --restart=always -p 9000:80 mockserver
70054e2903fdad702407c2e16590b414b4cf6760729fcb281b12668a6aac8907
[root@rabbit-api-001 mockserver]# 

[root@zrb mockserver]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                  PORTS                                              NAMES
70054e2903fd        mockserver            "uwsgi --ini uwsgi.i…"   9 seconds ago       Up 8 seconds            0.0.0.0:9000->80/tcp                               ms1
  1. После успешного выполнения команд вы можете получить доступ к mock-серверу в браузере, используя IP-адрес и порт доступа. В результате будет выведено «text --> content». Сервер готов к использованию.
  2. Если необходимо добавить новые mock-интерфейсы или расширить функциональность, обратитесь к файлу Dockerfile для получения инструкций.

Установка в среде разработки

  1. Загрузите проект с помощью git clone.
  2. Переключитесь на корневой каталог проекта и выполните команду pip install -r requirements.txt.
  3. Настройте mock-данные, используя файлы с расширением .json. Вы можете использовать один файл или организовать данные в многоуровневую структуру каталогов.
  4. Измените конфигурацию в файле djmockserverproject/settings.py (путь к файлу должен быть указан):
#必填 mock数据文件路径,可以是单个文件,或文件夹
MOCK_FILE_PATH = os.path.join(BASE_DIR, 'djmockserver', 'mockdata')
# MOCK_FILE_PATH = os.path.join(BASE_DIR, 'mock.json')

# mock数据文件刷新间隔, 单位:秒
REFRESH_INTERVAL = 2

# 选填 设置后,mock在匹配请求失败时,会把请求转发到此地址, 否则返回404
# REMOTE_HOST = 'http://127.0.0.1:8000'

# 选填 设置函数白名单列表
ADD_FUNC = ['len', 'str']
  1. Запустите сервер с помощью команды python manage.py runserver.
  2. Для расширения функциональности с использованием сторонних библиотек можно реализовать поддержку протокола HTTPS.

Использование


Файлы mock

1. Поля, поддерживаемые в запросе (см. класс RequestSerializer):
  • uri: str
  • method: str
  • queries: dict
  • form/json: dict
  • body: str — содержимое, отличное от формата form и json, например текст, html, xml и т. д.
  • cookies: dict
  • description: str — описательный текст.
2. Поля, поддерживаемые в ответе (см. класс ResponseMaker):
  • status: int — код ответа.
  • headers: dict — заголовки.
  • vars: dict — установка локальных переменных, которые действуют в порядке убывания приоритета. Переменные выполняются перед ответом (text/json).
  • duration: int/float/str — время задержки запроса, в секундах.
  • text: str
  • json: dict — по умолчанию content-type равен application/json.
  • Текст и json исключают друг друга, при наличии обоих предпочтение отдаётся json.

Формат файла mock

Формат аналогичен формату moco и представляет собой список вложенных словарей. Конкретные поля описаны выше.

[
    {
        "description": "",
        "request": {},
        "response": {}
    },
    {
        "description": "",
        "request": {},
        "response": {}
    }
]

Можно сохранить несколько файлов для разных списков URI (в этом случае путь к файлу в конфигурации должен указывать на каталог, содержащий файлы).


Создание динамического ответа

Все строки, соответствующие синтаксису Python и находящиеся в белом списке (функции), могут быть выполнены.

1. Переменные
  • Разрешено использовать только переменные, определённые в response, и глобальные переменные, если они есть.
2. Ответ
  • Расширение функций (djmockserver\mock\extend_func\extend_functions.py) — можно расширить, определив функции для использования в переменных и ответах.

  • Белый список функций (ADD_FUNC) — для безопасности разрешены только встроенные функции Python. Если требуется использовать другие функции, их необходимо добавить в белый список.

3. Пример конфигурации mock
  • Путь: djmockserver\mockdata\

---------- Совместно с функциями collection_get и переменной req можно извлечь данные запроса, обработать их и вернуть в качестве содержимого ответа.


Переадресация запросов

В основном это будет полезно для разработчиков. Учитывая реальную разработку, host всегда настраивается глобально для общего использования, а uri отделяется. Большинство интерфейсов имеют предварительные интерфейсы и контекстные отношения.

Здесь необходимо использовать mock: либо настроить глобальный host на адрес mock, либо также сделать предварительный интерфейс mock. Либо добавить локальный host (адрес mock) в код переадресуемого интерфейса.

Очевидно, что оба метода не очень хороши. В этом случае переадресация запроса более уместна.

Достаточно настроить глобальный хост на адрес mock и настроить адрес переадресации в файле settings.py этой программы. Все запросы, которые не являются mock, будут переадресованы.

[Рисунок: переадресация запроса]

TODO

  1. Добавить страницу управления данными mock.
  2. Поддержка большего количества протоколов?

Заключение

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

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/scu-zrb-djmockserver.git
git@api.gitlife.ru:oschina-mirror/scu-zrb-djmockserver.git
oschina-mirror
scu-zrb-djmockserver
scu-zrb-djmockserver
master