Файл кампании¶
Все разделы не являются обязательными.
Но вам нужен раздел prepare
или ammo
, так что Bombard выполнит несколько запросов.
Везде, где вы можете использовать выражения Python {}
как
repeat: "{args.repeat * 2}"
Аргументы командной строки доступны как args
в этих выражениях. Все переменные предложения - как глобальные.
Параметры HTTP¶
Все параметры HTTP, кроме URL, являются необязательными.
url: "{host}auth" # fully specified URL
method: POST # by default GET
body: # below is JSON object for request body
email: name@example.com
password: admin
headers:
json: # the same as Content-Type: "application/json"
Authorization: "Bearer {token}"
supply¶
Переменные, которые вы используете как {имя}
в своих запросах. Также вы можете (пере) определить эту переменную используя --supply
наподобие
bombard -s name=value,name2=value2
Также вы можете (пере) определить его из запросов.
Если в описании запроса есть раздел extract
, он (пере) определит переменную supply
с именем из этого раздела.
Раздел script
в запросе также может (пере) определять переменные.
Описание запроса¶
Вы используете это описание в разделах prepare
и ammo
, описанных ниже.
Каждый запрос должен иметь URL
и в принципе этого достаточно. Если вам нужно, вы можете добавить другие элементы, например:
getToken: # Name of request by your choice
repeat: "{args.repeat * 2}" # default - option --repeat
url: "{host}auth" # we use supply.base var
method: POST # by default GET
headers: json # shortcut for Content-Type: application/json
body: # JSON object for the request body
email: admin@example.com
password: admin
extract: # extract from request result and add to supply
token:
Bombard автоматически добавляет application/json
в http headers, если в запросе есть JSON body. Если вам нужно переопределить этот 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
var с именем name
со значением, извлеченным из ответа на запрос как ['extract']
.
extract:
name: extract
name2: extract2
Если extract
пусто, Bombard будет использовать name
, поэтому name:
совпадает с name: name
.
Также вы можете использовать любые пользовательские индексы, которые вы хотите, например
extract:
token: "['data']['JWT']" # place resp['data']['JWT'] to supply.token
поэтому name: ['name']
совпадает с name:
.
dry¶
Если вы запускаете Bombard с --dry
, он не делает реальных HTTP-запросов. И если у вас есть раздел dry
в запросе, Bombard будет использовать его как результат этого запроса dry
.
prepare¶
Если в файле кампании есть этот раздел, Bombard начнет стрелять по запросам из этого раздела.
Запросы в этом разделе могут запускать запросы из раздела ammo
, например:
prepare:
postsList: # Get ids from posts
url: "{host}posts"
script: |
for post in resp[:3]: # fire ammo.getPost for 1st three posts in the list
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
раз, как указано в командной строке (или по умолчанию для этой опции).
В противном случае бомбард будет запускать раздел prepare
, и после этого, если запросы prepare
не сработали ни одного запроса от ammo
, то бомбардировка будет запускать все запросы из ammo
.
Пример запроса ammo
для запроса, который вы видите в разделе prepare
:
ammo:
getPost:
url: "{host}posts/{id}" # use {host} from global supply and {id} in local supply just for this request - see script above