Файл кампании

Все разделы не являются обязательными.

Но вам нужен раздел 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