LoadRunner自帶的訓練的飛機票網站的例子中,有一個很有意思的流程,如下: 首先登陸機票系統,然後查詢從哪裏到哪裏的機票。然後系統會給你4張推薦票。 選擇一張機票,後就可以支付然後完成機票的預定和購買了。 測者相信所有在用LoadRunner的人對這個流程都不陌生,很熟悉。那麼今天測者提出一個問題,我想一個腳本購買推薦的4張飛機票。該如何處理對應的測試腳本呢?
一個飛機票的超級腳本
Action()
{
int i=0;//循環訂票的遊標變量
char temp[255];//臨時存儲字符串變量
int count=0;//存儲循環關聯數組長度變量
char tempfly[255];//臨時存儲字符串變量
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTTP",
LAST);
web_concurrent_start(NULL);
web_url("header.html",
"URL=http://127.0.0.1:1080/WebTours/header.html",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/",
"Snapshot=t2.inf",
"Mode=HTTP",
LAST);
web_url("welcome.pl",
"URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/",
"Snapshot=t4.inf",
"Mode=HTTP",
LAST);
web_concurrent_end(NULL);
web_concurrent_start(NULL);
web_url("hp_logo.png",
"URL=http://127.0.0.1:1080/WebTours/images/hp_logo.png",
"Resource=1",
"RecContentType=image/png",
"Referer=http://127.0.0.1:1080/WebTours/header.html",
"Snapshot=t3.inf",
LAST);
web_url("webtours.png",
"URL=http://127.0.0.1:1080/WebTours/images/webtours.png",
"Resource=1",
"RecContentType=image/png",
"Referer=http://127.0.0.1:1080/WebTours/header.html",
"Snapshot=t5.inf",
LAST);
web_concurrent_end(NULL);
web_concurrent_start(NULL);
web_url("home.html",
"URL=http://127.0.0.1:1080/WebTours/home.html",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true",
"Snapshot=t6.inf",
"Mode=HTTP",
LAST);
web_reg_save_param("sessionuser","LB=<input type=hidden name=userSession value=","RB=>",LAST);//獲取用於session值的關聯函數
web_url("nav.pl",
"URL=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true",
"Snapshot=t7.inf",
"Mode=HTTP",
LAST);
web_concurrent_end(NULL);
web_concurrent_start(NULL);
web_url("JSFormSubmit.js",
"URL=http://127.0.0.1:1080/WebTours/JSFormSubmit.js",
"Resource=1",
"RecContentType=application/x-javascript",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t8.inf",
LAST);
web_url("mer_login.gif",
"URL=http://127.0.0.1:1080/WebTours/images/mer_login.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t9.inf",
LAST);
web_concurrent_end(NULL);
lr_start_transaction("login-0");
lr_think_time(9);
lr_error_message("sessionuser:%s",lr_eval_string("{sessionuser}"));//打印關聯到的用戶session值
web_submit_data("login.pl",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t10.inf",
"Mode=HTTP",
ITEMDATA,
"Name=userSession", "Value={sessionuser}", ENDITEM,
"Name=username", "Value=test001", ENDITEM,
"Name=password", "Value=123456", ENDITEM,
"Name=JSFormSubmit", "Value=on", ENDITEM,
"Name=login.x", "Value=64", ENDITEM,
"Name=login.y", "Value=15", ENDITEM,
LAST);
web_concurrent_start(NULL);
web_url("nav.pl_2",
"URL=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/login.pl",
"Snapshot=t11.inf",
"Mode=HTTP",
LAST);
web_url("login.pl_2",
"URL=http://127.0.0.1:1080/WebTours/login.pl?intro=true",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/login.pl",
"Snapshot=t16.inf",
"Mode=HTTP",
LAST);
web_concurrent_end(NULL);
web_concurrent_start(NULL);
web_url("flights.gif",
"URL=http://127.0.0.1:1080/WebTours/images/flights.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Snapshot=t12.inf",
LAST);
web_url("signoff.gif",
"URL=http://127.0.0.1:1080/WebTours/images/signoff.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Snapshot=t13.inf",
LAST);
web_url("itinerary.gif",
"URL=http://127.0.0.1:1080/WebTours/images/itinerary.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Snapshot=t14.inf",
LAST);
web_url("in_home.gif",
"URL=http://127.0.0.1:1080/WebTours/images/in_home.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Snapshot=t15.inf",
LAST);
web_concurrent_end(NULL);
lr_end_transaction("login-0",LR_AUTO);
lr_start_transaction("book-1");
lr_think_time(11);
web_url("Search Flights Button",
"URL=http://127.0.0.1:1080/WebTours/welcome.pl?page=search",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Snapshot=t17.inf",
"Mode=HTTP",
LAST);
web_concurrent_start(NULL);
web_url("reservations.pl",
"URL=http://127.0.0.1:1080/WebTours/reservations.pl?page=welcome",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/welcome.pl?page=search",
"Snapshot=t18.inf",
"Mode=HTTP",
LAST);
web_url("nav.pl_3",
"URL=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=flights",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/welcome.pl?page=search",
"Snapshot=t19.inf",
"Mode=HTTP",
LAST);
web_concurrent_end(NULL);
web_concurrent_start(NULL);
web_url("home.gif",
"URL=http://127.0.0.1:1080/WebTours/images/home.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=flights",
"Snapshot=t20.inf",
LAST);
web_url("itinerary.gif_2",
"URL=http://127.0.0.1:1080/WebTours/images/itinerary.gif",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=flights",
"Mode=HTTP",
LAST);
web_url("signoff.gif_2",
"URL=http://127.0.0.1:1080/WebTours/images/signoff.gif",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=flights",
"Mode=HTTP",
LAST);
web_url("in_flights.gif",
"URL=http://127.0.0.1:1080/WebTours/images/in_flights.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=flights",
"Snapshot=t21.inf",
LAST);
web_concurrent_end(NULL);
web_url("button_next.gif",
"URL=http://127.0.0.1:1080/WebTours/images/button_next.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/reservations.pl?page=welcome",
"Snapshot=t22.inf",
LAST);
web_reg_save_param("flytype","LB=<input type = radio name=outboundFlight value=","RB=>","ORD=ALL","Savelen=18",LAST);//關聯取得出現的4張電子機票
// web_reg_save_param("seatPref","LB=<input type=\"radio\" name=\"seatPref\" value=\"","RB=\" ","ORD=ALL","SaveLen=6",LAST);
// web_reg_save_param("seatType","LB=<input type=\"radio\" name=\"seatType\" value=\"","RB=\" ","ORD=ALL","SaveLen=8",LAST);
lr_error_message("seatPref_1:",lr_eval_string("{seatPref_1}"));
lr_error_message("seatPref_2:",lr_eval_string("{seatPref_2}"));
lr_error_message("seatPref_3:",lr_eval_string("{seatPref_3}"));
lr_error_message("seatType_1:",lr_eval_string("{seatType_1}"));
lr_error_message("seatType_2:",lr_eval_string("{seatType_2}"));
lr_error_message("seatType_3:",lr_eval_string("{seatType_3}"));
web_submit_data("reservations.pl_2",
"Action=http://127.0.0.1:1080/WebTours/reservations.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/reservations.pl?page=welcome",
"Snapshot=t23.inf",
"Mode=HTTP",
ITEMDATA,
"Name=advanceDiscount", "Value=0", ENDITEM,
"Name=depart", "Value=Denver", ENDITEM,
"Name=departDate", "Value=05/29/2013", ENDITEM,
"Name=arrive", "Value={endplace}", ENDITEM,
"Name=returnDate", "Value=05/30/2013", ENDITEM,
"Name=numPassengers", "Value=1", ENDITEM,
"Name=seatPref", "Value={seatPerf}", ENDITEM,
"Name=seatType", "Value={seatType}", ENDITEM,
"Name=.cgifields", "Value=roundtrip", ENDITEM,
"Name=.cgifields", "Value=seatType", ENDITEM,
"Name=.cgifields", "Value=seatPref", ENDITEM,
"Name=findFlights.x", "Value=80", ENDITEM,
"Name=findFlights.y", "Value=15", ENDITEM,
LAST);
lr_error_message("seatPerf:%s",lr_eval_string("{seatPerf}"));
lr_error_message("seatType:%s",lr_eval_string("{seatType}"));
count = atoi(lr_eval_string("{flytype_count}"));
lr_error_message("lenflytype:%d",count);
lr_error_message("Flytype_1:%s",lr_eval_string("{flytype_1}"));
lr_error_message("Flytype_2:%s",lr_eval_string("{flytype_2}"));
lr_error_message("Flytype_3:%s",lr_eval_string("{flytype_3}"));
lr_error_message("Flytype_4:%s",lr_eval_string("{flytype_4}"));
for(i=0;i<count;i++)
{
sprintf(temp,"{flytype_%d}",i+1);//格式化flytype數組參數格式,取數組中一個存入temp變量
lr_error_message("temp:%s",temp);//打印temp變量的內容
sprintf(tempfly,"%s",lr_eval_string(temp));//將temp變量通過lr_eval_string函數將temp變量存儲的對應loadrunner參數的對應內容存入tempfly變量中
lr_error_message("tempfly:%s",tempfly);//打印tempfly變量的內容
lr_error_message("lr_eval_string(tempfly):%s",lr_eval_string(tempfly));//通過lr_eval_string函數取得tempfly變量的內容
lr_save_string(tempfly,"flytypenum");//將tempfly變量內容存到flytypenum參數中,方便以後lr函數使用
lr_error_message("flytypenum:%s",lr_eval_string("{flytypenum}"));//打印flytypenum內容
web_submit_data("reservations.pl_3",
"Action=http://127.0.0.1:1080/WebTours/reservations.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/reservations.pl",
"Snapshot=t24.inf",
"Mode=HTTP",
ITEMDATA,
"Name=outboundFlight", "Value={flytypenum}", 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=63", ENDITEM,
"Name=reserveFlights.y", "Value=17", ENDITEM,
LAST);
web_submit_data("reservations.pl_4",
"Action=http://127.0.0.1:1080/WebTours/reservations.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/reservations.pl",
"Snapshot=t25.inf",
"Mode=HTTP",
ITEMDATA,
"Name=firstName", "Value=test001", ENDITEM,
"Name=lastName", "Value=test001", ENDITEM,
"Name=address1", "Value=test001", ENDITEM,
"Name=address2", "Value=123456", ENDITEM,
"Name=pass1", "Value=test001 test001", ENDITEM,
"Name=creditCard", "Value=", ENDITEM,
"Name=expDate", "Value=", ENDITEM,
"Name=oldCCOption", "Value=", ENDITEM,
"Name=numPassengers", "Value=1", ENDITEM,
"Name=seatType", "Value=Coach", ENDITEM,
"Name=seatPref", "Value=None", ENDITEM,
"Name=outboundFlight", "Value={flytypenum}", ENDITEM,
"Name=advanceDiscount", "Value=0", ENDITEM,
"Name=returnFlight", "Value=", ENDITEM,
"Name=JSFormSubmit", "Value=off", ENDITEM,
"Name=.cgifields", "Value=saveCC", ENDITEM,
"Name=buyFlights.x", "Value=61", ENDITEM,
"Name=buyFlights.y", "Value=8", ENDITEM,
LAST);
}
web_url("bookanother.gif",
"URL=http://127.0.0.1:1080/WebTours/images/bookanother.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/reservations.pl",
"Snapshot=t26.inf",
LAST);
lr_end_transaction("book-1",LR_AUTO);
return 0;
}
特別點的解釋 首先,LoadRunner是ansi C語言,因此變量要放到函數的開頭聲明(C語言的變量)。其次,在for循環中,我們看到了幾次sprintf,那麼這裏了測者會詳細說一下,第一次 (假設當前i=0),sprintf(temp,"{flytype_%d}",i+1);,其中“{flytype1}”的含義(包含雙引號),是將一個指向了存有flytype_1值的內存地址的指針指向的值賦值給了temp。也就是temp指向了一段存儲了fltype_1值的內存。sprintf(tempfly,"%s",lrevalstring(temp));將flytype_1這個指針指向的內存地址存儲的值賦給了tempfly,也就是說tempfly和flytype_1這兩個指針都指向相同內存地址,這段地址存儲的就是關聯出來的第一張機票的ouboundFlight值。