Файл кампании
Все разделы не являются обязательными.
Но вам нужен раздел prepare или ammo, так что Bombard выполнит несколько запросов.
Везде, где вы можете использовать выражения Python {}, например:
repeat: "{args.repeat * 2}"
Аргументы командной строки доступны как args в этих выражениях.
Все переменные supply доступны как глобальные.
Параметры HTTP
Все параметры HTTP, кроме URL, являются необязательными.
url: "{host}auth" # полностью указанный URL
method: POST # по умолчанию GET
body: # ниже JSON объект для тела запроса
email: name@example.com
password: admin
headers:
json: # то же самое, что и Content-Type: "application/json"
Authorization: "Bearer {token}"
supply
Переменные, которые вы используете как {name} в своих запросах.
Также вы можете (пере)определить эту переменную, используя --supply, например:
bombard -s name=value,name2=value2
Также вы можете (пере)определить их из запросов.
Если в описании запроса есть раздел extract, он (пере)определит переменную supply с именем из этого раздела.
Раздел script в запросе также может (пере)определять переменные.
Описание запроса
Вы используете эти описания в разделах prepare и ammo, описанных ниже.
Каждый запрос должен иметь URL, и в принципе этого достаточно.
Если вам нужно, вы можете добавить другие элементы, например:
getToken: # Имя запроса по вашему выбору
repeat: "{args.repeat * 2}" # по умолчанию - опция --repeat
url: "{host}auth" # мы используем переменную supply.base
method: POST # по умолчанию GET
headers: json # сокращение для Content-Type: application/json
body: # JSON объект для тела запроса
email: admin@example.com
password: admin
extract: # извлечь из результата запроса и добавить в supply
token:
Bombard автоматически добавляет application/json в headers, если в запросе указано тело JSON.
Если вам нужно другое значение Content-Type, просто добавьте его в раздел headers, и оно переопределит значение по умолчанию.
repeat
Переопределяет опцию командной строки --repeat. Количество повторений для запроса.
script
В запросе вы можете добавить раздел script с кодом Python3.
Он запускается после запроса.
Он может использовать объект supply и запускать запросы с функцией reload.
Определения запросов из раздела ammo доступны как ammo.request_name.
Ответ на запрос доступен в объекте resp.
В приведенном ниже примере мы запускаем запросы getPost из раздела ammo для первых трех постов, которые мы получаем в ответе:
for post in resp[:3]:
reload(ammo.getPost, id=post['id'])
Также вы можете поместить код Python в отдельный файл и использовать его следующим образом:
script: !include get_token.py
Если вы добавите эту строку, она проверяет все необходимые объекты, и вы можете использовать автозаполнение кода в вашей IDE:
from bombard.mock_globals import *; master('path/to/you/yaml')
extract
Вместо скрипта вы можете использовать раздел extract в запросе.
Он может содержать карту пар name: extract. Для каждой пары
Bombard будет (пере)определять переменную supply с именем name со
значением, извлеченным из ответа на запрос как ['extract'].
extract:
name: extract
name2: extract2
Если extract пусто, Bombard будет использовать name, поэтому
name: совпадает с name: name.
Также вы можете использовать любые пользовательские индексы, которые вы хотите, например
extract:
token: "['data']['JWT']" # поместить resp['data']['JWT'] в supply.token
поэтому name: ['name'] совпадает с name:.
dry
Если вы запускаете Bombard с --dry, он не делает реальных HTTP-запросов.
И если у вас есть раздел dry в запросе, Bombard будет использовать его как
результат этого dry запроса.
prepare
Если в файле кампании есть этот раздел, Bombard начнет выполнение с запросов из этого раздела.
Запросы в этом разделе могут запускать запросы из раздела ammo, например:
prepare:
postsList: # Получить идентификаторы постов
url: "{host}posts"
script: |
for post in resp[:3]: # запустить ammo.getPost для первых трех постов в списке
reload(ammo.getPost, id=post['id'])
Как вы видите выше, вы можете отправить некоторую переменную не только
глобальному supply, но и просто в запрос, который вы запускаете.
Если раздел prepare не запустил никаких запросов ammo, Bombard после
prepare запустит все запросы из раздела ammo.
Итак, если у вас есть только разделы extract в запросах prepare.
Или если scripts в запросах prepare не вызывают reload для запуска
запросов из ammo. Тогда Bombard запустит все запросы ammo
после запросов prepare.
ammo
Если в файле кампании нет раздела prepare, Bombard просто запустит все
запросы из этого раздела.
Каждый запрос будет повторяться --repeat раз, как указано в командной
строке (или по умолчанию для этой опции).
В противном случае Bombard запустит раздел prepare, и после этого, если
запросы prepare не запустили никаких запросов из ammo, Bombard запустит все
запросы из ammo.
Пример запроса ammo для запроса, который вы видите в разделе prepare:
ammo:
getPost:
url: "{host}posts/{id}" # использует {host} из глобального supply и {id} из локального supply только для этого запроса - см. скрипт выше