loadrunner 12.53 使用方法

来源:互联网 发布:node网络服务器搭建 编辑:程序博客网 时间:2024/06/06 06:59
/*********************************************************************************************/
loadrunner 12.53 使用方法
/*********************************************************************************************/


一 环境设置
1 软件安装在 C:\Program Files (x86)\HP\LoadRunner 目录


2 在控制面板中设置JAVA 添加 the Exception Site List


a. 打开控制面板.
b. Search for Java, and double-click Java (32-bit) or Java 64-bit. The Java Control Panel opens.


c. Click the Security tab and click Edit Site List. Click Add and enter http://127.0.0.1:9080. Click
Continue to approve the address. Approve any warnings.


d. Repeat the above step and enter http://localhost:9080.


3 关闭杀毒软件(否则 脚本中会加入和 DUBA 有关的内容)


二 相关程序


1 LoadRunner:
11.0:
"C:\Program Files (x86)\HP\LoadRunner\bin\LRLauncherApp.exe"


12.53:
"C:\Program Files (x86)\HP\LoadRunner\bin\VuGen.exe"


2 LoadRunner Agent Process:
"C:\Program Files (x86)\HP\LoadRunner\launch_service\bin\magentproc.exe"


3 Start Web Server:


C:\Program Files (x86)\HP\LoadRunner\WebTours\StartServer.bat"


三 启动 WEB 服务器 (端口改为了9080 C:\Program Files (x86)\HP\LoadRunner\WebTours\conf\httpd.conf)
#Listen 12.34.56.78:80
Listen 9080




1 启动 LoadRunner Agent Process
"C:\Program Files (x86)\HP\LoadRunner\launch_service\bin\magentproc.exe"


2 Start Web Server
"C:\Program Files (x86)\HP\LoadRunner\WebTours\StartServer.bat"




四 创建脚本 
1 录制 record
1) Start Recording 选项
录制到操作:    Action
要录制的程序:  Microsoft Internet Explorer(此处要选 C:\Program Files (x86)\Internet Explorer\iexplore.exe,否则会使用其他浏览器,发生错误 )
URL地址:       http://localhost:9080/WebTours/
工作目录:      C:\Program Files (x86)\HP\LoadRunner\Bin


2 回放 replay
1) 运行时设置 runtime settings
a: 一般设置 general


运行逻辑:重复次数 Run Logic : Number of iterations
步      :2次重复间的等待时间 Pacing:   Start new iteration after the previous iteration ends,with fixed delay of 5 seconds
思考时间:用户在各步骤间思考的时间        Think Time:Ignore think time
日志    :希望在回放期间收集的信息的级别 Log: Log Options
            Send messages: always
    Detail Level: Standard log


b: 特殊设置


3 关联动态值 correlate the dynamic values
Design > Design Studio./Correlate.


4 增强
1) 定制事务
a: 确定脚本的起点和终点:Search Flights Button,reservations.pl_2
b: 在Steps Tooolbox 中选择lr_start_transaction,lr_end_transaction,双击输入事务名称


2) 参数化
View > Step Navigator/ 
Submit Form: reservations.pl step./ 
Right-click the Submit Form: reservations.pl step and select Show Arguments/
Change the fixed value to a varying value./
The Select or Create Parameter dialog box opens./
In the Parameter name box, type seat./
Click the Parameter icon adjacent to {seat} and select Parameter Properties/
Click Add Row. VuGen adds a row to the table./






3)内容检查
a:Text check
web_reg_find("Text=Find Flight",LAST);


web_reg_find("Text=Web Tours", LAST);


b:Image check


4) 如何生成调试信息
lr_output_message("The flight was booked");


5) 测试是否成功?
a:启用图像检查


4 设置负载


五 创建负载测试场景 Controller


六 如何生成重负载 Load Generator
Load Generator 是通过运行 Vuser 在应用程序中生成负载的计算机。可以使用多个
Load Generator,并在每个 Load Generator 上运行多个 Vuser。运行场景时,Controller
自动连接到 Load Generator。


七 运行负载测试场
1 开始场景
2 利用 Controller 的联机图监控性能。
1)“正在运行 Vuser - 整个场景”图。
2) “事务响应时间 - 整个场景”图。
3)“每秒点击次数 - 整个场景”图
4) “Windows 资源”图。


八 分析场景结果 Analysis


九  设置 HP Web Tours,让其出现回放错误
 要演示常见的回放错误,您需要修改 HP Web Tours 应用程序中的设置。此设置
告诉 HP Web Tours Web 服务器不允许出现重复的会话 ID。
1 打开 HP Web Tours。
选择开始 > 程序 > HP LoadRunner > Samples > Web > HP Web Tours 应用
程序。浏览器将打开 HP Web Tours 的主页。


2 更改服务器选项。
a 单击 HP Web Tours 主页上的 administration (管理)链接。将打开
administration (管理)页面。
b 选择具有以下标题的复选框:Set LOGIN form's action tag to an error page.
(将 LOGIN 表单的操作标记设置为错误页面。)向下滚动到页面底部并单击
Update (更新)。
c 向下滚动到页面底部并单击 Return to the Web Tours Homepage (返回到
Web Tours 主页)链接。
此设置告诉服务器不允许出现重复的会话 ID。
3 关闭浏览器。




十 关联动态值 correlate the dynamic values


Design > Design Studio./Correlate.


十一 相关参数文件
1 城市名称
Departure City / Arrival City 
 
Denver
Frankfurt
London
Los Angeles
Paris
Portland
San Francisco
Seattle
Sydney
Zurich


2 座位 位置
Seating Preference : Aisle / Window  /None


3 机票类型
Type of Seat : First /Business /Coach


 


/****************************************************************************************************/
语法
/****************************************************************************************************/


1 显示 整数型数据和字符串数据
Message Formatting
Character      Argument Type      Printed As
d,i             int   decimal number
s char *   print characters until either `\0' or the number of characters given in the precision is reached




lr_output_message("min_cost %d", atoi(min_cost));
lr_output_message("min_no %s",min_no);


lr_log_message("----------------------------------------------");


lr_output_message("username :%s",lr_eval_string("{username}"));
lr_output_message("depart  :%s",lr_eval_string("{depart}"));
lr_output_message("arrive :%s",lr_eval_string("{arrive}"));
lr_output_message("numPassenger :%s",lr_eval_string("{numPassenger}"));
lr_output_message("seatPref :%s",lr_eval_string("{seatPref}"));
lr_output_message("seattype :%s",lr_eval_string("{seattype}"));
lr_output_message("outboundFlight :%s",lr_eval_string("{outboundFlight}"));
 
lr_log_message("order flight success");
lr_log_message("----------------------------------------------");


2 拼接字符串
flightstring=flightitem;
strcat(flightstring,";");
strcat(flightstring,flightfee);
strcat(flightstring,";");
strcat(flightstring,lr_eval_string("{departDate}"));


3 字符串转换成整数
i =atoi(lr_eval_string("{flightcost_count}"))


4 FOR 循环
for(i=2;i<=atoi(lr_eval_string("{flightcost_count}"));i++)
{  
   lr_save_int( i,"no" );

   lr_save_string(lr_eval_string(lr_eval_string("{flightcost_{no}}")),  "flightfee" );
   lr_save_string(lr_eval_string(lr_eval_string("{flightnum_{no}}")),  "flightitem" );
   
   temp_cost=lr_eval_string("{flightfee}");
   temp_no=(lr_eval_string("{flightitem}"));
   
   if (atoi(temp_cost)< atoi(min_cost))
   {
    min_cost=temp_cost;
    min_no=temp_no;
   }



 
5 循环输出关联数组 
1) 变量返回值个数  : 变量名_count
web_reg_save_param_ex(
"ParamName=flightcost",
"LB=\"center\">$ ",
"RB=</TD>",
"Ordinal=All",
SEARCH_FILTERS,
LAST);


web_reg_save_param_ex,将Ord参数值设定为ALL,则关联函数将自动把符合条件的关联值保存到参数数组里。
在本例中,假设关联值返回四条记录,则LR分别将值保存到flightcost_1,flightcost_2,flightcost_3,flightcost_4中
,同时,LR还将自动创建一个flightcost_count变量来保存总的记录数,在这里flightcost_count值等于4。


2)参数的左右边界:
打开 web_submit_form("reservations.pl" 步骤的 REPLAY 的http data 页 RESPOSE 查看下列代码:


要提取 航班整个信息outboundFlight 字符串 010;559;05/23/2017
左边界为 "outboundFlight" value="
右边界为 " checked="


要提取 航班号 字符串 010 
左边界为 "outboundFlight" value="
右边界为 ;


要提取 航班价格 字符串 559
左边界为 "center">$
右边界为 </TD>


response :
<input type="radio" name="outboundFlight" value="010;559;05/23/2017" checked="checked" >Blue Sky Air 010<td align="center">8am<td align="center">$ 559</TD>




2) 循环输出关联到的数组方法二
testi=atoi(lr_eval_string("{flightcost_count}")); 
for(i=1;i<=testi;i++)
{

lr_save_int( testi,"itest" );
contactIDLastL=lr_eval_string("{flightcost_{itest}}");//char* contactIDLastL
lr_output_message("contactIDLast=%s",lr_eval_string(contactIDLastL));

}






6 变量值
min_no=lr_eval_string("{flightnum_1}");
min_cost=lr_eval_string("{flightcost_1}"); 


7 将字符串赋予变量
lr_save_string(lr_eval_string(lr_eval_string("{flightcost_{no}}")),  "flightfee" );
lr_save_string(lr_eval_string(lr_eval_string("{flightnum_{no}}")),  "flightitem" );


8 将整数赋予变量
lr_save_int( i,"no" );




9 WHILE 循环
         //为了实现上面FOR循环相同效果,这里略复杂点,用到了 && 运算
 
        i=1;
         while ((i <= 10) && (whileloop ==1)) 
                {
                 lr_output_message( "WHILE FOR循环次数:%d", i);
                i++;
                } 


10 DO WHILE 循环
 
        //为了实现上面FOR循环相同效果,这里略复杂点,用到了 && 运算 
        i=1;
         do {
                 lr_output_message( "DO WHILE 循环次数:%d", i);
                 i++;
                 } 
        while (i <= 10) ;


11 if
1) 判断相等
if (mode==4){
flightitem=lr_eval_string("{flightnum_4}");
flightfee=lr_eval_string("{flightcost_4}");
}


2) 判断小于 
   if (atoi(temp_cost)< atoi(min_cost))
   {
    min_cost=temp_cost;
    min_no=temp_no;
   }


/*********************************************************************************/
附 代码
/*********************************************************************************/
Action()
{
int i;
char* flightitem ; 
char* flightfee;
char* flightstring;

char* min_cost  ;
char* temp_cost ;
char* min_no ;
char* temp_no ;
 
int mode;
//0 min cost
//1 fisrt flight
//2 second flight
//3 third flight
//4 forth flight
mode=0;

/*Correlation comment - Do not change!  Original value='121137.233778858zcDAQQzptzcfDHDifpQHiHHf' Name ='userSession' Type ='ResponseBased'*/
lr_start_transaction("step1_login");
web_reg_save_param_ex(
"ParamName=userSession",
"LB=name=\"userSession\" value=\"",
"RB=\"/>\n<table border",
SEARCH_FILTERS,
"Scope=Body",
"IgnoreRedirections=No",
"RequestUrl=*/nav.pl*",
LAST);


web_url("WebTours", 
"URL=http://localhost:9080/WebTours/", 
"Resource=0", 
"RecContentType=text/html", 
"Referer=", 
"Snapshot=t1.inf", 
"Mode=HTML", 
LAST);


/* Request with GET method to URL "http://bho.xl7.xunlei.com/platform/2.6.x.xxxx/config.xml" failed during recording. Server response : 404*/


/* Request with GET method to URL "http://localhost:9080/favicon.ico" failed during recording. Server response : 404*/


lr_think_time(4);


web_submit_data("login.pl",
"Action=http://localhost:9080/cgi-bin/login.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://localhost:9080/cgi-bin/nav.pl?in=home",
"Snapshot=t3.inf",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value={userSession}", ENDITEM,
"Name=username", "Value={username}", ENDITEM,
"Name=password", "Value={password}", ENDITEM,
"Name=JSFormSubmit", "Value=on", ENDITEM,
"Name=login.x", "Value=49", ENDITEM,
"Name=login.y", "Value=4", ENDITEM,
LAST);

lr_end_transaction("step1_login", LR_AUTO);
lr_start_transaction("step2_seach_flight");


web_image("Search Flights Button", 
"Alt=Search Flights Button", 
"Snapshot=t4.inf", 
LAST);


lr_think_time(11);


/*Correlation comment - Do not change!  Original value='922;256;05/23/2017' Name ='outboundFlight' Type ='ResponseBased'*/
//flight string
 


web_reg_save_param_ex(
"ParamName=outboundFlight",
"LB=\"outboundFlight\" value=\"",
"RB= checked=\"",
"Ordinal=All",
SEARCH_FILTERS,
LAST);


 
//flight num 
web_reg_save_param_ex(
"ParamName=flightnum",
"LB=\"outboundFlight\" value=\"",
"RB=;",
"Ordinal=All",
SEARCH_FILTERS,
LAST);


//flight cost
web_reg_save_param_ex(
"ParamName=flightcost",
"LB=\"center\">$ ",
"RB=</TD>",
"Ordinal=All",
SEARCH_FILTERS,
LAST);


web_submit_form("reservations.pl",
"Snapshot=t5.inf",
ITEMDATA,
"Name=depart", "Value={depart}", ENDITEM,
"Name=departDate", "Value={departDate}", ENDITEM,
"Name=arrive", "Value={arrive}", ENDITEM,
"Name=returnDate", "Value=05/24/2017", ENDITEM,
"Name=numPassengers", "Value={numPassenger}", ENDITEM,
"Name=roundtrip", "Value=<OFF>", ENDITEM,
"Name=seatPref", "Value={seatPref}", ENDITEM,
"Name=seatType", "Value={seattype}", ENDITEM,
"Name=findFlights.x", "Value=47", ENDITEM,
"Name=findFlights.y", "Value=5", ENDITEM,
LAST);


lr_think_time(4);
lr_end_transaction("step2_seach_flight", LR_AUTO);
lr_start_transaction("step3_payment");


/*display data*/
lr_log_message("----------------------------------------------"); 
for(i=1;i<=atoi(lr_eval_string("{flightnum_count}"));i++)
{
   lr_save_int( i,"no" );
   lr_output_message("flightnum=%s",lr_eval_string(lr_eval_string("{flightnum_{no}}")));
   lr_output_message("flightcost=%s",lr_eval_string(lr_eval_string("{flightcost_{no}}")));
}
lr_log_message("----------------------------------------------");



/*select the nth flight*/
if(mode>0 & mode<=atoi(lr_eval_string("{flightnum_count}")))
{
   lr_save_int( mode,"no" );                    
  flightitem=lr_eval_string(lr_eval_string("{flightnum_{no}}"));
  flightfee=lr_eval_string(lr_eval_string("{flightcost_{no}}"));
}
 
if(mode==0){
/*select min flight */
// init value
flightitem=lr_eval_string("{flightnum_1}");
flightfee=lr_eval_string("{flightcost_1}"); 


min_no=lr_eval_string("{flightnum_1}");
min_cost=lr_eval_string("{flightcost_1}"); 


// search min cost
for(i=2;i<=atoi(lr_eval_string("{flightcost_count}"));i++)
{  
   lr_save_int( i,"no" );

   lr_save_string(lr_eval_string(lr_eval_string("{flightcost_{no}}")),  "flightfee" );
   lr_save_string(lr_eval_string(lr_eval_string("{flightnum_{no}}")),  "flightitem" );
   
   temp_cost=lr_eval_string("{flightfee}");
   temp_no=(lr_eval_string("{flightitem}"));
   
   if (atoi(temp_cost)< atoi(min_cost))
   {
    min_cost=temp_cost;
    min_no=temp_no;
   }

 
lr_output_message("min_no %s",min_no);
lr_output_message("min_cost %s",min_cost); 
 
flightitem=min_no;
flightfee=min_cost;
 
}

/*strcat flight string*/ 
flightstring=flightitem;
strcat(flightstring,";");
strcat(flightstring,flightfee);
strcat(flightstring,";");
strcat(flightstring,lr_eval_string("{departDate}"));
 
lr_output_message("flightstring=%s",flightstring); 
lr_save_string(flightstring, "outboundFlight");

web_submit_form("reservations.pl_2",
"Snapshot=t6.inf",
ITEMDATA,
"Name=outboundFlight", "Value={outboundFlight}", ENDITEM,
"Name=reserveFlights.x", "Value=21", ENDITEM,
"Name=reserveFlights.y", "Value=9", ENDITEM,
LAST);
 
web_set_sockets_option("SSL_VERSION", "2&3");

lr_think_time(10);


lr_end_transaction("step3_payment", LR_AUTO);
lr_start_transaction("step4_itinerary");
web_submit_form("reservations.pl_3", 
"Snapshot=t7.inf", 
ITEMDATA, 
"Name=firstName", "Value=first_{username}", ENDITEM, 
"Name=lastName", "Value=last_{username}", ENDITEM, 
"Name=address1", "Value=addr1_{username}", ENDITEM, 
"Name=address2", "Value=addr2_{username}", ENDITEM, 
"Name=pass1", "Value= test", ENDITEM, 
"Name=creditCard", "Value=22222222", ENDITEM, 
"Name=expDate", "Value=01/10", ENDITEM, 
"Name=saveCC", "Value=on", ENDITEM, 
"Name=buyFlights.x", "Value=43", ENDITEM, 
"Name=buyFlights.y", "Value=6", ENDITEM, 
LAST);


web_image("Itinerary Button",
"Alt=Itinerary Button", 
"Ordinal=1", 
"Snapshot=t8.inf", 
LAST);
lr_end_transaction("step4_itinerary", LR_AUTO);
lr_start_transaction("step5_signoff");


web_image("SignOff Button", 
"Alt=SignOff Button", 
"Ordinal=1", 
"Snapshot=t9.inf", 
LAST);
lr_end_transaction("step5_signoff", LR_AUTO);
lr_log_message("----------------------------------------------");
lr_output_message("username :%s",lr_eval_string("{username}"));
lr_output_message("depart  :%s",lr_eval_string("{depart}"));
lr_output_message("arrive :%s",lr_eval_string("{arrive}"));
lr_output_message("numPassenger :%s",lr_eval_string("{numPassenger}"));
lr_output_message("seatPref :%s",lr_eval_string("{seatPref}"));
lr_output_message("seattype :%s",lr_eval_string("{seattype}"));
lr_output_message("outboundFlight :%s",lr_eval_string("{outboundFlight}"));
 
lr_log_message("order flight success");
lr_log_message("----------------------------------------------");


return 0;

}
原创粉丝点击