Генератор патронов из .har файлов в ammo.txt для yandex-tank.
- генерация патронов из HAR файла;
- фильтрация по домену (не генерирует патроны к внешним ресурсам);
- возможность заменять оригинальные cookies своими;
- возможность удалять все cookies;
- автоматическое тегирование патронов;
- установка собственных заголовков;
- конфигурирование с помощью
config.json
илиconfig.js
.
По умолчанию файл config.json
имеет следующий вид:
{
"autoTag": true,
"host": null,
"excludeHostRegexp": false,
"pathFilterRegexp": false,
"excludePathFilterRegexp": false,
"clearCookies": false,
"customCookies": false,
"replaceDateInURL": false,
"repeat": 0,
"customHeaders": [{
"name": "User-Agent",
"value": "yandex-tank yandex-tank/har2ammo"
}]
}
По умолчанию файл config.js
имеет следующий вид:
module.exports = {
"autoTag": true,
"host": null,
"excludeHostRegexp": false,
"pathFilterRegexp": false,
"excludePathFilterRegexp": false,
"clearCookies": false,
"customCookies": false,
"replaceDateInURL": false,
"repeat": 0,
"customHeaders": [{
"name": "User-Agent",
"value": "yandex-tank yandex-tank/har2ammo"
}],
"replaceData": {
headers: false,
content: false,
cookies: false,
every: false,
tags: false,
url: false
}
};
где:
autoTag
- включить автоматическое тегирование патронов, возможные варианты -true
|false
. В качестве тега используется относительный путь к цели. Важно - все знаки «точка» в тегах по умолчанию заменяются на знак нижнее подчеркивание_
.host
- имя хоста (мишени), запросы на другие хосты в ленту не попадут, возможные варианты - строка (youdomain.com
) или регулярное выражение, запросы на который, фильтр не будет блокировать |false
- выключает фильтрацию |null
- в качестве базового хоста будет использоваться домен, к которому был первый запрос вhar
файле;excludeHostRegexp
- имя хоста (мишени), запросы на другие хосты в ленту не попадут, возможные варианты - строка (youdomain.com
) или регулярное выражение, запросы на который, фильтр будет блокировать |false
- выключает фильтрацию;pathFilterRegexp
- регулярное выражение для фильтрации запросов поpath
, не прошедшие фильтр запросы в ленту не попадут, возможные варианты -false
|string
. Например,"^\/api\/(user|config)"
- оставит только запросы, начинающиеся с/api/user
или/api/config
;excludePathFilterRegexp
- регулярное выражение для фильтрации запросов поpath
, прошедшие фильтр запросы в ленту не попадут, возможные варианты -false
|string
. Например,"^\/api\/(user|config)"
- исключит все запросы, начинающиеся с/api/user
или/api/config
;clearCookies
- удаляет любые cookies из запросов;customCookies
- позволяет использовать собственные cookies, возможные варианты -string
|array
. В случаи, когда передается срока - она будет использована во всех запросах. В случаи, когда используется массив - то для каждого элемента массива, будет сгенерирована своя лента и в результате они будет сшиты в конечную ленту.replaceDateInURL
- позволяет заменять в запросах dateStamp на актуальный, возможные варианты -true
|false
|string
.false
- не заменяет дату,true
заменяет на текущую,string
- подставляет указанное значение.repeat
- повторяет генерацию ленты N раз, позволяет увеличить размер ленты за счет многократного ее создания.customHeaders
- массив объектов, которые заменят или добавят новые заголовки.replaceData
- объект, позволяющий модифицировать патроны (добавлять, удалять или менять в нем любые данные).
В самом простом случаи достаточно:
har2ammo -i test.har -o ammo.txt
Для более тонкой настройки - рекомендую воспользоваться файлом конфигурации config.json
:
har2ammo -c config.json -i test.har -o ammo.txt
Внимание использование секции replaceData
возможно только в коняги файлах с расширением .js
В объекте replaceData
используются следующие атрибуты:
headers
- секция правил, позволяющая модифицировать заголовки запросаcontent
- секция правил, позволяющая модифицировать содержимое POST запросаcookies
- секция правил, позволяющая модифицировать cookiestag
- секция правил, позволяющая модифицировать метки патроновurl
- секция правил, позволяющая модифицировать URL (GET запросы)every
- секция правил, позволяющая модифицировать любую часть патрона, работает глобально, выполняется перед каждым предыдущими правилам.
Каждая из секций может принимать объект или массив объектов с настройками:
‘replaceData’: {
tags: {
match: ‘_html’,
data: ‘.html’
}
}
или
‘replaceData’: {
tags: [{
match: ‘_index_’,
data: ‘INDEX-‘
}, {
match: ‘_post_’,
data: ‘POST-‘
}]
}
match
- может быть строкой или regexp
data
- может быть строкой или функцией, возвращающей строку
Конфигурирование каждой из секции возможно двумя способами.
‘replaceData’: {
tags: {
match: ‘_html’,
data: ‘.html’
}
}
В данном случаи мы ищем все совпадения в тегах по тексту _html
и заменяем его на .html
Это самый простой способ заменить данные или удалить (если в атрибут data передать пустую строку).
‘replaceData’: {
headers: {
match: ‘Macintosh’,
data: function (data, libs) {
return ‘Windows ‘ + libs._.VERSION;
}
}
}
В данном случаи мы ищем все совпадения в заголовках по тексту Macintosh
и заменяем его на Windows 3.4.0
.
Обратите внимание на аргументы data
и libs
, передаваемые в функцию.
data
- это полная строка, которая подходит под правило «match».
libs
- это объект с библиотеками, помогающими модифицировать запросы. Какие библиотеки доступны, можно посмотреть далее в документации.
Больше примеров конфигурационный файлов можно найти в папке examplesConfigs
текущего проекта
Для работы har2ammo
требуются nodejs и npm.
Установка:
npm install -g har2ammo