51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2857|回复: 1
打印 上一主题 下一主题

[原创] Flex程序性能测试

[复制链接]
  • TA的每日心情
    擦汗
    2015-5-25 17:24
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    跳转到指定楼层
    1#
    发表于 2009-8-19 11:34:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    <P>简介:Adobe 的 Flex 已经越来越流行,但是 Flex 程序的性能测试却还没有很好的工具。包括著名的性能测试工具 LoadRunner 都还没有对新版本 Flex 性能测试有很好的支持。笔者在实际工作的研究中,发现了一个好的测试 Flex 程序的方式。本文重点介绍性能测试中如何处理 Flex 的 AMF 消息。 本文采用的测试工具是 The Grinder, 开发语言是 Jython 和 Java 。</P>
    <P>  关键字:Flex 测试、 Flex 性能测试、 AMF Message 解码</P>
    <P> <B> 1. Flex 程序性能测试的困惑</B></P>
    <P>  Flex 默认使用的是 AMF 协议进行传输。 AMF 协议在浏览器与 Server 端的交互是通过 HTTP 协议进行传输, 如图 1-1 。 Client 端发到 Server 端:首先是 Action Script 的对象,包装进 AMF Message , AMF Message 对象再被序列化成二进制数组,存入 HTTP POST 请求的 Data 域中, 数据传到<A class=nounderline title=服务器 href="http://server.it168.com/" target=_blank><FONT color=#0000ff>服务器</FONT></A>后,反序列化成 Java 版 AMF Message 对象, Server 端 Flex 框架再把 AMF Message 中的业务对象取出来发送到对应的<A class=nounderline title=服务器 href="http://product.it168.com/files/0402search.shtml" target=_blank><FONT color=#0000ff>服务器</FONT></A>端 Java 对象。 Server 端到 Client 端是类同的。<BR>&nbsp;</P>
    <DIV id=div9033320 style="TEXT-ALIGN: center"><IMG id=img9033320 alt="" src="http://image4.it168.com/2009/7/7/e65bf396-944b-4cff-8e70-f3a7fc84f3a9.jpg" border=0></DIV>
    <P>  图 1-1 Flex AMF Message 的传输</P>
    <P>  当用脚本录制器把 AMF Message 录制下来时, 是一串人不可读的二进制数组。</P>
    <P>  result = request1201.POST( '/home/messagebroker/amfsecure' +</P>
    <P>  '?RND' ,</P>
    <P>  ( 0x00 , 0x03 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x04 ,</P>
    <P>  0x6E , 0x75 , 0x6C , 0x6C , 0x00 , 0x02 , 0x2F , 0x31 ,</P>
    <P>  0x00 , 0x00 , 0x00 , 0xCB , 0x0A , 0x00 , 0x00 , 0x00 ,</P>
    <P>  0x01 , 0x11 , 0x0A , 0x81 , 0x13 , 0x4D , 0x66 , 0x6C ,</P>
    <P>  0x31 , 0x30 , 0x37 , 0x37 , 0x34 , 0x32 , 0x45 , 0x31 ,</P>
    <P>  ... ,</P>
    <P>  0x07 , 0x6E , 0x69 , 0x6C , 0x01 , 0x04 , 0x00 , ),</P>
    <P>  ( NVPair( 'Content-Type' , 'application/x-amf' ), ))</P>
    <P>  如果不需要对发出去的 AMF Message 做任何参数化,直接回放脚本即可。 但是如果想要看懂 AMF 消息里面的内容,或者需要依据实际情况修改 AMF 消息中的内容后再发出去,那么就要想办法把二进制的数组解析出来。如前面所诉,这个二进制的数组,其实是 AMF Message 对象序列化后的数据。可惜的是,这个序列化算法是 Adobe 自定义的,普通的 Java 反序列化,并不能解析出来, 并且解析成 AMF Message 对象以后,还需要重新序列化成二进制,发送到服务器端。笔者曾经尝试过多种办法解析和编码 AMF Message 对象,最后找到一个方法可以很好的编码和解析 AMF Message ,并在实际测试中予以运用, 这个方法同时适用于 The Grinder, 和 LoadRunner 。</P>
    <P>  <B>2. 解析和编码 Flex AMF Message</B></P>
    <P>  首先在已部署的 Flex 应用程序中找到 flex-messaging.jar 、 flex-messaging-common.jar 两个包, 通常在 war/WEB-INF/lib 目录下。</P>
    <P>  开启 Eclipse 创建一个 Java Object 引用这两个包,创建一个类 AMFTransformer ,专门负责解析和编码 AMF Message 。</P>
    <DIV class=w643 id=rcomment>
    <P>载入以下对象:</P>
    <P>  import flex.messaging.io.SerializationContext;</P>
    <P>  import flex.messaging.io.amf.ActionContext;</P>
    <P>  import flex.messaging.io.amf.ActionMessage;</P>
    <P>  import flex.messaging.io.amf.AmfMessageDeserializer;</P>
    <P>  import flex.messaging.io.amf.AmfMessageSerializer;</P>
    <P>  解码 , 二进制到 AMF Message 对象, 利用 AmfMessageDeserializer 类:</P>
    <DIV id=div8940677 style="TEXT-ALIGN: center"><IMG id=img8940677 alt="" src="http://image4.it168.com/2009/7/7/1856d7d8-6963-4669-8e82-48e07224b0c8.jpg" border=0></DIV>
    <P>  AMF Message 解析成 Java 对象后,可以根据实际需要做任意的修改。</P>
    <DIV id=div1666720 style="TEXT-ALIGN: center"><IMG id=img1666720 alt="" src="http://image4.it168.com/2009/7/7/01dc8cd7-41ad-4d11-8c41-4aeec5ce7451.jpg" border=0></DIV>
    <P>  编码 , AMF Message 对象,到二进制数组, 利用 AmfMessageSerializer 类:</P>
    <DIV id=div2995522 style="TEXT-ALIGN: center"><IMG id=img2995522 alt="" src="http://image4.it168.com/2009/7/7/1c3abc51-51e5-461c-92af-0bf9bccf9d5d.jpg" border=0></DIV>
    <P>  注: AmfMessageSerializer , AmfMessageDeserializer 的构造函数在不同版本中略有差异,可能需要 SerializationContext 作为构造函数的参数。</P>
    <P>  AMF Message 解析成对象后,为了更加方便测试人员阅读和理解,可以利用开源包 XStream 把 Java 对象转储成 XML 。</P>
    <P> <B> 3. Flex 性能测试</B></P>
    <P>  能够把 Flex AMF Message 消息解析和编码后,就可以利用传统的 Web 性能测试工具进行测试了。</P>
    <P>  <B>4. 后记</B></P>
    <P>  本文书写仓储,不可避免有遗漏错误之处,如有不对,还往不吝赐教。</P>
    <P>  免责申明:</P>
    <P>  本文纯属技术探讨,不对使用本方法是否侵犯他人版权负责。 请读者自行斟酌,或咨询 Adobe 公司确认该方法合法。</P>
    <P>&nbsp;</P>
    <P>转载自IT168</P><A href="http://tech.it168.com/a2009/0707/601/000000601835.shtml#comment"></A></DIV>
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    该用户从未签到

    2#
    发表于 2009-8-31 14:33:46 | 只看该作者
    问下,,Grinder支持flex3开发的app么?
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-16 03:39 , Processed in 0.065621 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表