loadrunner下载登陆脚本里为什么找不到web_submit_form,无法参数化。

<span style="font-size:16 color:#、loadrunner如何选择协议?
lr是一种基于协议的工具,在录制时VuGen会捕获客户端和服务器之间的通信数据包。LR的录制和WR不一样,它不关心你的对象识别什么的,不关心你的什么窗口之类的,LR有一个Agent进程,来专门监控客户端和之间的通信,然后用自己的函数进行录制。所以说,LR录制的时候关心的是通信,是客户端和之间的数据包。
<span style="font-size:16 color:#、进入recording标签页之后可以看到web(http/html)协议共有两种录制方式:“HTML-based script”和“URL-based script”。“HTML-based script”默认模式,为每个用户请求生成单独的函数,“URL-based script“录制所有的客户端请求和从服务器返回的资源,捕获所有作为用户操作的结果发送到服务器的HTTP请求,然后一一记录下来。可以捕获非HTML应用程序,例如小程序和非浏览器应用程序。
HMTL录制级别会为每一个HTML用户动作产生一个单独的步骤。而且HTML方式产生的脚本非常简洁和直述,易于阅读。
URL录制级别把对服务器每个对象的请求,都录制成一个单独的请求。对业务过程有更好的控制。
什么时候应该选择HTML-based script,什么时候应该选择URL-based script呢?一般来说,如果是标准使用IE访问的B/S架构,应使用HTML-based script方式。如果是一个非IE标准的C/S架构,建议使用URL-based script来录制脚本,这样可以确保不会遗漏任何HTTP请求。但有时候基于B/S架构的应用程序使用了javascript或者https安全协议之类的,也应该用URL-based
script,而不是HTML-based script。
总之,简单的方法是如果使用HTML-based script模式录制后不能成功回放,则考虑改用URL-based script模式来进行录制。
<span style="font-size:16 color:#、 如果选择了HTML-based script模式后,Script type提供了基于HTML方式下的两种不同的脚本类型:基于解释用户行为的脚本和基于URL请求的脚本。使用HTML-based script下的A script describing user actions好处是脚本简洁,基于用户操作进行模拟,浅显易懂,并且自身就包含了对象检查过程,无须校验。其缺点是当页面中存在多个同名链接时难以区分,此时就要用到另外一种脚本模式:A
script containing explicit URLs only。
<span style="font-size:16 color:#、分析脚本
此为用使用HTML-based script下的A script describing user actions录制的脚本
web_url(&WebTours&,
&URL=http://localhost:1080/WebTours/&,
&Resource=0&,
&RecContentType=text/html&,
&Referer=&,
&Snapshot=t1.inf&,
&Mode=HTML&,
lr_think_time(10);
web_submit_form(&login.pl&,
&Snapshot=t2.inf&,
&Name=username&, &Value=joy&, ENDITEM,
&Name=password&, &Value=1234&, ENDITEM,
&Name=login.x&, &Value=38&, ENDITEM,
&Name=login.y&, &Value=5&, ENDITEM,
web_image(&Search Flights Button&,
&Alt=Search Flights Button&,
&Snapshot=t4.inf&,
web_image(&SignOff Button&,
&Alt=SignOff Button&,
&Snapshot=t9.inf&,
return 0;###表示函数正常结束退出,return -1则说明函数错误退出。
函数详解:
web_link()和web_url()函数都是页面访问型函数,实现HTTP请求中的GET方法。
web_submit_form()和web_submit_data()函数,实现HTTP请求中的POST方法。
web_link()函数
web_link()函数功能描述:
此函数用来模拟用户单击一个超链接的操作。VuGen会记录访问页面后服务器返回的内容中有多少个超链接。
当使用web_link()函数时,只要写出正确的链接名,VuGen会自动查找并访问页面中该链接名所指向的URL地址。此函数是使用A script describing user actions选项才可以得到的。
web_link()函数的基本语法:
web_link(&在测试结果中显示的名称&,
&TEXT=需要单击的超链接名&,
&Ord=要点击的同名链接的序号&,
&Snapshot=该操作后的内容被抓图保存到的文件&,
a、Ord关键字中,同名链接的先后顺序是根据HTML代码的解释顺序来确定的。(从左往右,从上往下)
b、此函数本身就包含了对象检查过程,无须校验。(如果:TEXT后面的文字不存在,即报错)
c、web_link函数要求第一个逗号前的内容必须是字符串。
d、最后的LAST表示这个函数的结束。
web_link()函数示例:
web_link(&link_name&,
&TEXT=click me here&,
&Snapshot=t3.inf&,
web_url()函数
web_url()函数功能描述:
此函数用来模拟用户请求,它也是在脚本中最常使用的函数之一。
web_url()函数的基本语法:
web_url(&在测试结果中显示的名称&,
&URL=需要访问的超链地址&,
web_url()函数示例:
web_url(&东方财富网&,
a、在录制出来的web_url()或者web_link()函数中,经常还能看到如下所示的大量内容:
&URL=../bite.jpg&,&Referer=&,ENDITEM,
这一段内容说明在载入这个页面时还有其他图片或者附属资源需要下载。
web_submit_form()函数
功能描述:
该函数会自动检测当前页面上是否存在form,如果存在则将后面ITEMDATA数据进行传送。
web_submit_data()函数
功能描述:
与web_submit_form()函数不同,web_submit_data()函数无须前面的页面支持,直接发送给对应页面相关数据即可。
其中,Action说明提交表单的处理页面,Method表明提交数据的方式。
当使用此函数时,隐藏表单中的数据也会被记录下来作为ITEMDATA数据提交给服务器。
web_custom_request()函数
也是经常被用到的一个函数,当请求比较特别时,VuGen无法简单使用以上4个函数进行表述,那么录制后便会出现此函数。
这个函数的作用是自定义HTTP请求规则,该函数更适合在使用自定义的HTTP请求规则中处理二进制内容。
<span style="font-size:16 color:#、以LR开头的函数是loadrunner自带的基础函数,而以web开头的函数是指Web Vuser script函数,用来模拟用户行为。在脚本中的任何系统函数中,都不能使用C语言元素,在系统函数之间可以任意使用C语言内容。
<span style="font-size:16 color:#、在运行设置(run-time-setting)中,有个选项是Pacing,设置每次迭代之间的等待时间。简要说明两种方式之间的区别,With是指前一次Ending Iteration到下一次Start Iteration之间的时间。而At是指前一次Starting Iteration到下一次Ending Iteration之间的时间,所以At包含了前一次迭代执行的时间。
<span style="font-size:16 color:#、Log下面的扩展日志中选项parameter substitution,这一选项是将参数赋&#20540;操作作为日志输出。
<span style="font-size:16 color:#、录制完脚本并回放无误时要在VuGen中进行参数化设置和runtime运行时设置
参数化—parameter list
而在多用户执行脚本时,如果需要修改脚本执行的iteration,必须在controller的run-time-settings中进行修改,而不能修改VuGen中的run-time-settings。在多用户的情况下就不能使用顺序取&#20540;的方式来实现多用户操作,否则会有大量的用户操作是多余无效的。
<span style="font-size:16 color:#、
什么时候需要做关联
要想弄清这个问题,我们首先要知道客户端与服务器端的请求与响应的过程
过程说明:
客户端发出获得登录页面的请求
服务器端得到该请求后,返回登录页面,同时动态生成一个SessionId
当用户输入用户名密码,请求登录时,该SessionId同时被发送到服务器端
如果该Session Id在当前会话中有效,那么返回登录成功的页面,如果不正确则登录失败
在第一次录制过程中loadrunner把这个&#20540;记录了下来,写到了脚本中,但再次回放时,客户端发出同样的请求,而服务器端再一次动态的生成了Session Id,此时客户端发出的请求就是错误的,为了获得这个动态的Session
Id我们这里用到了关联。
所以我们得出结论:
当客户端的某个请求是随着服务器端的相应而动态变化的时候,我们就需要用到关联
当然我们在录制脚本时应该对测试的项目进行适当的了解,知道哪些请求需要用到服务器响应的动态&#20540;,如果我们不明确那些&#20540;需要做关联的话,我们也可以将脚本录制两遍,通过对比脚本的方法来查找需要关联的部分,但并不是说两次录制的所有不同点都需要关联,这个要具体情况具体分析。
关联能够帮助我们将服务器返回的数据进行处理并保存为参数,关联分为手动关联和自动关联、还有一边录制一边关联。自动关联是最简单的,点击Vuser菜单的scan script for correlations选项即可。手动关联是先找出两次脚本的不同,判断是否需要关联,通过web_reg_save_param()函数来实现的。此函数是通过一种规则将服务器的返回保存到一个参数中。
<span style="font-size:16 color:#、检查点:
文本检查点:web_reg_find()文本检查点函数提供了一种对服务器返回内容进行查询的功能,和关联的不同之处在于检查点函数只能返回检索到内容的次数。如果服务器返回的不是期望的内容,就说明服务器无法提供正常的服务了。因为VuGen区分脚本是否回放正确的标准就是只要页面返回了,VuGen都不会提示错误,而有时候页面返回了,并不代表回放正确,比如在平时,我们使用其他系统时,在系统出错之后,它为了提升用户感受一般都不会返回错误页面,而是返回一个提示框说系统忙,请稍后。
<span style="font-size:16 color:#、
在controller中使得执行脚本的用户从单人转化为众人,从而模拟大量用户操作,进而形成负载。
所谓目标场景就是设置一个运行目标,通过controller的auto load功能进行自动化负载,如果测试的结果达到目标,则说明系统的性能符合测试目标,否则就提示无法达到目标。而手工场景则是自行设置虚拟用户的变化。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:52721次
排名:千里之外
原创:21篇
转载:22篇
评论:11条
(1)(1)(2)(2)(4)(8)(4)(1)(2)(9)(6)(1)(2)LoadRunner创建测试脚本(转) - fyy1876的测试学习基地 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园 - Powered by X-Space
LoadRunner创建测试脚本(转)
& 16:27:21
/ 个人分类:
第2章入门LoadRunner是一个强有力的压力工具。它的脚本可以录制生成,自动关联;测试场景可以面向指标,多方监控;测试结果可以用图表显示,并且可以拆分组合。作为专业的工具,通过模拟成千上万的用户对被测系统进行操作和请求,能够在实验室环境中重现生产环境中可能出现的业务压力,再通过测试过程中获取的信息和数据来确认和查找软件的性能问题,分析性能瓶颈。2.1& LoadRunner创建测试脚本开发LoadRunner脚本需要经过图2-1所示的几个步骤。在录制脚本时要遵循以下录制原则:1.提高脚本执行效率所录制的脚本内容要精练,而且是用户的真实操作,不可增加多余或重复性的操作,这样的脚本执行起来更能准确地模拟用户的真实行为,减少了执行时间,执行结果更准确。2.录制具有代表性的功能在一个软件中有很多不同的功能,但要录制所有的功能几乎是不可能的,所以要选择常用的、使用频率较高的业务功能来进行测试。3.选择具有影响的事务测试人员要对被测功能具有一定的认识和了解,选择一些对于整个测试过程中有影响的事务来测试,否则测试结果是无意义的。当启动Visual User Generator后会出现选择脚本类型的对话框,在此对话框中,请选择我们常用的脚本类型,也就是(HTTP/HTML)协议,这是最为常见的。以下脚本介绍以此类型为例。2.1.1& 录制普通脚本启动Visual User Generator,在弹出的对话框中选择需要新建的协议脚本,通过VuGen可以采用单协议或多协议模式,进行脚本的录制。选择单协议还是多协议,根据测试程序的实际需要而定。1.选择协议采用单协议模式时,VuGen将只录制指定的协议;采用多协议模式时,VuGen将录制多个协议中的操作。下列协议支持多协议脚本:COM、FTP、IMAP、 NCA、POP3、RealPlayer、Window Sockets(原始)、SMTP和Web。“双协议Web/Web Services”的引擎使用一种不同的机制,应视为单协议,不能与多协议类型结合使用。各种Vuser类型之间的另一个区别是多操作支持功能。大多数协议都可支持多个操作部分,如Oracle NCA、Web、RTE、General(C Vusers)、WAP、i-Mode 和VoiceXML等协议。对于大多数Vuser类型,在每次录制时都会新建一个Vuser脚本,而不能在现有脚本中进行录制。但是,在录制Java、CORBA-Java、RMI-Java、Web、WAP、i-mode、Voice XML、Oracle NCA或RTE Vuser脚本时,可以在现有脚本中进行录制。创建脚本时,单击“New”(新建)打开“New Virtual User”(新建Vuser)对话框,该对话框可提供选择录制脚本协议的快捷方式。(1)单协议脚本:创建单协议Vuser脚本,这是“Startup”(启动)对话框打开时的默认选项。从Vuser生成器的“类别”中进行选择,并选择录制脚本的协议,如图2-2所示。图2-2& 选择单协议脚本(2)多协议脚本:创建多协议Vuser脚本,VuGen将显示所有可用的协议。选择一个协议后,单击右箭头,将其移入“Selected Protocols”(选定的协议)部分中,如图2-3所示。图2-3& 选择多协议脚本(3)使用最近使用过的协议新建脚本:从最近创建脚本的协议中选择已经使用过的协议,并且这些协议已经体现了录制脚本类型,如图2-4所示。图2-4& 选择最近使用的协议2.开始录制假设需要测试的是Web应用,选择“Web(HTTP/HTML)”协议,单击“OK”按钮确定后,进入主窗体,如图2-5所示。图2-5& 录制结果的主窗体单击工具栏中“Start Record”按钮,根据录制的对话框,输入要测试程序的地址,开始进行录制。通过“Vuser”菜单来启动录制脚本的命令,如图2-6所示。图2-6& 选择录制按钮也可以在工具栏中直接单击“Start Recording”按钮,但录制之前还要进行相应的设置,如图2-7所示。图2-7& 录制配置界面(1)环境设置首先,勾选“Record the application startup”,单击“OK”后,就会自动启动要测试的程序,还可以选择要把录制的脚本放到哪一个部分,默认情况下是“Action1”。然后,单击左下角的“Options”按钮,进入录制环境设置界面,如图2-8所示。&#376;&& “Recording”标签页:默认情况下选择“HTML-based Script”,说明脚本中采用HTML页面的形式,这种方式的Script脚本容易维护和理解,推荐用这种方式录制。“URL-based Script”说明脚本中的表示采用基于URL的方式,WAS和ACT中的录制方式就是这种,这种方式看上去比较乱。其他标签页功能说明如下,如有需要可作相应的设置。&#376;&& “Browser”标签页:浏览器的选择。&#376;&& “Recording Proxy”标签页:浏览器上的代理设置。图2-8& 环境设置界面&#376;&& “Advanced”标签页:可以设置录制时的思考时间(Think Time)、支持的字符集标准等。&#376;&& “Correlation”标签页:手工设置关联,通过关联可在测试执行过程中保存动态值。使用这些设置可以配置VuGen在录制过程中执行的自动关联的程度。(2)脚本内容在录制过程中,可以单击“Pause”(暂停录制)按钮,在脚本中插入事务、注释和集合,防止在录制完成后再插入这些事务找不到具体位置。当业务流程完成后,单击“Stop”(停止录制)按钮,会自动生成脚本,退出录制过程,如图2-6所示。单击“Save”(保存)按钮,起个与实际业务有关系的名字,保存到相应的位置。使用VuGen录制之后生成的每个Vuser脚本都至少包含vuser_init、一个或多个Actions及vuser_end等三部分。在通常情况下,将登录到服务器的活动记录在vuser_init部分中,将客户端活动录制到Actions部分中,并将注销过程录制到vuser_end部分中。因为运行多次迭代的Vuser脚本时,只有脚本的Actions部分重复,而vuser_init和vuser_end部分将不重复。脚本图例如图2-9所示。图2-9& 脚本图例在录制脚本期间,发出的消息可以通过来查看,选择“View”&“Output Window”,然后选择“Recording Log”选项卡。可以在“Run time Setting”的“Log”选项卡中设置该日志的详细级别,如图2-10所示。图2-10& 录制日志录制时,VuGen会创建一系列配置、数据和源代码文件。这些文件包含Vuser运行时和设置信息。VuGen会将这些文件连同脚本一起进行保存。至此,一个完整的Vuser脚本录制完成。多协议脚本的录制与单协议脚本的录制过程基本相同,只是比单协议脚本的录制多一个选项界面,如图2-11所示。在此界面中单击协议,可以进行添加和删除协议的操作。在协议前的复选框中打对号,即为选中,否则删除。图2-11& 添加协议2.1.2& 录制Web Services脚本在进行性能测试时,大部分对Web性能测试,选择“Web(HTTP/HTML)”协议即可,但录制完脚本后,回放脚本过程中有时会发生中断或停止的情况,查看错误时,如果无法找到SOAP文件字样时,就需要考虑更换脚本录制协议了。通常首先考虑更换Web Services协议,再次录制脚本,问题就相应解决了。在录制Web Services脚本前,首先对Web Services做一个简要的介绍,这样有助于读者或者测试人员能够更好地利用Web Services协议录制脚本。1.什么是Web ServicesWeb Services是一种构建应用程序的普通模型,并能在所有支持Internet通信的上实施运行。Web Services令基于组件的开发和Web的结合达到最佳,基于组件的对象模型,如:分布式组件对象模型(Distributed Component Object Model, DCOM)、远程方法调用(Remote Method Invocation, RMI)、互联网内部对象请求代理协议(Internet Inter-Orb Protocol, IIOP)都已经发布很长时间,但是它们都依赖于特殊对象模型协议。而Web Services利用SOAP和XML对这些模型在通信方面作了进一步的扩展,以消除特殊对象模型的障碍。进一步地,Web Services还基于HTTP和SOAP协议,使得Web用户通过Web调用的方法使用SOAP和HTTP来调用远程对象,确保业务数据得以在Web上传输。2.Web Services结构客户根据WSDL描述文档,会生成一个SOAP请求消息。Web Services都是放在Web服务器(如IIS)后面的,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到Web服务器,Web服务器再把这些请求转发给Web Services请求处理器。请求处理器的作用在于,解析收到的SOAP请求,调用Web Services,然后再生成相应的SOAP应答。Web服务器得到SOAP应答后,会再通过HTTP应答的方式把信息送回到客户端。3.Web Services体系Web Services体系主要包括以下几个方面:(1)Web Services包括3种组件。服务提供者:提供服务,进行注册以使服务可用;服务代理者:服务交换所,服务提供者和服务请求者之间的媒体;服务请求者:向服务代理请求服务,调用这些服务创建应用程序。(2)Web Services提供3种操作。发布/不发布(Publish/Unpublish):服务提供者向服务代理者发布(注册)服务或不发布(移去)这些服务的注册;发现(Find):由服务请求者向服务代理者执行发现操作,服务请求者描述要找的服务,服务代理者分发匹配的结果;绑定(Bind):在服务请求者和服务提供者之间绑定,这两部分协商以使请求者可以访问和调用提供者的服务。(3)UDDI规范统一描述、发现和集成(Universal Description Discovery and Integration, UDDI)是一个Web Services的信息注册规范,基于UDDI的Web Services注册可以被发现。UDDI的核心部分是UDDI业务登记逻辑,即在Web上有一种分布的注册服务,这种服务以一种通用的XML格式进行描述。通过XML中的结构化描述,可以很方便地在互联网上发现需要的数据,进而方便进行分析和操作。从概念上看,一个UDDI业务登记逻辑所提供的信息包括三个部分:“白页”包括地址、协议和已有标识;“黄页”包括基于分类标准的工业类型;“绿页”是关于企业所包含的服务技术信息,包括网络服务说明参考和根据发现机制对各种文件和网址提供的标识支持。(4)网络服务描述语言(WSDL)网络服务描述语言(Web Services Description Language, WSDL)遵循XML语法,为服务提供者提供了描述构建在不同协议或编码方式之上的Web Services请求基本格式的方法。WSDL用来描述一个Web Services能做什么,它的位置在哪里,如何调用它等。在假定以SOAP/HTTP/MIME作为远程对象调用机制的情况下,WSDL会发挥最大作用。UDDI注册描述了Web Services绝大多数方面,包括服务的绑定细节。WSDL可以看作是UDDI服务描述的子集。WSDL将服务定义为一个网络端点的集合,或者说端口的集合。在 WSDL 里面,端点及消息的抽象定义与它们具体的网络实现和数据格式绑定是分离的。这样就可以重用这些抽象定义:消息(需要交换的数据的抽象描述)和端口类型(操作的抽象集合)。针对一个特定端口类型的具体协议和数据格式规范构成一个可重用的绑定。一个端口定义成网络地址和可重用的绑定的连接,端口的集合定义为服务。因此,一个WSDL文档在定义Web Services时使用如下的元素:类型——使用某种类型系统定义数据类型的容器;消息——通信数据抽象的有类型的定义;操作——服务支持动作的抽象描述;端口类型——操作的抽象集合,该操作由一个或多个端点支持;绑定——针对一个特定端口类型的具体协议规范和数据格式规范;端口——单一的端点,定义成一个绑定和一个网络地址的链接;服务——相关端点的集合。不难看出,WSDL给客户提供了一个模板,方便客户描述和绑定服务。上面简单介绍了Web Services基本的知识,下面采用Web Services单协议进行简要的脚本录制,读者可结合录制脚本的过程进一步了解它,具体步骤如下:选择“开始”&“程序”&“LoadRunner”&“Virtual User Generator”(Vuser生成器),启动VuGen。在VuGen的“File”下拉菜单中选择“New”,新建一个脚本;从“Category”(类别)列表中选择“Web Services”协议,单击“OK”按钮开始录制Vuser脚本。首先配置Web Services录制向导,配置程序录制的方式。“Record Client Application”方式是通过客户端进行录制的,“Scan WSDL file”方式需要录入WSDL文件才可录制,在这里选择“Record Client Application”进行录制,如图2-12所示。“Specify WSDL files for recording”向导用于配置WDSL文件,由于选择“Record Client Application”的录制方式,所以在此选择“Do not use WSDL file during recording”,表示不利用WSDL文件进行录制,如图2-13所示。&&&图2-12& Web Services录制界面1&&&&&&&&&&&&& 图2-13& Web Services录制界面2“Specify application to record”向导用于配置程序的访问地址、浏览器和录制脚本中的一些初始化设置。在URL中添加测试程序的访问地址;如果程序需要其他的浏览器,选择“Record any application”进行其他浏览器的设置,这里不需要特殊的浏览器,所以不选择此项;“Record into action”选项用于指定把录制的脚本放到哪一个部分,一般初始化放在vuser_init中,循环部分在Action中,结束退出部分放在vuser_end中,如图2-14所示。如有需要请单击后面的“Advanced Details”按钮,可以详细地配置“Options Recording”用来录制脚本,这里不介绍Options Recording,在以后的章节中有详细的介绍。单击“完成”按钮即可完成Web Services的向导配置。然后VuGen将根据程序的访问地址自动启动应用程序,并显示“Recording…”(录制)工具栏,开始脚本的录制,如图2-15所示。图2-14& Web Services录制界面3图2-15 “Recording…”工具栏在整个操作过程完成后,单击“停止”按钮,脚本录制结束,LoadRunner自动把录制的内容保存在脚本中。在录制完毕的脚本中会出现一些函数,在后面章节中会详细介绍这些函数的使用方法。一个生成的Web Services的脚本节选如图2-16所示。图2-16& Web Services脚本图例这样就完成了Web Services单协议脚本的录制过程。2.1.3& 回放脚本及调试录制完脚本后,需要单机运行一下脚本,因为在录制脚本的过程中可能会出现错误。例如:有些连接、图片或界面无法找到,需要调试;有些地方需要参数化,只有唯一值才能执行通过;还有可能回放脚本时出现-404、-500等错误页面,发生超时等现象。这时就需要把这些问题解决掉。单击工具栏中的“Compile”按钮,查看脚本中是否有语法或者乱码错误,如果出现错误需要手工及时调试,如果没有错误,在执行日志中显示“No error detected”消息提示。然后,单击工具栏中的“Run”按钮,开始执行脚本,在执行脚本期间,同样可以通过日志来查看发出的一些消息。选择“View”&“Output Window”,再选择“Execution Log”选项卡。如果有错误,VuGen将会提示错误。双击错误提示,VuGen能够定位到出现错误的那一行,如图2-17所示。图2-17& 提示运行脚本错误单机运行测试脚本后,如果编译通过,就会开始运行,运行结果如图2-18所示。在每次单击回放脚本后,都会出现如图2-18所示的运行结果页。在结果页中可以清楚地看到脚本运行的情况,显示整个运行过程中出现成功、失败和警告情况各自的运行时间,并且记录下整个运行开始、结束的日期和时间。图2-18& 单机运行脚本结果如果整个运行过程成功,在页面的左侧是整个脚本的树型结构,显示出的每个脚本的控件名称前都有绿色对号的标志,例如图片、链接、提交表单等,如图2-19所示。图2-19& 运行成功时的结果页单击某个控件,在其右边便显示出其控件的页面或相应的运行步骤,如图2-20所示。图2-20& 显示运行成功步骤在此结果页中还可以检测脚本中控件或者其他错误,如果脚本回放出现错误的话,会在相应控件前出现红色叉号的错误提示,如图2-21所示。图2-21 &运行失败的结果页单击其控件后,在右边出现脚本未通过的具体原因,以便查找出错位置进行改正,如图2-22所示。图2-22& 定位运行失败脚本录制、调试完成后,还可以通过插入事务、集合点等操作来完善、增强脚本。2.1.4& 完善脚本为什么要完善增强脚本呢?首先,为了衡量服务器的性能,需要定义事务(Transaction)。例如在脚本中有一个数据查询操作,为了衡量服务器执行查询操作的性能,可以把这个操作定义为一个事务。这样在运行测试脚本时,LoadRunner运行到该事务的开始点时,就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在测试结果中会有反映。LoadRunner允许在脚本中插入不限数量的事务。在方案执行期间,控制台将测量执行每个事务所用的时间。方案运行后,可使用LoadRunner的图和报告来分析各个事务的服务器性能。其次,使用集合点是为了衡量在加重负载的情况下服务器的性能情况。在测试计划中,可能会要求系统能够承受多人同时提交数据,LoadRunner通过在提交数据操作前面加入集合点的方法,检查同时有多少用户运行到集合点,人数不足时,LoadRunner会命令已经到集合点的用户等待,当在集合点等待的用户达到要求容纳的人数(如1000人)时,LoadRunner向系统提交数据。在脚本中加入集合点后,控制台运行脚本时,可以对集合点进行策略设置,这样就可以根据实际情况在系统上模拟用户负载了。再次,在录制过程中最好加入注释,因为在录制完脚本后看到的都是脚本代码,操作复杂的业务无法找到相应的位置进行关联或者参数化的动作,这时,注释就显得尤为重要。最后,LoadRunner提供了很多函数,有些函数是在录制时根据不同的协议自带的函数。其中有些函数是供手工添加的,这就要根据实际情况进行添加了。例如脚本关联,有些变量无法实现系统自动关联,只能添加函数进行手动关联。在录制完成的脚本中,还可以根据实际情况,添加事务、集合点、注释、函数等内容来增强脚本,进一步完善。下面逐一进行介绍。1.插入事务脚本中插入事务既可以在录制过程中直接插入,也可以在脚本录制结束后经编辑插入。建议采用在脚本的录制过程中插入事务的方法,这样不至于遗漏程序中应插入事务的操作。在需要插入事务的操作前,通过工具栏上的“Start Transaction”(开始事务)按钮插入事务,事务的名称最好有意义,这样在最后分析系统时,有助于发现系统的瓶颈点是否在具体的事务中。具体的操作方法如下:在录制Vuser脚本时,在需要定义事务的操作前面,单击“录制”工具栏上的“Start Transaction”菜单项,将打开“Start Transaction”对话框,如图2-23所示。接着出现如图2-24所示的对话框。&&图2-23& 插入事务开始点&&&&&&&&&&&&&&&&&& &图2-24& 输入事务开始名称在给事务起名字时,事务名必须以字母或数字开始,可以包含字母、数字或者下列字符:!、$、%、&、'、-、[、^、_、`、&、&、{、}、|或~。填写好事务名称后,就可以对系统进行操作,单击“OK”接受该事务名称。VuGen将自动在Vuser脚本中插入事务的起始标志(“lr_start_transaction”)和终点标志(“lr_end_transaction”)。起点和终点之间的内容就是录制或者编写的测试事务脚本。在录制脚本过程中,随时可以单击“录制”工具栏上的“End Transaction”菜单项,结束录制,如图2-25所示。图2-25& 插入事务结束点此时会出现如图2-26所示的结束事务的对话框。单击“Transaction Name”下拉框的箭头获得已打开事务的列表,选择要关闭的事务。事务的状态在默认情况下是LR_AUTO。一般情况下,也不需要修改,除非在手工编写代码时,有可能需要手动设置事务的状态。单击“OK”按钮接受该事务名称。脚本中事务的代码如图2-27所示。&&& &&&&&&&&&&&图2-26& 选择要结束事务的名称&&&&&&&&&&&&&&&&&&&& &&&图2-27& 插入事务图例当结束事务时,通过工具栏上的“End Transaction”按钮,结束事务。在结束列表中会显示最近定义的事务的名称,只要选择自己新建的事务的名称即可结束该事务。这样就完成了事务的插入操作。2.插入集合点集合点只能在Action中插入,不能在vuser_init或vuser_end中插入。在需要插入集合点的操作前,通过工具栏上的集合点按钮插入集合点,并在集合点的输入框中输入集合点的名称。集合点的名称最好是有意义的名称,这样有助于在系统分析时,分析系统的瓶颈所在。插入集合点具体的操作方法如下:在录制Vuser脚本时,在需要插入集合点的位置,单击“录制”工具栏上的“集合点”按钮或单击“Insert”菜单下的“Rendezvous”子菜单。将打开“Rendezvous”(集合点)对话框,如图2-28所示。图2-28& 插入集合点接着,出现如图2-29所示的对话框。输入该集合点的名称,注意,名称最好能够清楚地说明该集合点所完成的动作。脚本中集合点的代码如图2-30所示。&&& &&&&图2-29& 输入集合点名称&&&&&&&&&&&&&& &图2-30& 插入集合点图例3.插入注释注释可以在录制脚本时插入,也可以在脚本录制后插入,其顺序对程序分析没有影响。在需要插入注释的操作前,通过工具栏上的“注释”按钮或者“Insert”菜单下的“Comment”子菜单插入注释。在“Insert Comment”对话框中输入对操作的注释,以便于对脚本的重复使用。在需要插入注释的位置,通过菜单或者工具栏操作,如图2-31所示。图2-31& 插入注释接着,出现如图2-32所示的对话框。脚本中注释的代码如图2-33所示。&&&&&&&&&&&&&&&&&图2-32& 输入注释内容&&&&&&&&&&&&&&&&&&& &&&&&&&图2-33& 插入注释图例4.插入函数在录制脚本的过程中,根据不同的协议,会用到不同的函数,在此介绍几个脚本中比较常见的函数,希望初学者能对插入函数的基本操作方法有大概的了解。详细的函数调用方法,会在第6章的“LoadRunner函数介绍”中说明,这里不再赘述。(1)web_custom_request:允许使用HTTP支持的任何方法来创建自定义HTTP请求。(2)web_image:在定义的图像上模拟鼠标单击。例子:web_image("46.gif","Src=frame/sapphire/image/tree/15/46.gif","Ordinal=2","Snapshot=t4.inf",EXTRARES,"Url=frame/sapphire/style/controls.css","Referer=http:// 192.168.1.10:7001/mail/login.do", ENDITEM,"Url=frame/sapphire/style/custom.css","Referer=http://192.168.1.10/mail/login.do ", ENDITEM, LAST);(3)web_link:在定义的文本链接上模拟鼠标单击。例子:&&& web_link("MAIL",&&& "Text= MAIL ",&&& "Snapshot=t3.inf",&&& EXTRARES,&&& "Url=frame/sapphire/style/menu.css","Referer=http://192.168.1.10:7001/mail/login.do ", ENDITEM,&&& "Url=frame/sapphire/style/panel.css","Referer=http:// 192.168.1.10:7001/mail/login.do ", ENDITEM, LAST);(4)web_submit_data:执行“无条件”或“无上下文”的表单。例子:web_submit_data("j_security_check","Action=http://192.168.1.121:10001/Application/j_security_check",&&& "Method=POST",&&&&&& "RecContentType=text/html",&&& "Referer=http://192.168.1.121:10001/Application/login. jsessionid=183D08E6C0C05A1310B70F.node1",&&& "Snapshot=t2.inf",&&& "Mode=HTTP",&&& ITEMDATA,&&& "Name=j_username", "Value=mayi", ENDITEM,&&& "Name=j_password", "Value=1", ENDITEM,&&& "Name=prelogon", "Value=登录", ENDITEM,&&& LAST);(5)web_submit_form:模拟表单的提交。例子:web_submit_form("zxlogin.do","Snapshot=t2.inf",ITEMDATA,"Name=username", "Value=001_yangzhifang", ENDITEM,"Name=password", "Value=1", ENDITEM,"Name=btnlogin", "Value=登录", ENDITEM,EXTRARES,"Url=frame/images/quick_1_01.gif","Referer=http://192.168.1.103:8080/Application/mail/fox/zxMain.jsp",ENDITEM,"Url=frame/images/quick_2_03.gif","Referer=http://192.168.1.103:8080/Application/mail/fox/zxMain.jsp",ENDITEM,LAST);(6)web_url:加载由“URL”属性指定的URL。例子:web_url("Application","URL=http://192.168.1.121:10001/Application","Resource=0","RecContentType=text/html","Referer=","Snapshot=t1.inf","Mode=HTTP",LAST);(7)web_add_cookie:添加新的Cookie或修改现有的Cookie。例子:web_add_cookie("cnt_uid_www=9f9ec92c0; DOMAIN=top2007.csdn.net");web_add_cookie("IMMsgID_d41d8cd98f00b204e9800998ecf8427e=70; DOMAIN=top2007.csdn.net");(8)web_set_timeout:指定Vuser等待执行指定任务的最长时间。2.1.5& 脚本回放问题解决在运行脚本回放过程中,有时会出现错误,这在实际测试中是不可避免的,毕竟自动录制生成的脚本难免会有问题,需要运行脚本进行验证,把问题都解决后才加入到场景中进行负载测试。下面结合常用的协议(如Web、Web Services协议)录制的脚本进行回放时出现的问题介绍一下解决的方法。需要注意的是,回放脚本时出现的错误有时是程序自身的原因导致的,因此在解决脚本回放问题前必须保证程序录制出的脚本是正确的。1.LoadRunner超时错误:在录制Web协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同。错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)。错误分析:对于HTTP协议,默认的超时时间是120秒(可以在LoadRunner中修改),客户端发送一个请求到服务器端,如果超过120秒服务器端还没有返回结果,则出现超时错误。解决办法:首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,再设置多次迭代运行,如果还有超时现象,需要在“Runtime Setting”&“Internet Protocol:Preferences”&“Advanced”区域中设置一个“winlnet replay instead of sockets”选项,再回放是否成功。错误现象2:Action.c(81):Continuing after Error -27498: Timed out while processing URL=http://172.18.20.70:7001/workflow/bjtel/leasedline/ querystat/ subOrderQuery.do错误分析:这种错误常常是因为并发压力过大,服务器端太繁忙,无法及时响应客户端的请求而造成的,所以这个错误是正常现象,是压力过大造成的。如果压力很小就出现这个问题,可能是脚本某个地方有错误,要仔细查看脚本,提示的错误信息会定位某个具体问题发生的位置。解决办法:例如上面的错误现象问题定位在某个URL上,需要再次运行一下场景,同时在其他机器上访问此URL。如果不能访问或时间过长,可能是服务器或者此应用不能支撑如此之大的负载。分析一下服务器,最好对其性能进行优化。如果再次运行场景后还有超时现象,就要在各种图形中分析一下原因,例如可以查看是否服务器、DNS、网络等方面存在问题。最后,增加一下运行时的超时设置,在“Run-Time Settings”&“Internet Protocol:Preferences”中,单击“options”,增加“HTTP-request connect timeout” 或者“HTTP-request receive”的值。2.LoadRunner脚本中出现乱码:在录制Web协议脚本时出现中文乱码,在回放脚本时会使回放停止在乱码位置,脚本无法运行。错误现象:某个链接或者图片名称为中文乱码,脚本运行无法通过。错误分析:脚本录制可能采用的是URL-based script方式,如果程序定义的字符集合采用的是国际标准,脚本就会出现乱码现象。解决办法:重新录制脚本,在录制脚本前,打开录制选项配置对话框进行设置,在“Recording Options”的“Advanced”选项里先将“Surport Charset”选中,然后选中支持“UTF-8”的选项。3.LoadRunner HTTP服务器状态代码:在录制Web协议脚本回放脚本的过程中,会出现HTTP服务器状态代码,例如常见的页面-404错误提示、-500错误提示。错误现象1:-404 Not Found服务器没有找到与请求URI相符的资源,但还可以继续运行直到结束。错误分析:此处与请求URI相符的资源在录制脚本时已经被提交过一次,回放时不可再重复提交同样的资源,而需要更改提交资源的内容,每次回放一次脚本都要改变提交的数据,保证模拟实际环境,造成一定的负载压力。解决办法:在出现错误的位置进行脚本关联,在必要时插入相应的函数。错误现象2:-500 Internal Server Error服务器内部错误,脚本运行停止。错误分析:服务器碰到了意外情况,使其无法继续回应请求。解决办法:出现此错误是致命的,说明问题很严重,需要从问题的出现位置进行检查,此时需要此程序的开发人员配合来解决,而且产生的原因根据实际情况来定,测试人员无法单独解决问题,而且应该尽快解决,以便于后面的测试。4.LoadRunner请求无法找到:在录制Web协议脚本回放脚本的过程中,会出现请求无法找到的现象,而导致脚本运行停止。错误现象:Action.c(41): Error -27979: Requested form. not found [MsgId: MERR-27979]Action.c(41): web_submit_form. highest severity level was "ERROR",0 body bytes, 0 header bytes& [MsgId: MMSG-27178]"这时在tree view中看不到此组件的相关URL。错误分析:所选择的录制脚本模式不正确,通常情况下,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用HTTPS安全协议,这时则使用“URL-based script”模式进行录制。解决办法:打开录制选项配置对话框进行设置,在“Recording Options”的“Internet Protocol”选项里的“Recording”中选择“Recording Level”为“HTML-based script”,单击“HTML Advanced”,选择“Script. Type”为“A script. containing explicit”。然后再选择使用“URL-based script”模式来录制脚本。5.LoadRunner不执行检查方法:在录制Web协议脚本中添加了检查方法Web_find,但是在脚本回放的过程中并没有执行。错误现象:在脚本中插入函数Web_find,在脚本中设置文本以及图像的检查点,但是在回放过程中并没有对设置的检查点进行检查,即Web_find失效。错误分析:由于检查功能会消耗一定的资源,因此LoadRunner默认关闭了对文本以及图像的检查,所以在设置检查点后,需要开启检查功能。解决办法:打开运行环境设置对话框进行设置,在“Run-time Settings”的“Internet Protocol”选项里的“Perference”中勾选“Check”下的“Enable Image and text check”选项。6.LoadRunner回放Web Services协议脚本错误:LoadRunner 8.0版本在录制Web Services协议的脚本时正常,但在回放时会出现错误,提示停止脚本运行。错误现象:利用LoadRunner 8.0版本来录制Web Services协议的脚本没有任何错误提示,回放脚本时会出现如下错误提示“Error:server returned an incorrectly formatted SOAP response”。错误分析:出现此错误的原因是LoadRunner8.0在录制Web Services协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为&?xml version="1.0"encoding="zh_cn" ?&,所以才会有此错误提示。解决办法:下载两个补丁,分别为“LR80WebServicesFPI_setup.exe”和“lrunner_web_ services_patch_1.exe”安装上即可。

我要回帖

更多关于 loadrunner视频教程 的文章

 

随机推荐