Нагрузочное тестирование ПО

вторник, 9 декабря 2008 г.

Программирование динамического оператора

Описываемая техника применялась в работе с Web (http/html) протоколом в HP Load Runner.

Иногда может быть полезным не добавлять параметры в датапулы, увеличивая их количество и усложняя структуру, а генерировать данные внутри скрипта, меняя их от итерации к итерации. При этом необходимая часть оператора строится динамически в виде строки, в которую каждый раз вставляются обновленные данные. В примере, динамически меняющимися на каждой итерации данными, являются даты начала и конца периода (переменные day_start и day_stop меняются каждую итерацию), используемые для построения отчета. Пример приведен в качестве иллюстрации динамического конструирования операторов и перебирает дни в диапазоне только от 1 до 30.
Сконструированными частями оператора будут строковые переменные url и referer. Обе они включаются в состав оператора web_url.

Action()
{

static int dstart = 1, dstop = 1;
int i,j;
char tr_name[50],
url[512],
referer[512],
param[512],
host_name[128],
day_start[4],day_stop[4];
...

strcpy(host_name,lr_eval_string("{host}"));
itoa(dstart,day_start,10);
itoa(dstop,day_stop,10);

lr_message(host_name);
lr_message(" %s %s", day_start, day_stop);

....

strcpy(url,"URL=");
strcpy(referer,"Referer=");
strcpy(param,"https://");
strcat(param,host_name);
strcat(param,"/site/transactions/TransactionsReport?sortBy=0&sortName=fine&sortOrder=A");

lr_output_message(param);

strcat(param,"&dayFrom=");
strcat(param,day_start);
strcat(param,"&monthFrom=8&yearFrom=2005&dayTo=");
strcat(param,day_stop);
strcat(param,"&monthTo=1&yearTo=2006&dateType=delta&Status=S");

lr_output_message(param);

strcat(url,param);
strcat(referer,param);

lr_message(url);
lr_message(referer);

lr_start_transaction("Search transactions");

web_url("TransactionsReport",
url,
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t3.inf",
"Mode=HTML",
EXTRARES,
"Url=/site/images/big_s.gif", referer, ENDITEM,
"Url=/site/images/link_list_head.gif", referer, ENDITEM,
LAST);

lr_end_transaction("Search transactions", LR_AUTO);

dstart++;
dstop++;
if (dstart == 31)
{
dstart = 1;
dstop = 1;
}
....
return 0;
}

Практические аспекты нагрузочного тестирования

Начиная с этой статьи, будут публиковаться материалы по практическим вопросам нагрузочного тестирования. В основном это интересные с моей точки зрения решения тех или иных проблем, встреченных при работе над проектами. Подготовка к тестированию - это, как правило, разработка тестовых скриптов и сценариев. Поэтому первые статьи будут посвящены разработке скриптов с помощью инструмента нагрузочного тестирования HP Load Runner. Возможно что то из моего опыта пригодится кому то еще. При этом не вижу большого смысла «перепечатывать» главы из документации или из книг выпущенных компаниями HP (Mercury), так как каждый может ознакомиться с ними самостоятельно. Также уверен, что большинство проблем можно решать на основе стандартной документации и решений предлагаемых HP (Mercury), что и сам почти всегда стараюсь делать. Пока буду включать в блог все статьи, посвященные практике подряд, по мере их появления. Возможно это приведет к некоторой потере логической стройности, которой я старался придерживаться до сих пор. Впрочем блог это не книга, так что надеюсь на понимание:).