百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

性能测试之看懂这一个LoadRunner再无困难的脚本

cac55 2024-09-26 07:28 19 浏览 0 评论

一个特别的练习需求

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是类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值。

————————————————————————————————————————————————

给大家推荐一个学习资料分享群(574253227),里面大牛已经为我们整理好了许多的学习资料,有自动化,接口,性能等等的学习资料!

相关推荐

博科矩阵新IP网络推动发展OTT服务

近日消息,日本电信服务提供商软银集团正在部署博科VDX交换机,为集团公司通用服务基础架构网络提供以太网矩阵,从而简化数据中心运营。这个新的基础架构将大幅度降低软银数据中心网络运营的复杂度和成本,使该公...

博科SDN战略落地 首款控制器Vyatta面世

ZDNET网络频道10月10日评论消息(文/于泽):虽然软件定义网络(SDN)近两年被炒得很热,但一直属于雷声大雨点小。各网络厂商都声称自家的交换机能够支持OpenFlow协议、实现SDN,不过就...

博科网络矩阵助Skilled Group“时刻在线”

澳大利亚最大的劳动力解决方案提供商SkilledGroup采用博科以太网和光纤通道存储区域网络(SAN)矩阵部署了一个创新的网络,从而打造了一个“时刻在线”的IT基础架构。博科矩阵实现了零停机环境以...

博科基于OpenDaylight推出SDN控制器Vyatta

ZDNET网络频道09月23日编译:博科周一宣布推出Vyatta控制器。Vyatta是博科SDN产品系列中一个新的主打产品。博科表示,Vyatta控制器是一步一步的从OpenDaylight项目中...

浏览器https方式访问博科FC光交显示没有匹配的加密算法套件

浏览器https方式访问博科FC光交显示没有匹配的加密算法套件报错的解决办法。。------------------------------------------------------------...

博科携手VMware推动软件定义数据中心和网络虚拟化的普及

2014年10月14日--博科(NASDAQ:BRCD)今天宣布,公司携手VMware,推出支持新IP的解决方案,以期让企业能够更轻松地迁移到软件定义数据中心(SDDC)和使用网络虚拟化。博科公司...

博科公司为追求速度极致的闪存拥趸提供光纤通道交换机

博科公司已经发布了一款每秒32Gbit第六代光纤通道交换机,这意味着其能够将现有每秒16Gbit连接速度提升一倍。其G620交换机采用1U机箱,提供24到64个端口,据博科方面所言这已经达到当前业...

博科推出第6代交换机 扩大光纤存储地位

博科今天宣布推出业内第一台第6代光纤通道存储网络交换机——博科G620,进一步扩大了博科在光纤通道技术领域的地位。这一全新专用且高密度SAN交换机提供突破性的性能和高可扩展性,旨在支持来自核心应用的数...

微信官宣新功能上线,聊天记录备份、迁移更好用了!

说到手机里哪个App最占空间,很多用户的答案大概都是微信,动辄占用几十甚至上百GB。不仅App本身体积庞大,更主要的是日积月累的聊天记录导致了空间的迅速消耗。此前,释放微信空间的常用方法是将...

局域网沟通工具--BeeBEEP(局域网内部聊天工具)

原文链接:局域网沟通工具--BeeBEEPHello,大家好啊!今天给大家带来一篇关于在信创终端上使用BeeBEEP的文章。BeeBEEP是一款安全、便捷的局域网即时通讯工具,支持文字聊天、文...

企业 IM 即时通讯底座,支持局域网通讯

在数字化浪潮下,企业对即时通讯的需求日益增长,尤其是对通讯安全性、可控性的要求愈发严苛。BeeWorks作为专业的企业IM即时通讯底座,凭借对局域网通讯的支持,为企业打造了优质可控的即时通讯与实...

IM即时通讯软件,构建企业局域网内安全协作

安全与权限:协同办公的企业级保障在协同办公场景中,BeeWorks将安全机制贯穿全流程。文件在局域网内传输与存储时均采用加密处理,企业网盘支持水印预览、离线文档权限回收等功能,防止敏感资料外泄;多人...

当今信息化时代都离不开WLAN, 今天给大家普及一下WLAN知识

无线局域网(WirelessLocalAreaNetworks/WLAN)一.无线让网络使用更自由:1.凡是自由空间均可连接网络,不受限于线缆和端口位置。二.无线让网络建设更经济:1.终端...

软网推荐:寻找WebQQ替代者 在线可以继续聊

不少公司禁止上班聊天,常常采取封禁QQ、关闭端口等方法,导致很多聊天软件无法使用。以前我们可以通过WebQQ绕开限制,不过WebQQ在2019年1月1日开始停止服务,想要继续隐蔽聊天,就只能找其他一些...

搭建自己的聊天室平台、公司内部聊天平台,Rocket.Chat搭建使用

一,简介rocket.chat是一个开源的社交软件,即可以直接在web页面使用,也可以下载APP(Android,IOS,Windows,MacOS)主要功能:群组聊天,直接通信,私聊群,桌面通知...

取消回复欢迎 发表评论: