Генератор патронов из .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