如果需要查看完整的请跳转:
http://note.youdao.com/noteshare?id=3cbb0aa4a81110677223ba4f02d3e5ef&sub=A848122ABD74448D831FC6198CBC96AB
主要实现功能:
1、订票时,出发地和目的地需要随机,航班随机
2、退票时,若页面存在2条以上票务信息,则随机退2张票;若存在2条以内的票务信息,则全部退票。
3、如果没票可退,直接退出
------------------------------------登录-----------------------------------------------
vuser_init(){
/**
* 关联出来userSession,登录的时候需要这个参数
*/
web_reg_save_param("userSession",
"LB=name=userSession value=",
"RB=>",
"Search=body",
LAST);
/**
* 获取一个userSession
*/
web_url("WebTours",
"URL={ip}/WebTours/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
/**
* 用户登录
*/
web_submit_data("login",
"Action={ip}/WebTours/login.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=",
"Snapshot=",
"Mode=HTML",
ITEMDATA,
"name=userSession","Value={userSession}",ENDITEM,//关联出来的userSession
"name=username","Value=1",ENDITEM,//账号
"name=password","Value=123456",ENDITEM,//密码
"name=login.y","Value=16",ENDITEM,
"name=login.x","Value=74",ENDITEM,
"name=login","Value=Login",ENDITEM,
"name=JSFormSubmit","Value=on",ENDITEM,
LAST);
lr_think_time(8);
lr_output_message("-----------------------用户名:%s",lr_eval_string("{username}"));
lr_output_message("-----------------------token为:%s",lr_eval_string("{userSession}"));
return 0;
}
-------------------------------------------订票-----------------------------------------------------------
Flight(){
char str[100]="";
char *Flight;
lr_save_string(lr_eval_string("{depart}"),"departCity");//将参数化depart值取出来赋予departCity
lr_save_string(lr_eval_string("{arrive}"),"arriveCity");//将参数化arrive值取出来赋arriveCity
/**
* 使用while循环
* strcmp函数对比2次取值是否相同
* 相同的话就重新赋值
*/
while(strcmp(lr_eval_string("{departCity}"),lr_eval_string("{arriveCity}"))==0){
lr_error_message("-------------城市相同,进行重新赋值-------------");
lr_save_string(lr_eval_string("{depart}"),"departCity");//将参数化depart值取出来赋予departCity
lr_save_string(lr_eval_string("{arrive}"),"arriveCity");//将参数化arrive值取出来赋arriveCity
lr_output_message("------------------------------------departCity值为:%s",lr_eval_string("{departCity}"));
lr_output_message("------------------------------------arriveCity值为:%s",lr_eval_string("{arriveCity}"));
}
//lr_output_message("------------------------------------departCity值为:%s",lr_eval_string("{departCity}"));
//lr_output_message("------------------------------------arriveCity值为:%s",lr_eval_string("{arriveCity}"));
/**
* 关联航班信息接口返回值中outboundFlight所有值
* 在选择航班接口中需要使用此值
* 因为使用常规关联,关联全部的话,第一个值会带check,所以右边界使用departDate,后续使用拼接处理
*/
web_reg_save_param("outboundFlight",
"LB=name=outboundFlight value=",
"RB={departDate}",
"Search=body",
"ORD=all",
LAST);
/**
* 开始订票
* 选择来返的城市
* 参数化来返城市
* 来返城市名字不能重复
*/
web_submit_data("选择往返城市",
"Action={ip}/WebTours/reservations.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/reservations.pl?page=welcome",
"Snapshot=",
"Mode=HTML",
ITEMDATA,
"name=advanceDiscount","Value=0",ENDITEM,
"name=depart","Value={departCity}",ENDITEM,//出发城市
"name=departDate","Value={departDate}",ENDITEM,
"name=arrive","Value={arriveCity}",ENDITEM,//到达城市
"name=returnDate","Value={returnDate}",ENDITEM,
"name=numPassengers","Value=1",ENDITEM,
"name=seatPref","Value=None",ENDITEM,
"name=seatType","Value=Coach",ENDITEM,
"name=findFlights.x","Value=58",ENDITEM,
"name=findFlights.y","Value=6",ENDITEM,
"name=.cgifields","Value=roundtrip",ENDITEM,
"name=.cgifields","Value=seatType",ENDITEM,
"name=.cgifields","Value=seatPref",ENDITEM,
LAST);
lr_think_time(8);
Flight = lr_paramarr_random("outboundFlight");//关联参数随机取值
lr_save_string(Flight,"count");//将值赋给一个变量
strcat(strcat(str,lr_eval_string("{count}")),lr_eval_string("{departDate}"));//拼接航班信息
lr_save_string(str,"Flight_count");
//lr_output_message("--------------------------------航班号为:%s",lr_eval_string("{Flight_count}"));
/**
* 选择航班信息
* 关联参数outboundFlight,在往返城市接口返回。
*/
web_submit_data("选择航班",
"Action={ip}/WebTours/reservations.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/reservations.pl",
"Snapshot=t7.inf",
"Mode=HTML",
ITEMDATA,
"name=outboundFlight","Value={Flight_count}",ENDITEM,//航班信息
"name=numPassengers","Value=1",ENDITEM,
"name=advanceDiscount","Value=0",ENDITEM,
"name=seatType","Value=Coach",ENDITEM,
"name=seatPref","Value=None",ENDITEM,
"name=reserveFlights.x","Value=67",ENDITEM,
"name=reserveFlights.y","Value=4",ENDITEM,
LAST);
lr_think_time(8);
web_submit_data("填写信用卡",
"Action={ip}/WebTours/reservations.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/reservations.pl",
"Snapshot=",
"Mode=HTML",
ITEMDATA,
"name=firstName","Value=xin",ENDITEM,
"name=lastName","Value=fang",ENDITEM,
"name=address1","Value=dsadas",ENDITEM,
"name=address2","Value=dasd",ENDITEM,
"name=pass1","Value=xin fang",ENDITEM,
"name=creditCard","Value={creditCard}",ENDITEM,
"name=expDate","Value={departDate}",ENDITEM,
"name=oldCCOption","Value=",ENDITEM,
"name=numPassengers","Value=1",ENDITEM,
"name=seatType","Value=Coach",ENDITEM,
"name=seatPref","Value=None",ENDITEM,
"name=outboundFlight","Value={Flight_count}",ENDITEM,
"name=advanceDiscount","Value=0",ENDITEM,
"name=returnFlight","Value=",ENDITEM,
"name=JSFormSubmit","Value=on",ENDITEM,
"name=buyFlights.x","Value=47",ENDITEM,
"name=buyFlights.y","Value=11",ENDITEM,
"name=.cgifields","Value=saveCC",ENDITEM,
LAST);
return 0;
}
------------------------------------------------------退票-----------------------------------------------------
Exit_Flight()
{
int Flight_count1,Flight_count2;//Flight_count1,Flight_count2 分别用来保存2次随机值
int count=0;// count保存飞机票数量
char buffer[1024]={0};
char buffer1[1024]={0};
char buffer2[1024]={0};
char buffer3[1024]={0};
int i;
char temp[1024]={0};
char paras[1024]={0};
web_set_max_html_param_len("1024");
/**
* 用来关联飞机票的Name值
*/
web_reg_save_param("FlightName",
"LB=type=\"checkbox\" name=\"",
"RB=\"",
"Notfound=warning",
"Search=body",
"ORD=all",
LAST);
/**
* 用来关联飞机票的Value值
*/
web_reg_save_param("FlightValue",
"LB=name=\"flightID\" value=\"",
"RB=\"",
"Notfound=warning",
"Search=body",
"ORD=all",
LAST);
/**
* 获取有多少张票 以及每张票的value
*/
web_url("退票界面",
"URL={ip}/WebTours/itinerary.pl",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
lr_output_message("--------------------------------有%s张票!!!",lr_eval_string("{FlightValue_count}"));
count=atoi(lr_eval_string("{FlightValue_count}")); // atoi把字符串的数字转换为整形的数字
// FlightValue_count为飞机票的数量
/**
* 如果页面存在2条以上的票务信息就退票2张
* 如果页面存在2条以下包括2条票务信息就全退
* 如果没有票务信息就退出
*/
if(count>0){
if(count<=2){
/**
*拼接表单信息
*/
for (i=1;i<=count;i++) {
sprintf(temp,"{FlightValue_%d}", i);
sprintf(temp,"flightID=%s&",lr_eval_string(temp));
strcat(paras,temp);
sprintf(temp,"{FlightName_%d}", i);
sprintf(temp,".cgifields=%s&",lr_eval_string(temp));
strcat(paras,temp);
//sprintf(temp,"{FlightName_%d}",i);
//sprintf(temp,"%s=on&",lr_eval_string(temp));
//strcat(paras,temp);
}
strcat(paras,"removeAllFlights.x=77&removeAllFlights.y=3");
lr_output_message("------------------------参数拼接最后形态:%s",lr_eval_string(paras));
lr_save_string(paras,"paras");
/**
* 退票操作(退全张)
* paras为拼接的字符串
*/
web_custom_request("退票",
"URL=http://127.0.0.1:1080/WebTours/itinerary.pl",
"Method=POST",
"TargetFrame=",
"Resource=0",
"Mode=HTML",
"Referer=http://127.0.0.1:1080/WebTours/itinerary.pl",
"Body={paras}",
LAST);
lr_output_message("-----------------------全部退票");
}else{
Flight_count1=rand()%(count-1+1)+1;//随机在飞机票数量中取值
Flight_count2=rand()%(count-1+1)+1;//随机在飞机票数量中取值
/**
*将int保存为参数
*/
lr_save_int(Flight_count1, "param1");
lr_save_int(Flight_count2, "param2");
/**
* 对比2次取值是否相同
* 相同的话给Flight_count2重新随机
*/
while (strcmp(lr_eval_string("{param1}"),lr_eval_string("{param2}"))==0) {
lr_error_message("Flight_count1取值为%s",lr_eval_string("{param1}"));
lr_error_message("Flight_count2取值为%s",lr_eval_string("{param2}"));
Flight_count2=rand()%(count-1+1)+1;//重新取第二次随机值
lr_save_int(Flight_count2, "param2");//重新将int保存为参数param2
}
lr_output_message("第一次随机值为%s",lr_eval_string("{param1}"));
lr_output_message("第二次随机值为%s",lr_eval_string("{param2}"));
/**
* 拼接表单提交内容
*/
for (i=1;i<=count;i++) {
sprintf(temp,"{FlightValue_%d}", i);
sprintf(temp,"flightID=%s&",lr_eval_string(temp));
strcat(paras,temp);
sprintf(temp,"{FlightName_%d}", i);
sprintf(temp,".cgifields=%s&",lr_eval_string(temp));
strcat(paras,temp);
}
sprintf(temp,"{FlightName_%s}", lr_eval_string("{param1}"));
sprintf(temp,"%s=on&",lr_eval_string(temp));
strcat(paras,temp);
sprintf(temp,"{FlightName_%s}", lr_eval_string("{param2}"));
sprintf(temp,"%s=on&",lr_eval_string(temp));
strcat(paras,temp);
strcat(paras,"removeFlights.x=64&removeFlights.y=8");
lr_output_message("------------------------参数拼接最后形态:%s",lr_eval_string(paras));
lr_save_string(paras,"paras");
/**
* 退票操作(退2张票)
* paras为拼接的字符串
*/
web_custom_request("退票",
"URL=http://127.0.0.1:1080/WebTours/itinerary.pl",
"Method=POST",
"TargetFrame=",
"Resource=0",
"Mode=HTML",
"Referer=http://127.0.0.1:1080/WebTours/itinerary.pl",
"Body={paras}",
LAST);
}
}else{
web_url("退出",
"URL={ip}/WebTours/welcome.pl?signOff=1",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
lr_output_message("-----------------------没有票,退出");
}
/**
* 将随机值写入FlightValue中
* 用来取出向对应的飞机票
* 将随机值写入FlightName中
* 用来取出飞机票向对应的号码
sprintf(buffer, "{FlightValue_%s}", lr_eval_string("{param1}"));
sprintf(buffer1,"{FlightValue_%s}", lr_eval_string("{param2}"));
sprintf(buffer2, "{FlightName_%s}", lr_eval_string("{param1}"));
sprintf(buffer3, "{FlightName_%s}", lr_eval_string("{param2}"));
lr_save_string(lr_eval_string(buffer),"flightID1");
lr_save_string(lr_eval_string(buffer1),"flightID2");
lr_save_string(lr_eval_string(buffer2),"number1");
lr_save_string(lr_eval_string(buffer3),"number2");
lr_output_message("-----------------第一张飞机票为%s",lr_eval_string("{flightID1}"));
lr_output_message("-----------------第二张飞机票为%s",lr_eval_string("{flightID2}"));
lr_output_message("-----------------第一张飞机票编号为%s",lr_eval_string("{number1}"));
lr_output_message("-----------------第二张飞机票编号为%s",lr_eval_string("{number2}"));
*/
/**
* 退票2张
* flightID1第一张票value
* flightID2第二张票value
* number1第一张票编号name
* number2第二张票编号name
web_submit_data("退票",
"Action=http://127.0.0.1:1080/WebTours/itinerary.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/itinerary.pl",
"Snapshot=",
"Mode=HTML",
ITEMDATA,
"name={number1}","Value=on",ENDITEM,
"name=flightID","Value={flightID1}",ENDITEM,
"name={number2}","Value=on",ENDITEM,
"name=flightID","Value={flightID2}",ENDITEM,
"name=removeFlights.x","Value=59",ENDITEM,
"name=removeFlights.y","Value=9",ENDITEM,
"name=.cgifields","Value={number1}",ENDITEM,
"name=.cgifields","Value={number2}",ENDITEM,
LAST); */
return 0;
}
{
int Flight_count1,Flight_count2;//Flight_count1,Flight_count2 分别用来保存2次随机值
int count=0;// count保存飞机票数量
char buffer[1024]={0};
char buffer1[1024]={0};
char buffer2[1024]={0};
char buffer3[1024]={0};
int i;
char temp[1024]={0};
char paras[1024]={0};
web_set_max_html_param_len("1024");
/**
* 用来关联飞机票的Name值
*/
web_reg_save_param("FlightName",
"LB=type=\"checkbox\" name=\"",
"RB=\"",
"Notfound=warning",
"Search=body",
"ORD=all",
LAST);
/**
* 用来关联飞机票的Value值
*/
web_reg_save_param("FlightValue",
"LB=name=\"flightID\" value=\"",
"RB=\"",
"Notfound=warning",
"Search=body",
"ORD=all",
LAST);
/**
* 获取有多少张票 以及每张票的value
*/
web_url("退票界面",
"URL={ip}/WebTours/itinerary.pl",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
lr_output_message("--------------------------------有%s张票!!!",lr_eval_string("{FlightValue_count}"));
count=atoi(lr_eval_string("{FlightValue_count}")); // atoi把字符串的数字转换为整形的数字
// FlightValue_count为飞机票的数量
/**
* 如果页面存在2条以上的票务信息就退票2张
* 如果页面存在2条以下包括2条票务信息就全退
* 如果没有票务信息就退出
*/
if(count>0){
if(count<=2){
/**
*拼接表单信息
*/
for (i=1;i<=count;i++) {
sprintf(temp,"{FlightValue_%d}", i);
sprintf(temp,"flightID=%s&",lr_eval_string(temp));
strcat(paras,temp);
sprintf(temp,"{FlightName_%d}", i);
sprintf(temp,".cgifields=%s&",lr_eval_string(temp));
strcat(paras,temp);
//sprintf(temp,"{FlightName_%d}",i);
//sprintf(temp,"%s=on&",lr_eval_string(temp));
//strcat(paras,temp);
}
strcat(paras,"removeAllFlights.x=77&removeAllFlights.y=3");
lr_output_message("------------------------参数拼接最后形态:%s",lr_eval_string(paras));
lr_save_string(paras,"paras");
/**
* 退票操作(退全张)
* paras为拼接的字符串
*/
web_custom_request("退票",
"URL=http://127.0.0.1:1080/WebTours/itinerary.pl",
"Method=POST",
"TargetFrame=",
"Resource=0",
"Mode=HTML",
"Referer=http://127.0.0.1:1080/WebTours/itinerary.pl",
"Body={paras}",
LAST);
lr_output_message("-----------------------全部退票");
}else{
Flight_count1=rand()%(count-1+1)+1;//随机在飞机票数量中取值
Flight_count2=rand()%(count-1+1)+1;//随机在飞机票数量中取值
/**
*将int保存为参数
*/
lr_save_int(Flight_count1, "param1");
lr_save_int(Flight_count2, "param2");
/**
* 对比2次取值是否相同
* 相同的话给Flight_count2重新随机
*/
while (strcmp(lr_eval_string("{param1}"),lr_eval_string("{param2}"))==0) {
lr_error_message("Flight_count1取值为%s",lr_eval_string("{param1}"));
lr_error_message("Flight_count2取值为%s",lr_eval_string("{param2}"));
Flight_count2=rand()%(count-1+1)+1;//重新取第二次随机值
lr_save_int(Flight_count2, "param2");//重新将int保存为参数param2
}
lr_output_message("第一次随机值为%s",lr_eval_string("{param1}"));
lr_output_message("第二次随机值为%s",lr_eval_string("{param2}"));
/**
* 拼接表单提交内容
*/
for (i=1;i<=count;i++) {
sprintf(temp,"{FlightValue_%d}", i);
sprintf(temp,"flightID=%s&",lr_eval_string(temp));
strcat(paras,temp);
sprintf(temp,"{FlightName_%d}", i);
sprintf(temp,".cgifields=%s&",lr_eval_string(temp));
strcat(paras,temp);
}
sprintf(temp,"{FlightName_%s}", lr_eval_string("{param1}"));
sprintf(temp,"%s=on&",lr_eval_string(temp));
strcat(paras,temp);
sprintf(temp,"{FlightName_%s}", lr_eval_string("{param2}"));
sprintf(temp,"%s=on&",lr_eval_string(temp));
strcat(paras,temp);
strcat(paras,"removeFlights.x=64&removeFlights.y=8");
lr_output_message("------------------------参数拼接最后形态:%s",lr_eval_string(paras));
lr_save_string(paras,"paras");
/**
* 退票操作(退2张票)
* paras为拼接的字符串
*/
web_custom_request("退票",
"URL=http://127.0.0.1:1080/WebTours/itinerary.pl",
"Method=POST",
"TargetFrame=",
"Resource=0",
"Mode=HTML",
"Referer=http://127.0.0.1:1080/WebTours/itinerary.pl",
"Body={paras}",
LAST);
}
}else{
web_url("退出",
"URL={ip}/WebTours/welcome.pl?signOff=1",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
lr_output_message("-----------------------没有票,退出");
}
/**
* 将随机值写入FlightValue中
* 用来取出向对应的飞机票
* 将随机值写入FlightName中
* 用来取出飞机票向对应的号码
sprintf(buffer, "{FlightValue_%s}", lr_eval_string("{param1}"));
sprintf(buffer1,"{FlightValue_%s}", lr_eval_string("{param2}"));
sprintf(buffer2, "{FlightName_%s}", lr_eval_string("{param1}"));
sprintf(buffer3, "{FlightName_%s}", lr_eval_string("{param2}"));
lr_save_string(lr_eval_string(buffer),"flightID1");
lr_save_string(lr_eval_string(buffer1),"flightID2");
lr_save_string(lr_eval_string(buffer2),"number1");
lr_save_string(lr_eval_string(buffer3),"number2");
lr_output_message("-----------------第一张飞机票为%s",lr_eval_string("{flightID1}"));
lr_output_message("-----------------第二张飞机票为%s",lr_eval_string("{flightID2}"));
lr_output_message("-----------------第一张飞机票编号为%s",lr_eval_string("{number1}"));
lr_output_message("-----------------第二张飞机票编号为%s",lr_eval_string("{number2}"));
*/
/**
* 退票2张
* flightID1第一张票value
* flightID2第二张票value
* number1第一张票编号name
* number2第二张票编号name
web_submit_data("退票",
"Action=http://127.0.0.1:1080/WebTours/itinerary.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/itinerary.pl",
"Snapshot=",
"Mode=HTML",
ITEMDATA,
"name={number1}","Value=on",ENDITEM,
"name=flightID","Value={flightID1}",ENDITEM,
"name={number2}","Value=on",ENDITEM,
"name=flightID","Value={flightID2}",ENDITEM,
"name=removeFlights.x","Value=59",ENDITEM,
"name=removeFlights.y","Value=9",ENDITEM,
"name=.cgifields","Value={number1}",ENDITEM,
"name=.cgifields","Value={number2}",ENDITEM,
LAST); */
return 0;
}
附城市全集:
Denver
Frankfurt
London
Los Angeles
Paris
Portland
San Francisco
Seattle
Sydney
Zurich
本文介绍了如何使用LoadRunner来编写针对飞机订票系统的性能脚本,包括随机选择出发地、目的地及航班,模拟退票场景,其中在退票时根据页面票务信息数量进行随机退票操作。详细内容可点击链接查看。
脚本&spm=1001.2101.3001.5002&articleId=80041891&d=1&t=3&u=651eb2a9a65c450aba3bf792f4b400d4)
2420

被折叠的 条评论
为什么被折叠?



