Файл кампании
Все разделы не являются обязательными.
Но вам нужен раздел 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 только для этого запроса - см. скрипт выше