Flex 程序性能測試

Flex 程序性能測試

作者:葉暉俊 [email protected]

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程序性能測試》, 作者葉暉俊, [email protected] 本文版權歸屬作者所有,可以自由轉載,但是必須註明出處和作者,否則將追究法律責任。

 

 

發佈了22 篇原創文章 · 獲贊 5 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章