четверг, 3 марта 2016 г.

Jmeter, BeanShell PreProcessor variables from CSV

Столкнулась с проблемой подсчитывать secretkey для API запросов (активно использую в API тестах), публикую решение, вдруг кому пригодиться ну и вообще в памяти закрепить.
Дано: URL+параметры, которые хотелось бы конечно не вбивать каждый раз вручную в штук 30 запросов, а брать из файла и (просто в запрос параметры из файла запихнуть в принципе несложно) эти же параметры в пре-процессоре обработать и, получив в процессе обработки еще один, засунуть его в запрос.
Пример:
http://server.com/api/merchant/addnewhero?name=Cordelia&surname=Naismith&rank=captain&secretkey=c6c410ad1cf0a622b335e4a958d7faf1bb384aaa2d3c79ba7036fc47d59882cd
где secretKey это SHA-256 от слепленной в строку параметров: "name"+ "surname" + "rank" + "personalCode" (где personalCode - секретный код, который не фигурирует в строке запроса).

И вот мы подготовили csv файл где параметры перечислены через запятую:
Cordelia,Naismith,captain
Добавили, как обычно, CSV Data Set Config и указали параметры:
Теперь нам нужно подсчитать secretkey исходя из параметров, лежащих в файле. Т.е. нам нужно взять из файла name, surname и rank (причем в том же порядке, как они вычитываются когда кладутся в строку запроса), слепить из них и personalCode строку, от нее взять SHA-256 и вернуть полученное значение в secretKey в строку запроса.
В пре-процессинге нам конечно поможет BeanShell PreProcessor, но придется написать скрипт:
import org.apache.commons.codec.digest.DigestUtils; //импорт библиотеки для подсчета SHA256

var name="${name}";
var surname="${surname}";
var rank="${rank}";
log.info(name); //для проверки правильно ли вычитались переменные
log.info(surname);
log.info(rank);
String combined = name+surname+rank+"therealhero"; //слепили параметры в строку + наш personalCode, 
//который статичный и равен строке "therealhero"
var secretkey= DigestUtils.sha256Hex(combined); //подсчет SHA256
vars.put("secretkey",secretkey); //положили поулченный резельтат в переменную, к которой можно будет обратиться из Sampler'а
log.info(secretkey); //вывод в лог полученного параметра
Теперь осталось запустить тест и тадам! - в нашем запросе все нужные параметры:
P.S. я не описывала подробно добавление всех элементов, подразумевая что это уже известно, но если вдруг вы новичок и у вас возникли вопросы Что, черт возьми, тут делается?! - пожалуйста, не стесняйтесь спрашивать, я предоставлю более подробную информацию.