抓包编写HP飞机订票系统loadrunner脚本--订票流程

从网上查了下,基本上都是在写怎么通过loadrunner的录制来进行脚本编写,所以就有了写一篇怎么通过抓包写脚本的想法,写的比较简单,如有不对之处请指出

工具需求:
  • loadrunner11
  • chrome
  • Notepad++

首先第一步肯定是登录脚本了对吧,注册我就不讲了,照葫芦画瓢自己做吧。
打开登录界面,按下F12,弹出抓包界面,或者你使用其他工具都无所谓,点击登录按钮,抓包界面就会有数据了
多了不介绍,看上图或者百度下怎么抓包,我只是娱乐性教学。
很明显这里有个参数叫做 userSession,这个肯定是个随机参数每次登录都不一样(当你在 administration里面勾选难度后就会出现这个参数 ),这个参数是从哪取出来的呢?
这个参数是从 http://127.0.0.1:1080/WebTours/这个get请求里面返回的,那就要用到我们的关联函数web_reg_save_param了,具体脚本如下:
当然我的IP做了参数化,其实就 http://127.0.0.1:1080 ,你可以做好参数化也可以不做。关联出来后,写登录脚本就很简单了,如下图
我这里的账号密码都没做关联,后期会完善。



选择航班
开启chrome的抓包F12,选择好来往城市后,点击提交按钮,查看信息。


此时点击抓包界面中network- reservations.pl-Headers查看详细信息
如上图三所示,Form Date 就是我们发送的请求内容了,因为是个post请求所以我们使用函数web_submit_data,如下:
这就是选择来往城市点击提交的请求,他会返回你选择的往返城市飞机航班信息,这就是接下来我们需要做参数化的地方,点击Response会显示返回内容。

将其复制到Notepad++中
很明显能猜出选择航班我们需要的参数信息,可以先看下一个接口请求需要什么参数,再返回来查找我们需要的内容。
随便选择一个航班,点击提交,查看其接口请求信息。点击抓包界面中network-reservations.pl查看详细信息 - reservations.pl-Headers查看详细信息

查看Form Data中请求参数,很明显 outboundFlight值 012;365;04/19/2018就是我们选择的航班的信息
接下来就轮到是输入卡号和时间了吧,还是一吊样,如下图,点击提交后查看抓包信息
查看抓包内容(内容泄露我隐私了,我就打码了啊)
不用多说了吧 还是post表单形式,直接按照之前的写法写就是了

到这一步就证明你订票成功了 你可以去tinerary进行查看订票信息

注意:在写地址的时候,localhost和127.0.0.1还是有区别的,要统一下,我就是吃了没文化的亏,找了2天莫名其妙的错误。
其实上面写的不是很仔细,下面附脚本全部代码:
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_output_message("-----------------------用户名:%s",lr_eval_string("{username}"));
lr_output_message("-----------------------token为:%s",lr_eval_string("{userSession}"));
return 0;
}



Action()
{

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);

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);






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=1234567890",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;
}


重要参数化截图:




附城市全集:
Denver
Frankfurt
London
Los Angeles
Paris
Portland
San Francisco
Seattle
Sydney
Zurich


猜你喜欢

转载自blog.csdn.net/qq_28569939/article/details/80041891