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;
}
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;
}
阅读全文
0 0
- loadrunner 12.53 使用方法
- LoadRunner的使用方法
- LoadRunner
- loadrunner
- LOADRUNNER
- LoadRunner
- LoadRunner
- LoadRunner
- loadrunner
- LoadRunner
- LoadRunner
- Loadrunner
- loadrunner
- Loadrunner
- loadrunner
- loadrunner
- loadrunner
- loadrunner
- JS中创建对象的方法总结
- 跳转第三方地图app
- Callback definition file not found
- java跨域后台发送get请求,获取返回值
- Python学习之旅-5
- loadrunner 12.53 使用方法
- phpcms v9中用PC标签在列表页中调出文章内容
- express手册之五,request和response
- allegro资料收集
- Spring(4): AOP
- Dumpbin工具参数详解
- textview滚动条效果的text
- Python 两个版本中字符串的区别
- Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA