性能进阶测试指南.doc_第1页
性能进阶测试指南.doc_第2页
性能进阶测试指南.doc_第3页
性能进阶测试指南.doc_第4页
性能进阶测试指南.doc_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章用户行为模拟Virtual User Generator是一种基于录制回放的工具,当你按照业务流程执行了某个软件,它会将你在操作中产生的协议录制下来,自动转化成脚本,执行完成对用户行为的模拟,从而进一步对系统产生负载。而性能测试的第一步也是最重要的一步就是生成虚拟用户脚本(Vuser Script)。在VuGen中录制得到用户的行为就好比虚拟了一个用户的行为,所以我们称该模拟的用户为Vuser,而这个脚本称为Vuser Script。通常使用VuGen进行用户行为模拟的流程如图3.1所示。图3.1 VuGen用户行为模拟流程VuGen提供了整个脚本的开发环境,脚本决定了性能负载的方式。负载超出用户行为,可能得到的结果偏悲观;而负载如果只模拟了部分用户行为,那么最终的结果可能偏乐观。好比需要测试一下国家体育馆鸟巢的观众疏散能力,如果模拟8万老年人进行疏散,那么得出的结果肯定是需要很长的时间;而如果模拟8万男性青壮年进行疏散,得出的结论会相对较短,而这两个时间都无法正确地说明整个鸟巢的正常疏散时间。对于一个性能测试工程师来说,并不需要准确定位性能问题产生的原因,而应强调如何发现性能问题。这就像功能测试工程师并不需要准确定位缺陷产生的原因,而应强调如何发现缺陷。当然作为一名优秀的性能测试工程师,也应该具备性能瓶颈定位和分析的能力,不过这不是一朝一夕能做到的。打开VuGen会看到Start Page页面,这里提供了一些相关资源(包括常用的脚本、在线资源和VuGen 9.10的新功能)的介绍,如图3.2所示。图3.2 VuGen 9.10主界面3.1 VuGen界面介绍新建一个脚本,选择Web(HTTP/HTML)协议后,即可得到开发界面。在VuGen中提供了两种脚本视图方式(Script/Tree),可以通过菜单栏的对应按钮进行切换,也可以通过View菜单下的选项进行切换。3.1.1 Tree图形化模式在Tree图形化模式下,左侧会列出该脚本使用的函数(双击可以直接使用图形化修改函数),右侧提供了该请求对应的截图(自行编写的脚本和部分协议不会带有Snapshot截图),如图3.3所示。图3.3 Tree模式视图一般通过这种视图来检查录制是否正确或进行某些函数的图形化修改。3.1.2 脚本模式在脚本模式界面中,左侧是脚本Action的列表,右侧是代码部分。从开发方便的角度来说,一般使用这个模式的情况多一些,如图3.4所示。图3.4 脚本视图3.1.3 Output Window在屏幕的下方提供了Output Window,包含录制、回放、关联等相关信息的输出管理,如图3.5所示。图3.5 Output Window在脚本运行的时候,Output Window还会增加Runtime Data标签,里面包含了脚本运行时的参数名和值,还有脚本迭代的次数。VuGen中还提供了Tasks标签,这里提供了惠普公司建议的脚本录制开发流程,通过一个任务流的方式指导你进行性能测试。惠普建议使用RecordingReplayEnhancementsPrepare For Load的流程来进行代码开发。3.2 录制用户行为录制脚本是模拟用户行为的第一步,通过录制用户行为产生的协议从而生成Vuser Script。当我们对函数比较熟悉的时候,可以抛弃录制的过程,而采用手工编写。在大多数情况下,我们会在录制生成的脚本上根据实际需求进一步进行修改,这样效率更高。3.2.1 录制流程录制用户行为转化为脚本一般是按照以下步骤进行的,如图3.6所示。在开始菜单中找到LoadRunner程序项并打开Application,找到Virtual User Generator,选择文件菜单下的“新建”功能,创建脚本。3.2.2 协议选择在前面我们知道性能测试是基于协议的,所以首先要选择匹配的协议,如果协议错误将会导致无法录制用户行为,选择过多会导致录制内容的冗余,而选择不足又会导致漏录的情况发生。新建脚本首先需要选择协议类型,在VuGen中分为单协议和多协议两种情况。图3.6 VuGen录制流程单协议(New Single Protocol Script)在单协议情况下,所要录制的对象只使用唯一的协议,如图3.7所示。图3.7 单协议选择界面通过Category可以对协议进行分类,方便查找。多协议(New Multiple Protocol Script)在需要录制的对象使用多于一种协议的情况下,应该选择多协议,并且将这些协议都进行添加,否则会因为漏选协议而无法正常回放脚本,如图3.8所示。图3.8 多协议选择界面确定系统使用协议最简单的方法就是询问开发人员,特别是C/S架构使用的协议可能比较特殊,甚至有可能是自行开发的协议包规范。另外一种方法就是通过网络扫描工具拦截数据包,确定协议类型。由于绝大多数性能测试都是基于B/S架构下的HTTP协议,所以后面的章节主要针对HTTP,在高级脚本开发中会涉及部分非HTTP协议的脚本开发内容。3.2.3录制选项在选择合适的协议后准备开始录制,而选择不同的协议后弹出的录制窗口和录制选项也不尽相同。这里选择Web(HTTP/HTML)协议(模拟浏览器和Web服务器之间的协议交互),如图3.9所示。弹出StartRecording窗口,如果没有弹出可以使用Vuser菜单下的StartRecording或Ctrl+R组合键启动录制过程,如图3.10所示。图3.9选择Web协议图3.10StartRecording窗口(Internet应用)ApplicationsType首先需要设置的是Applicationtype,VuGen中提供了InternetApplications和Win32Applications两种应用的录制选项。InternetApplications:指需要录制的对象是一个网络应用(基于浏览器)。Programtorecord:指需要录制的程序名,VuGen默认支持的Web客户端是IE,也建议不要使用任何第三方的浏览器来录制,避免出现不兼容。从LoadRunner9.1版本开始已经能够很好地兼容IE7.0(最新版本9.5仍然没有提供对IE8.0的支持)。URLAddress:录制开始所需要访问的URL地址,也就是第一个请求所需要访问的页面。Workingdirectory:用来指定代码的工作目录。Win32Applications是用来支持Win32的标准客户端,如果客户端是自行开发的,请使用该选项,如图3.11所示。Programtorecord:需要录制的应用程序,我们可以通过后面的按钮将访问的应用程序添加进来。Programarguments:指程序参数,在某些应用程序后需要添加一些参数才能运行,这里提供的是填写参数的位置。图3.11StartRecording窗口(Win32应用)RecordintoAction:录制的内容会被存放在Action中,Action是VuGen提供的一种类似于函数的脚本块,通过将不同的操作存放在不同的Action中实现代码的高内聚低耦合。这里可以单击New按钮来新建Action。VuGen默认提供了以下3个Action:Vuser_initActionVuser_end这里可以先简单介绍一下这3个Action有什么不同,在LoadRunner中用户的初始化操作应该存放在Vuser_init中,用户的结束操作存放在Vuser_end中,因为这两个Action在后面的RunLogic默认设置中是处在脚本最先运行和最后运行的位置,并且在负载时Vuser_init和Vuser_end只会在开始和结束时被运行一次。而Action用来存放用户的操作,可以当做普通的函数在负载时会被反复运行。Recordtheapplicationstartup:单击OK按钮后VuGen会启动我们需要录制的应用,这个选项是指一旦启动了应用后就将开始录制应用收发的协议数据。为了确保录制出来的脚本简洁有效,在开始录制前需要对录制选项进行一定的设置。录制选项 在不同的协议下录制选项各不相同,这里介绍基于Web(HTTP/HTML)协议录制选项的设置,如图3.12所示。 图3.12HTML协议录制选项 General Script:基于Web(HTTP/HTML)协议的Vuser脚本是使用C语言作为标准的。在不同的协议下,所使用的语言也不相同。在Script选项中提供了一些对于脚本的基本设置。 例如这里可以通过Maximumnumberoflinesinactionfile设置每个Action中的最大代码行数。 Protocols:协议列表,在这里会列出录制前选中的所有协议,通过修改协议前的选项来决定使用什么协议来录制脚本,在多协议的时候可以通过这个功能切换录制所使用的协议或补录某些协议的内容,如图3.13所示。 Recording:录制选项用于设置Web(HTTP/HTML)使用什么样的录制方式来获得脚本,这里提供了两大类的录制方式,如图3.14所示。 HTML-basedScript:这种方式录制出来的脚本是基于HTML的,以HTML操作为录制级别,非HTML操作不进行录制。由于现在使用的B/S架构网站都是基于HTML,也就是说访问的页面都是从一个HTML跳转到另外一个HTML,那么录制的时候只需要得到针对HTML的请求即可。 图3.13协议激活列表图3.14录制级别选项 下面打开HTMLAdvanced高级选项,弹出如图3.15所示的对话框。 图3.15HTML-basedscript高级设置 Scripttype提供了基于HTML方式下的两种不同的脚本类型。下面将一一介绍:1高级选项下的Script type脚本类型选项 A script describing user actions基于解释用户行为的脚本,后面提示使用类似web_link、web_submit_form等的函数,这种脚本录制出来有些类似于QTP,具体描述了用户进行了什么操作。现在我们使用这种方式录制一个脚本(打开Web Tours网站,然后单击sign up now),录制完成后可以得到以下脚本:下面我们简单分析一下这个脚本的组成。这个函数是由LoadRunner提供的,根据函数的名称也可以大概猜到其功能,函数web_add_cookie()主要负责为Vuser脚本添加一个cookie信息。这个函数的内容很多,不过从URL=:1080/WebTours/可以看出实现访问网站首页是通过这个函数实现的,也就是说在地址栏里输入地址后按回车键的操作其实就是进行了这个函数的模拟请求。web_link是使用A script describing user actions选项才可以得到的,这个函数就是单击sign up now连接的操作,在这个函数中说明了需要单击的链接名。补充:web_link()函数详解web_link()函数用来模拟用户单击一个超链接的操作。VuGen会记录访问页面后服务器返回的内容中有多少个超链接。当使用web_link()函数时,只要写出正确的链接名,VuGen会自动查找并访问页面中该链接名所指向的URL地址。web_link()函数的基本语法如下所示:web_link(“在测试结果中显示的名称”,“TEXT=需要单击的超链接名”,LAST); 在测试结果中显示的名称也被称作步骤名,在测试结果中显示的名称是指在脚本运行完成后,打开Test Result,在link函数后的名称(此处为sign up now),如图3.16所示。图3.16 Test Result执行步骤这是通过web_link(“sign up now”,.)来实现的,我们能够在测试结果中方便、快速地定位。 需要单击的超链接名单击的链接是通过Text=来说明的,等号后的内容就是需要单击的链接。这里需要注意,如果Text后的链接名不存在,那么就会得到以下错误:该错误信息提示单击的signupnow这个链接不存在,整个web_link函数是错误的。“Snapshot=t2.inf”用来说明该操作后的内容会被抓图保存到文件t2.inf中。最后的LAST表明这个函数的结束。例如:想要该脚本去点击WebTours首页上的administration链接,我们只需要将web_link函数修改为:回放脚本看看是否正确通过,并进入管理页面。思考:如果一个页面中有多个同名的链接,使用web_link()该如何处理?Ord这个关键字可以帮助你,在VuGen中很多函数都使用这个参数来判断对象的次序。例如要单击页面上的第二个链接,那么可以这样写:在这里需要注意,同名链接的先后顺序是根据HTML代码的解释顺序(从左往右,从上往下)来确定的。使用HTML-base script下的A script describing user actions好处是脚本简洁,基于用户操作进行模拟,浅显易懂,并且自身就包含了对象检查过程,无须校验。其缺点是当页面中存在多个同名链接时难以区分。所以我们建议使用下面一种脚本模式:A script containing explicit URLs only (e.g. web_url, web_submit_data)。小练习:尝试使用该录制方式录制MsPetshop购物网站首页单击一个链接的脚本。录制后在脚本中可以看到如下的内容:这是单击BIRDS链接所带来的结果,在前面说过Text=后的内容是所单链接的正文,那么为什么明明界面上该链接名显示的是“BIRDS”,但这样写脚本回放会提示“无法找到这个链接”,而写成“Birds”就可以成功呢?如果仔细查看一下MsPetshop网站的源代码,就会发现这个链接确实是Birds,但为什么看到的是BIRDS呢?检查一下该网站的CSS文件就会明白了。VuGen脚本都是针对HTML源代码操作的,到底web_link如何识别单击对象的呢?或者这类脚本中的对象识别是如何做到的?在录制后的脚本中切换到Tree模式,如图3.17所示。这里可以看到在录制后的内容中有几个标签,除了web_url()请求发送后的页面返回截图,还有两个标签,一个是Client Request,另一个是Server Response,在这两个标签中的内容就是VuGen录制的客户端发给服务器端的HTTP请求格式和服务器返回的HTTP请求内容。选择Server Response标签,可以看到返回内容的格式分解,如图3.18所示。图3.17 Tree模式下的Page View图3.18 Tree模式下的Server Response在这里可以看到Form的说明和Links的内容,而web_link()和web_submit_data()能够识别对象的基础就是这里的服务器返回内容分解,也就是说能够单击的链接一定在这个Links内。这就是VuGen的对象识别技术和对象库。 A script containing explicit URLs only该选项确定基于URL请求的脚本录制类型。与基于用户行为模拟的不同之处在于,这种录制方式不考虑任何用户操作,只考虑客户端发送的请求,注重系统实际上做了什么。将脚本类型切换为这种形式,然后录制和前面在Web Tours上点击链接操作相同的例子,停止后会得到以下脚本。1. web_add_cookie(login=admin%2Czh; DOMAIN=);2.3. web_url(WebTours,4. URL=:1080/WebTours/,5. TargetFrame=,6. Resource=0,7. RecContentType=text/html,8. Referer=,9. Snapshot=t1.inf,10. Mode=HTML,11. LAST);12.13. web_url(sign up now, URL=:1080/WebTours/login.pl?username=&password=&getInfo=true,14. TargetFrame=body,15. Resource=0,16. RecContentType=text/html,17. Referer=:1080/WebTours/home.html,18. Snapshot=t2.inf,19. Mode=HTML,20. LAST);看看有什么不同的地方,web_link()函数被web_url()替代了,前面提过web_url()函数的作用是实现地址请求的过程。补充:web_url()函数详解web_url()函数可以模拟用户请求,它也是在脚本中最常使用的函数之一。web_url()函数的基本语法如下所示:web_url(在测试结果中显示的名称,URL=需要访问的超链地址,LAST);和web_link不同的地方在于这里只需要在URL=后填写需要访问的地址即可,和在IE地址栏中输入的内容相同,使用web_url的好处是没有任何请求的前后依赖关系,只负责发送一个标准的Get HTTP请求。如果需要访问51Testing论坛,可以直接这样写:1. web_url(51testing,URL=,LAST);除了以上这些元素,在录制出来的web_link或者web_url函数中经常还能看到如下所示的大量内容:1. EXTRARES2. Url=./bite.jpg, Referer=00, ENDITEM,3. Url=./title.gif, Referer=00, ENDITEM,4. 这一段内容说明在载入这个页面时还有其他图片或者附属资源需要下载。web_link()和web_url()函数都是页面访问型函数,实现HTTP请求中的GET方法,如果需要提交表单,实现HTTP请求中的POST方法,那么需要使用web_submit_form()或web_submit_data()函数。补充:web_submit_form()函数详解该函数会自动检测在当前页面上是否存在form,然后将后面的ITEMDATA数据进行传送。例如录制在Web Tours网站上登录操作,可以得到以下代码:1. web_submit_form(login.pl,2. Snapshot=t3.inf,3. ITEMDATA,4. Name=username, Value=admin, ENDITEM,5. Name=password, Value=123456, ENDITEM,6. Name=login.x, Value=0, ENDITEM,7. Name=login.y, Value=0, ENDITEM,8. LAST);隐藏的表单数据系统会自行发送。补充:web_submit_data()函数详解和web_submit_form()函数不同,web_submit_data()函数无须前面的页面支持,直接发送给对应页面相关数据即可。录制Web Tours网站登录,代码会变为:1. web_submit_data(login.pl,2. Action=:1080/WebTours/login.pl,3. Method=POST,4. TargetFrame=body,5. RecContentType=text/html,6. Referer=:1080/WebTours/nav.pl?in=home,7. Snapshot=t5.inf,8. Mode=HTML,9. ITEMDATA,10. Name=userSession, Value=100084.208748481fVtiAiVptiHfDAiiiptiiQcf, ENDITEM,11. Name=username, Value=admin, ENDITEM,12. Name=password, Value=123456, ENDITEM,13. Name=JSFormSubmit, Value=off, ENDITEM,14. Name=login.x, Value=0, ENDITEM,15. Name=login.y, Value=0, ENDITEM,16. LAST);其中Action说明提交表单的处理页面,Method表明提交数据的方式。当使用web_submit_data()函数时,隐藏表单的数据也会被记录下来作为ITEMDATA数据提交给服务器。这里介绍了在HTTP页面中最常用的4个页面函数web_link()、web_url()、web_submit_form()、 web_submit_data(),通过这些函数可以实现大多数页面访问的请求和数据提交的过程。除了这4个函数,还有一个函数可能会经常看到:web_custom_request()。当请求比较特别时,VuGen无法简单使用以上4个函数进行表述,那么录制后便会出现 web_custom_request()函数,这个函数的作用是自定义HTTP请求规则。该函数更适合在使用自定义的HTTP请求规则中处理二进制内容。具体格式请参考帮助文档。2高级选项下的Non HTML-generated elements(e.g. JavaScript,VBScript,ActiveX, Applets)选项这个选项是对非标准的HTML元素的处理方式,VuGen有以下3种处理方式: Record within the current script step对于JavaScript等内容直接作为web_url下的附属信息记录。 Record in separate steps and use concurrent groups对于相关的内容新建一个web_url来处理。 Do not record不录制额外的内容。在默认情况下选择直接录制在web_url下,如果某些内容录制会导致脚本回放错误,那么可以不录制该内容。URL-BASE Script:是基于URL请求的脚本录制方式,会录制得到所有的HTTP请求。选择该选项会录制所有的HTTP请求,导致脚本包含大量的 web_url()函数,参考前面HttpWatch获得的HTTP交互过程,VuGen只是将所有的请求抓取出来,并且对每个请求均生成一个 web_url()函数来进行模拟。思考:什么时候应该用HTML-BASE Script?什么时候应选择URL-BASE Script?一般来说如果是标准使用IE访问的B/S架构,应该使用HTML-BASE下的A script containing explicit URLs only方式来录制脚本,这种脚本基于URL请求完成,不会带有任何前后依赖的内容。而如果是一个非IE标准的C/S架构,建议使用URL-BASE Script来录制脚本,这样可以确保不会遗漏任何HTTP请求。例如:如果使用HTTP进行数据传送,而数据内容是存放在.dat文件中的,那么使用HTML-BASE Script就无法录制到对该.dat文件的操作,而使用URL-BASE Script就可以录制出来。NetworkPort Mapping提供了对于端口映射的处理规则,在默认情况下不需要进行任何设置,VuGen会自动根据协议确定端口名,对该端口进行监控和录制,但是如果使用了非标准的端口进行数据传输偶尔会出现VuGen能发现数据包的收发操作,但是无法正确录制出脚本的情况,这时就需要使用Port Mapping来指挥VuGen识别端口名和协议类型。下面我们来录制一个电子邮件收发的脚本,选择协议为SMTP+POP3,如图3.19所示。图3.19 在多协议情况下添加POP3和SMTP两个协议我们使用MDaemon搭建了一个本地电子邮件服务器,使用邮件的客户端为Becky!。在选择应用窗口中填写Becky!客户端的信息,如图3.20所示。单击OK按钮开始录制,可以看到在客户端收发电子邮件的时候,Recording中的events一直在变化,如图3.21所示。图3.20 选择Win32应用添加录制对象为B2.exe图3.21 Rocording Bar这说明VuGen可以识别到该协议并且将协议交互截取下来,但是打开脚本,就可能会出现脚本完全没有内容的情况,那么这个时候需要手动帮助VuGen来进行识别协议内容的工作。打开录制选项,找到Port Mapping,如图3.22所示。图3.22 Port Mapping主界面这里需要为POP3和SMTP添加一个端口规则,让VuGen强制去录制这个端口的协议内容(搞错了的话会出导致无录制内容)。单击New Entry按钮添加两个端口,设置POP3使用110端口,SMTP使用25端口,如图3.23所示。这里的Target Server(目标服务器)可以进行明确设置,也可以默认设置为(Any Server)即任意服务器,但是端口必须要写明,并且该端口对应的Service ID协议类型也必须选择正确,录制方式(Record Type)选择Direct即可。同理再添加一个SMTP的协议端口,检查一下端口规则是否正确,如图3.24所示。设置完成后,现在再来录制一下协议,即可录制出来了(VuGen的版本越高出现录制错误的概率越低,在9.1版本后很少出现这种有Events但是没有脚本的情况)。Http PropertiesAdvanced:这里可以设置在录制HTTP过程中的一些高级选项,如图3.25所示。图3.23 新建Port Mapping规则图3.24 新建Port Mapping下的SMTP和POP3规则后图3.25 录制选项下的高级设置Reset context for each action:录制中每个action之间是否需要重置context。context中存放请求发送返回后的数据信息,比如服务器返回的html、 cookie、session等。选择了这个选项,Action之间会清空相关内容,那么基于行为模拟的函数web_link()会由于没有前文而无法运行,系统自动录制成为基于数据请求的函数web_url()。Save snapshot resources locally:在本地保存资源截图。Generate web_reg_find functions for page titles:是否需要为每一个页面自动生成web_reg_find检查点函数(检查点函数参考第3.8节)来检查标题的变更。选中该选项后,会自动生成对标题的检查规则,回放脚本时会验证每个标题是否和录制时相同。其中Generate web_reg_find fuctions for sub-frames为子框架生成检查点函数。由于大多数情况页面的标题都是动态的,检查标题是否不变没有太大的意义,所以这个选项一般不做选择。Add comment to script for HTTP errors while recording:录制过程中如果出错则添加相关的注释内容。Support charset:很多时候我们访问的网站都是中文的,使用VuGen录制时经常会遇到中文变成乱码的事情,这是由于中文网站一般都是使用UTF-8的编码方式来显示中文的,这时就需要让VuGen也支持该编码格式。打开这个选项,确保UTF-8可用,再录制一下脚本,中文乱码的问题就会解决了。如果网站使用的是非UTF-8的编码规则,那么就不要选择该选项,否则也会导致乱码。可以通过使用HttpWatch扫描网站来确认页面是否采用了UTF-8的编码方式。Recording Engine:这是一个兼容性的选项,可以使用以前的录制引擎来录制脚本,注意选择该选项后需要重新启动VuGen,新建脚本才能切换到老的引擎上。Recording schemes:这里可以对录制的内容进行过滤。Headers:可以录制服务器返回HTTP请求包中的数据包头,如图3.26所示。在默认情况下是不录制HTTP Header的,如果有些数据存放在Header中,那么在这里就可以设置需要录制那些内容,如图3.27所示。图3.26 设置是否录制HTTP headers图3.27 设置录制的HTTP headers种类比如这里需要录制服务器返回的Encoding编码信息,选中Accept-Encoding并单击OK按钮确认(HTTP header的含义参考前面的HTTP分析)即可。录制的结果可以发现脚本中附加了web_add_header()函数。Content Types:对于录制的正文内容进行过滤,如图3.28所示。图3.28 设置是否录制HTTP content在默认情况下所有的正文内容都会被录制下来,如果不需要录制图片等内容,可以在下面的规则中过滤掉多余的内容,如图3.29所示。图3.29 设置录制的HTTP content类别Non-Resources:设置需要录制的请求格式,如图3.30所示。图3.30 设置那些文件格式作为Non-Resurce处理这里需要分析一下VuGen根据什么原理录制出来web_url()这种请求,其实它是根据HTTP请求中的返回格式来确定的。在默认情况下,VuGen认为text/html这种返回格式的内容是非资源的正文,需要录制出来,如果你希望将其他格式的请求也单独作为web_url()来进行录制,那么在这里应添加对应的Content Type。例如添加image/gif,那么再次录制脚本时就会发现,所有的gif图片请求都被作为一个单独的web_url()函数进行处理。各种 HTTP请求的文件类型可以先通过HttpWatch进行扫描确定,如图3.31所示。Correlation:是否打开脚本录制时的自动关联选项,如图3.32所示。图3.31 通过HttpWatch获得HTTP返回请求的文件类型图3.32 边录制边进行关联设置如果不是很清楚这个功能请先取消选择,否则可能会导致在录制过程中VuGen错误自动关联,导致脚本回放直接失败。我们将会在后面介绍关联时再来研究它。3.2.4 开始录制当设置好录制选项后,单击OK按钮启动录制。首先看到的是Recording Bar,如图3.33所示。稍后会看到IE或者指定的应用程序启动,当进行操作时Events也会随之变化,说明VuGen录制得到了一些协议交互的内容。图3.33 Recording Bar在录制前需要根据需求确定需要录制的用户行为,而录制后需要通过后面的设置来将脚本设置为完全模拟用户行为的Vuser Script。3.2.5 插入命令在录制的过程中可以通过Recording Bar添加一些命令。例如可以切分脚本,将录制的内容存放在不同的脚本块中,也可以添加事务的开始点和结束点,还可以添加集合点和注释。3.2.6 结束录制当录制结束后,单击Stop按钮,或者使用Ctrl+F5组合键停止录制,所有客户端和服务器交互协议会被放在Generation Log内,VuGen随后会对协议交互进行分析,最终生成脚本。录制完成后,可以在Recording Log中查看相关录制信息,如图3.34所示。而录制中的events条数就是Recording Log中的信息行数。图3.34 Recording Log录制日志内容VuGen能支持多种协议,其关键就在于日志中的开头。Network Analyzer (25bc:2bb0) -Network Analyzer (25bc:2bb0) Load Network Traffic Analyzers:Network Analyzer (25bc:2bb0) Analyzer Module: WPLUS (value=)Network Analyzer (25bc:2bb0) Analyzer Module: WebBase (value=GetHttp ProtocolAnalyzer:api_http_filter.dll)Network Analyzer (25bc:2bb0) + Network Analyzer: api_http_filter.dll GetHttpProtocolAnalyzer Loaded!Network Analyzer (25bc:2bb0) + Interception Auditors: WinInetWplus InterceptionAudit:api_http_filter.dllNetwork Analyzer (25bc:2bb0) Analyzer Module: QTWeb (value=)Network Analyzer (25bc:2bb0) Analyzer Module: local_server (value=)Network Analyzer (25bc:2bb0) -在这段日志中可以看到,对HTTP的解析是通过api_http_filter.dll库文件实现的。VuGen通过类似于插件的形式来完成对多种协议的支持,只要有这类的dll文件,就可以完成对该类协议的录制。另一方面录制得到的所有客户端请求和服务器返回信息将会保存在Generation Log中,如图3.35所示。录制得到的VuGen脚本就是通过Generation Log生成的。如果录制结束时出错或者错误修改后,想回到最初的状态,那么可以使用Tools菜单下的Regenerator Script功能来重新生成脚本。图3.35 Generation Log请求日志内容3.2.7 回放验证脚本生成后可以单击菜单栏上的Run按钮也可直接按F5键回放脚本,如图3.36所示。运行前也可以通过Shift+F5组合键检查脚本的语法规则,对脚本进行编译。回放中可以在Replay Log日志栏中看到脚本执行的日志信息,当脚本回放完成后,如何验证回放结果呢?这里可以打开View菜单下的Test Results,如图3.37所示。图3.36 工具条上的执行按钮图3.37 Test Results测试结果报告在这个测试结果报告中,可以得到整个脚本回放的记录,还有相关截图,Passed状态说明脚本运行正常,得到了服务器的反馈。注意:Passed并不能说明脚本完成了相关操作,只能说明服务器端正确接收到了客户端的请求并且返回了相应的数据,但是并不代表操作在逻辑上是正确的。.2.8 录制回放常见问题录制错误1录制本机WebTours或录制本地网站无法打开当使用Vista或者Windows 2008操作系统时,会出现该问题。这是由于在本地WindowsSystem32driversetchost文件中多了下面这行内容::1 localhost将其删除后即可恢复正常。2录制网页时,浏览器刚打开就自动关闭,或者浏览器无响应这是由于在IE中打开了第三方插件支持导致的,一般安装了QTP会出现这个问题。只需要打开IE的属性菜单,找到高级选项,将其中的第三方插件支持关闭即可。3开始录制时浏览器出现错误这个问题一般是由于系统安装的问题或IE版本不兼容导致的。VuGen 9.1最高兼容IE 7.0。4录制网页操作后没有任何脚本VuGen录制只支持IE,对于第三方的浏览器不能很好地兼容。5录制本机页面可以打开但是没有录制到任何Events在录制时请求的地址为或Localhost时,偶尔会出现该问题,换成系统真实IP地址即可。6录制的时候总是提示无法访问服务器可以考虑检查一下IE的代理服务器设置。在Load Runner 8.x中经常会出现VuGen中的代理设置自动覆盖IE 7.0的现象。回放错误在某些情况下,回放脚本会遇到失败的情况,一般导致脚本回放失败的原因无非以下几种:1脚本中的数据存在动态部分例如脚本是访问一个图片,但是再次回放的时候该图片已经在服务器上被删除了,那么脚本回放时自然就会出现错误,提示该对象无法找到。解决方法是修改代码,删除无用的对象,或者通过关联处理动态数据。2脚本没有录制到所有的协议请求当系统使用多种协议时,如果我们选择的录制协议没有全部包含,就会出现漏录请求的情况,而在回放时由于缺乏部分请求的模拟,就会导致后续的请求内容被服务器拒绝,自然就会出现回放失败的情况。解决方法是通过分析确认系统协议,确保所有请求被录制。3系统存在问题从某些角度来说,VuGen是一种基于协议的木马,可能会被部分杀毒软件或防火墙干扰和影响,导致无法正常访问服务器。解决方法是在录制时关闭不必要的防火墙和杀毒软件。4脚本中添加了不合适的关联或检查点函数在录制选项中打开了自动录制关联规则后,录制出来的脚本会自动添加符合规则的关联函数,而如果在回放时关联函数无法捕获到符合规则的目标则会提示错误。解决方法建议在深入了解关联后再启用该功能。对于检查点函数,关闭Fail功能即可。5服务器连接错误服务器无法连接,导致脚本回放失败。一般来说回放错误可以通过日志或者Test Results中的截图定位,当有一定的代码调试能力后,就能够轻松解决。3.7 关联3.7.1 关联原理先来模拟一个场景:我们去坐飞机,登机前需要在检票点出示机票,检票登机。那么检票人员会检查哪些东西呢?机票是否真实、航班是否正确等信息,验证通过即可登机。过了几天我们又去坐飞机,还是拿同样的一张票去登机,检票人员再一次核对信息,发现机票已经过期了,自然就不能成功登机了,那怎么才能顺利登机呢?可以通过伪造机票信息的方式来登机,首先去询问其他乘客的机票信息,然后将自己的机票涂改为他们的机票,最后使用涂改后的机票登机。在这里我们通过收集别人返回的信息,将提交给检票人员的数据修改为这些收集到的信息,从而满足登机的验证策略。在脚本中也存在大量类似的情况,录制的时候,服务器会给一个唯一的认证码来进行操作,当再次回放脚本的时候服务器会给一个全新的认证码,而脚本录制是死的,还是拿老的认证码提交,从而导致脚本执行失败。例如:常见系统中的登录功能,在登录后服务器会返回SessionID,登录后的操作都需要提交该SessionID确认身份。使用VuGen录制时,将会记录服务器返回的SessionID并且原封不动地在下一个请求中发给服务器,如图3.127所示。图3.127 录制得到SessionlD待到回放的时候,服务器会在接收到用户名和密码后返回新的SessionID,而脚本仍然发送旧的SessionID给服务器,最终因SessionID错误,导致脚本回放失败,如图3.128所示。图3.128 回放时SessionID 错误为了确保脚本回放的成功,我们需要获得服务器每次返回的动态SessionID,再将这个动态数据发回给服务器。而关联能够帮助我们将服务器返回的数据进行处理并保存为参

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论