Flex 程序性能测试

来源:互联网 发布:延时摄影后期软件 编辑:程序博客网 时间:2024/04/30 01:00

Flex 程序性能测试

作者:叶晖俊 yehuijun2001@163.com

2008411

 

注: Flex程序的性能测试, 作者叶晖俊。 本文版权归属作者所有,可以自由转载,但是必须注明出处和作者,否则将追究法律责任。

 

简介:AdobeFlex 已经越来越流行,但是Flex程序的性能测试却还没有很好的工具。包括著名的性能测试工具LoadRunner都还没有对新版本Flex性能测试有很好的支持。笔者在实际工作的研究中,发现了一个好的测试Flex程序的方式。 本文重点介绍性能测试中如何处理FlexAMF消息。 本文采用的测试工具是The Grinder 开发语言是JythonJava

 

关键字:Flex 测试、 Flex性能测试、 AMF Message 解码

1. Flex 程序性能测试的困惑

Flex默认使用的是AMF协议进行传输。 AMF协议在浏览器与Server端的交互是通过HTTP协议进行传输, 如图1-1 Client端发到Server端:首先是Action Script 的对象,包装进AMF Message AMF Message 对象再被序列化成二进制数组,存入HTTP POST请求的Data 域中, 数据传到服务器后,反序列化成JavaAMF Message对象, Server Flex框架再把AMF Message中的业务对象取出来发送到对应的服务器端Java对象。Server端到Client端是类同的。


 

1-1 Flex AMF Message的传输

 

当用脚本录制器把AMF Message录制下来时, 是一串人不可读的二进制数组。

    result = request1201.POST('/home/messagebroker/amfsecure' +

      '?RND',

      ( 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04,

        0x6E, 0x75, 0x6C, 0x6C, 0x00, 0x02, 0x2F, 0x31,

        0x00, 0x00, 0x00, 0xCB, 0x0A, 0x00, 0x00, 0x00,

        0x01, 0x11, 0x0A, 0x81, 0x13, 0x4D, 0x66, 0x6C,

        0x31, 0x30, 0x37, 0x37, 0x34, 0x32, 0x45, 0x31,

        ...,

        0x07, 0x6E, 0x69, 0x6C, 0x01, 0x04, 0x00, ),

      ( NVPair('Content-Type', 'application/x-amf'), ))

如果不需要对发出去的AMF Message做任何参数化,直接回放脚本即可。 但是如果想要看懂AMF消息里面的内容,或者需要依据实际情况修改AMF消息中的内容后再发出去, 那么就要想办法把二进制的数组解析出来。如前面所诉,这个二进制的数组,其实是AMF Message对象序列化后的数据。 可惜的是,这个序列化算法是Adobe自定义的,普通的Java反序列化,并不能解析出来, 并且解析成AMF Message对象以后,还需要重新序列化成二进制,发送到服务器端。笔者曾经尝试过多种办法解析和编码AMF Message对象, 最后找到一个方法可以很好的编码和解析AMF Message,并在实际测试中予以运用, 这个方法同时适用于The Grinder, LoadRunner

 

2. 解析和编码Flex AMF Message

首先在已部署的Flex应用程序中找到 flex-messaging.jar flex-messaging-common.jar 两个包, 通常在 war/WEB-INF/lib目录下。

 

开启Eclipse 创建一个Java Object 引用这两个包,创建一个类 AMFTransformer,专门负责解析和编码AMF Message

 

载入以下对象:

import flex.messaging.io.SerializationContext;

import flex.messaging.io.amf.ActionContext;

import flex.messaging.io.amf.ActionMessage;

import flex.messaging.io.amf.AmfMessageDeserializer;

import flex.messaging.io.amf.AmfMessageSerializer;

 

解码 二进制到AMF Message对象,利用AmfMessageDeserializer类:

AMF Message 解析成Java对象后,可以根据实际需要做任意的修改。

注: message 对象为ActionMessage类的一个实例

 

 

 

编码 AMF Message对象,到二进制数组, 利用AmfMessageSerializer类:

 编码,把ActionMessage 对象编码成二进制数组

注:AmfMessageSerializerAmfMessageDeserializer 的构造函数在不同版本中略有差异,可能需要SerializationContext 作为构造函数的参数。

 

AMF Message解析成对象后,为了更加方便测试人员阅读和理解,可以利用开源包XStream Java 对象转储成XML

 

 

3. Flex 性能测试

能够把Flex AMF Message消息解析和编码后,就可以利用传统的Web性能测试工具进行测试了。 关于传统Web程序的性能测试,请参见笔者另外一篇文章《电子商务系统的性能测试》。

4. 后记

本文书写仓储,不可避免有遗漏错误之处,如有不对,还往不吝赐教。 另外本人还提供电子商务系统的性能咨询服务。如有需要,请在本人博客上留言,或EMAIL给我。

 

免责申明:

本文纯属技术探讨,不对使用本方法是否侵犯他人版权负责。 请读者自行斟酌,或咨询Adobe公司确认该方法合法。

 

注: Flex程序性能测试》, 作者叶晖俊, yehuijun2001@163.com 本文版权归属作者所有,可以自由转载,但是必须注明出处和作者,否则将追究法律责任。

 

 

原创粉丝点击