Thursday, July 14, 2011

Jmeter. Борьба с кастомным форматом даты/времени.

Понадобилось мне в один из вызовов вставить дату в следующем формате: 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