深入剖析Flex程序性能测试

开发 后端
本文向大家简单介绍一下Flex程序性能测试的概念,Adobe的Flex已经越来越流行,但是Flex程序的性能测试却还没有很好的工具。

在学习Flex的过程中,你可能会遇到Flex程序性能测试方面的问题,这里和大家分享一下,本文重点介绍性能测试中如何处理Flex的AMF消息。本文采用的测试工具是TheGrinder,开发语言是Jython和Java。

Flex程序性能测试

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

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

  图1-1FlexAMFMessage的传输

 

 

  当用脚本录制器把AMFMessage录制下来时,是一串人不可读的二进制数组。
  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'),))

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

  2.解析和编码FlexAMFMessage

  首先在已部署的Flex应用程序中找到flex-messaging.jar、flex-messaging-common.jar两个包,通常在war/WEB-INF/lib目录下。
  开启Eclipse创建一个JavaObject引用这两个包,创建一个类AMFTransformer,专门负责解析和编码AMFMessage。
载入以下对象:
  importflex.messaging.io.SerializationContext;
  importflex.messaging.io.amf.ActionContext;
  importflex.messaging.io.amf.ActionMessage;
  importflex.messaging.io.amf.AmfMessageDeserializer;
  importflex.messaging.io.amf.AmfMessageSerializer;

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

 

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

 

 #p#

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

 

  注:AmfMessageSerializer,AmfMessageDeserializer的构造函数在不同版本中略有差异,可能需要SerializationContext作为构造函数的参数。
  AMFMessage解析成对象后,为了更加方便测试人员阅读和理解,可以利用开源包XStream把Java对象转储成XML。

  3.Flex性能测试

  能够把FlexAMFMessage消息解析和编码后,就可以利用传统的Web性能测试工具进行测试了。

  4.后记

  本文书写仓储,不可避免有遗漏错误之处,如有不对,还往不吝赐教。

【编辑推荐】

  1. 使用FlexSDK4时三大注意事项
  2. FlexBuilder4十大新特性闪亮登场
  3. 解析六大优秀Flex开源项目
  4. 揭开Flex正则表达式的神秘面纱
  5. 技术分享 在Flex中嵌入Flex字体的步骤


 

责任编辑:佚名 来源: csdn.net
相关推荐

2013-12-17 17:05:20

iOS性能优化

2010-08-04 13:52:53

Flex事件机制

2009-07-01 18:24:59

JSP应用程序JMeter

2010-08-09 16:01:37

Flex字体

2010-08-03 13:47:26

Flex程序员

2010-08-04 08:42:28

Flex和Flash

2010-08-03 16:21:54

FlexFlash

2010-08-06 15:20:25

Flex Builde

2010-08-13 09:54:23

Flex字体

2010-08-12 16:10:44

Flex应用程序

2010-08-12 11:29:01

Flex组件

2010-02-04 09:41:03

Android应用程序

2010-08-04 09:43:28

Flex应用程序

2018-11-20 10:50:00

Java性能优化编程技巧

2010-06-11 10:19:22

systemd

2019-10-17 10:10:23

优化Web前端

2019-02-01 09:50:00

提升Python程序性能

2010-07-30 15:35:11

Flex结合

2010-08-11 09:01:41

Flex4布局

2018-07-06 16:26:11

编程语言Python程序性能
点赞
收藏

51CTO技术栈公众号