Chinaunix首页 | 论坛 | 博客
  • 博客访问: 107316
  • 博文数量: 14
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 184
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-01 23:15
个人简介

我只是一个喜欢开发的测试,喜欢测试的开发,喜欢每天都知道得更多一些,更深入一些的感觉。。。。。

文章分类

全部博文(14)

文章存档

2015年(5)

2014年(2)

2013年(7)

分类: Windows平台

2014-05-15 21:16:07

Loadrunner测试Flex网站


    最近要测试的一个网站,页面包含大量
Flex控件,如果按一般的网站那样,在录制Loadrunner脚本的时候只选Web(HTTP/HTML)协议,也能回放,但amf请求及响应由于报文内容被afm协议封装成二进制格式,在LoadrunnerHTTP View中显示的是乱码,如下图所示:

                                              

1 只选用Web(HTTP/HTML)协议时amf请求


                                             
                                           图
2 只选用Web(HTTP/HTML)协议时amf响应

    因此无法获取到需要关联的字段值,比如对查询结果作进一步操作的时候,需要先获取到查询结果中的ID等字段。

经多次尝试,我们很好地解决了这个问题,以下是我们认为在录制这类脚本的时候需要注意的几个方面:

 

1.  协议选择

1)  打开VUG

打开LoadrunnerVirtual User Generator,比如在我的机器上是在开始菜单àHP LoaderunneràApplicationàVirtual User Generator


2)  创建新的脚本

点击FileàNew,弹出New Virtual User对话框

3)  选择协议

A.  在新建虚拟用户(New Virtual User)对话框的左边选择脚多协议脚本类型(New Multiple Protocol Script)

B.  在可用协议(Available Protocols)中选中Action Message Format(AMF)Web(HTTP/HTML)

C.  点击中间的à按钮将这两个协议放至已选协议(Selected Protocols)中;

D.  点击底下的Create按钮确认创建脚本

                      

3在新建虚拟用户对话框中选择AMFWeb两个协议


2.   
添加jar包及class文件

在上一节最后点击Create按钮后即跳转到脚本窗口,同时弹出开始录制(Start  Recording)对话框。但这时候我们还不能录制脚本,因为将要录制的脚本中将会用到一些jar包和class文件需先添加进来,不然的话,录制完后保存脚本的时候会报错找不到类。

                                 

4 未添加网站jar包及class文件录制脚本报错信息


并且脚本中不会以正确的发送
amf请求的amf_call()函数发送请求,而是用如web_custom_request()等其他函数,请参考图7和图8


1)   
取网站服务器上对应应用WEB-INFO目录下的libclass文件夹,放到脚本所在机器上的固定路径下,路径最好不要包含中文;

2)   打开脚本文件夹下的default.cfg文件,在[FLEX]节的FlexJarFiles属性中添加所有jar包和class文件的绝对路径+文件名,例如我将lib放在D根目录下,则添加其下面的common.jar则应为“D: \lib\common.jar”,每个文件名之后加上分号,包括最后一个文件名。


需要说明的一点是:在
Loadrunner中如果创建的是Flex协议脚本,则可以在 图形界面上直接添加jar包和class文件,方法是:点击Tools/Recording Options菜单项,打开录制选项对话框,在Flex/Externalizable Objects页面,"Serialize objects using"选择"Custom Java Classes",然后点击按钮添加jar包,或点击按钮添加class文件。

5 Flex协议脚本可以在图形界面上直接添加jar包和class文件


但是,选择
AMF协议的脚本,在录制选项对话框中是没有AMF/Externalizable Objects页面来添加jar包和class文件的,因此我们用上面的方法来添加这些文件。同时我们还发现如果先创建了一个Flex协议脚本,后续再创建FlexAMF协议脚本,会默认添加之前那个Flex脚本中添加的jar包和class文件。

 

3.  录制

下图所示对话框的URL Address文本框中填入要测试网站的URL


                                                        

6 开始录制对话框中填入要测试的网站URL


OK按钮即开始录制脚本。录制脚本和录制其他单Web协议的脚本一样,在此不再赘述。

对比一下选用Web单协议和选用AMF/Web双协议录制出来的脚本,可以发现

1)  Web单协议时,发送amf请求用的是web_custom_request()函数,而在AMF/Web双协议时用的是amf_call()函数,当然前提是有正确添加所有解析afm报文的jar包和class文件,请参考第2部分;

                  

7 Web单协议录制的脚本中afm请求

8 AMF/Web双协议录制的脚本中afm请求


2)     Web单协议时,报文内容为乱码无法解析,如图1和图2所示,而在在AMF/Web双协议时报文内容可以解析成XML的格式

9 AMF/Web双协议录制的脚本报文内容可以解析成XML格式


 

4.   关联

AMF脚本最关键的是要关联DSIDDSIDAMF协议的会话ID,是一个格式为“816进制数字+中划线+416进制数字+中划线+416进制数字+中划线+416进制数字+中划线+1216进制数字”,共36个字符组成的字符串,如“44DEE526-C71A-5FAB-B08E-A167DB437874”。在每个会话的第一个AMF请求的响应中服务器返回给客户端,从这以后的每个AMF请求都必须带上这个DSID值。

 

由此可见,如果不关联DSID,脚本回放的时候可能不会有问题,但多用户并发的场景中,如果所有的会话都用一个DSID,服务端就会返回重复会话ID错误。

关联DSID的方法如下:

1)   保存amf响应到变量

在第一个amf请求的"Snapshot=t51.inf"MESSAGE之间添加"ResponseParameter=变量名",在此变量名为respDSID,这样该请求的响应字符串(xml格式)就会保存到该变量中

           

10 保存amf响应到变量respDSID



2)   解析amf响应

在第一个amf请求之后,用lr_xml_get_values()函数解析保存到变量中的amf响应xml字符串,并将得到的DSID保存到另一个变量中


                                  

 

11 解析amf响应respDSID保存DSID到变量dsid

 

需要说明一下lr_xml_get_values()的参数:

A.  第一个参数是amf响应字符串,格式为"XML={保存amf响应的变量名}",在我们这个例子里面就是respDSID

B.  第二个参数是想要得到的标签值在amf响应XML中的路径,格式为"Query=路径",路径可以通过查看TreeàRecoding,Response,XML来得到;

C.  第三个参数是获取到的标签值保存的参数,格式为"ValueParam=变量名",此为dsid,需要注意的是,如果相同的路径下有多个值的话,那么这个变量实际上相当于一个数组,使用的时候可以在变量名后加“_N”来取第N个量

                                     

12 关于amf响应XML中同路径下值的解析

 

例如对于上图中的情形,我们需要获取的是第二个string标签值,则为dsid_2

3)   替换amf请求中的DSID

从第二个amf请求开始,替换所有这些请求中的DSID

13 自第二个amf请求起用变量dsid替换DSID


    至此,测试
Flex网站的Loadrunner脚本基本上完成,其他一些关联可以根据需要,和DSID的关联类似操作即可。








阅读(2707) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~