Понадобилось мне в один из вызовов вставить дату в следующем формате: yyyy-MM-ddThh:Amm:ssZ
Первый хинт - нельзя напрямую передавать ":", потому пользуемся URL escape code (http://www.december.com/html/spec/esccodes.html) - %3A.
Описанный в мануале способ не сработал (http://jakarta.apache.org/jmeter/usermanual/functions.html#__time) - изменённая строчка в jmeter.properties #time.USER1=yyyy-MM-ddTHH%3Amm%3Assz с последующим вызовом функции ${__time(USER1)}не сработала. Не сработало даже #time.USER1=yyyy-MM-dd.
Потому был найден обходной путь.
1. В наш любимый Config Element -> User Defined Variables помимо всего прочего добавляем переменную myTime.
2. К текущей Thread Group добавляем Sampler -> BeanShell Sampler, в теле скрипта которого пишем следующее:
Calendar cal=Calendar.getInstance();
int mm = cal.get(Calendar.MONTH);
mm = mm +1; //почему-то джава месяцы считает 0-11
String month = "";
if (mm<10)
{
month = "0" + String.valueOf(mm);
}
else
{
month =String.valueOf(mm);
}
String newTime = String.valueOf(cal.get(Calendar.YEAR)) + "-" + month + "-" + String.valueOf(cal.get(Calendar.DAY_OF_MONTH)) + "T" + String.valueOf(cal.get(Calendar.HOUR_OF_DAY)) + "%3A" + String.valueOf(cal.get(Calendar.MINUTE)) + "%3A" + String.valueOf(cal.get(Calendar.SECOND)) + "Z";
vars.put("myTime", newTime);
3. Тадам - вызываем нашу переменную {myTime} в нужном месте реквеста.
Небольшая поправка. Дата-то вычисляется, но, если число или месяц меньше 10, то дата получается без нолика.
То же самое относится и к часам, минутам и секундам.
Потому возникла необходимость написания функции.
О том, как это делается - следующий пост.
No comments:
Post a Comment