djmockserver
Данная программа представляет собой mock-сервер, разработанный на основе Django. Она предназначена для создания динамических и сложных mock-ответов.
В другом проекте автора используется open-source инструмент moco в качестве mock-сервиса. Однако moco не полностью удовлетворяет потребности в создании сложных динамических ответов в реальных приложениях, что требует дополнительной разработки и настройки. Для удовлетворения потребностей проекта была разработана эта программа.
Хотя она проста, она также практична. Подобно moco, данная программа использует файлы JSON для управления mock-данными и поддерживает многоуровневые каталоги для организации файлов. Поддерживаются протоколы HTTP и HTTPS.
Предлагается два способа установки:
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
pip install -r requirements.txt
.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']
python manage.py runserver
.Формат аналогичен формату moco и представляет собой список вложенных словарей. Конкретные поля описаны выше.
[
{
"description": "",
"request": {},
"response": {}
},
{
"description": "",
"request": {},
"response": {}
}
]
Можно сохранить несколько файлов для разных списков URI (в этом случае путь к файлу в конфигурации должен указывать на каталог, содержащий файлы).
Все строки, соответствующие синтаксису Python и находящиеся в белом списке (функции), могут быть выполнены.
Расширение функций (djmockserver\mock\extend_func\extend_functions.py
) — можно расширить, определив функции для использования в переменных и ответах.
Белый список функций (ADD_FUNC
) — для безопасности разрешены только встроенные функции Python. Если требуется использовать другие функции, их необходимо добавить в белый список.
djmockserver\mockdata\
---------- Совместно с функциями collection_get и переменной req можно извлечь данные запроса, обработать их и вернуть в качестве содержимого ответа.
В основном это будет полезно для разработчиков. Учитывая реальную разработку, host всегда настраивается глобально для общего использования, а uri отделяется. Большинство интерфейсов имеют предварительные интерфейсы и контекстные отношения.
Здесь необходимо использовать mock: либо настроить глобальный host на адрес mock, либо также сделать предварительный интерфейс mock. Либо добавить локальный host (адрес mock) в код переадресуемого интерфейса.
Очевидно, что оба метода не очень хороши. В этом случае переадресация запроса более уместна.
Достаточно настроить глобальный хост на адрес mock и настроить адрес переадресации в файле settings.py этой программы. Все запросы, которые не являются mock, будут переадресованы.
[Рисунок: переадресация запроса]
Дизайн кода недостаточно изящный, есть ещё много аспектов, которые следует рассмотреть, но основная задача выполнена.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )