Flex 程序性能測試
作者:葉暉俊 [email protected]
2008年4月11日
注: Flex程序的性能測試, 作者葉暉俊。 本文版權歸屬作者所有,可以自由轉載,但是必須註明出處和作者,否則將追究法律責任。
簡介:Adobe的Flex 已經越來越流行,但是Flex程序的性能測試卻還沒有很好的工具。包括著名的性能測試工具LoadRunner都還沒有對新版本Flex性能測試有很好的支持。筆者在實際工作的研究中,發現了一個好的測試Flex程序的方式。 本文重點介紹性能測試中如何處理Flex的AMF消息。 本文采用的測試工具是The Grinder, 開發語言是Jython和Java。
關鍵字:Flex 測試、 Flex性能測試、 AMF Message 解碼
1. Flex 程序性能測試的困惑
Flex默認使用的是AMF協議進行傳輸。 AMF協議在瀏覽器與Server端的交互是通過HTTP協議進行傳輸, 如圖1-1 。Client端發到Server端:首先是Action Script 的對象,包裝進AMF Message, AMF Message 對象再被序列化成二進制數組,存入HTTP POST請求的Data 域中, 數據傳到服務器後,反序列化成Java版AMF 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類:
注:AmfMessageSerializer,AmfMessageDeserializer 的構造函數在不同版本中略有差異,可能需要SerializationContext 作爲構造函數的參數。
AMF Message解析成對象後,爲了更加方便測試人員閱讀和理解,可以利用開源包XStream把 Java 對象轉儲成XML。
3. Flex 性能測試
能夠把Flex AMF Message消息解析和編碼後,就可以利用傳統的Web性能測試工具進行測試了。 關於傳統Web程序的性能測試,請參見筆者另外一篇文章《電子商務系統的性能測試》。
4. 後記
本文書寫倉儲,不可避免有遺漏錯誤之處,如有不對,還往不吝賜教。 另外本人還提供電子商務系統的性能諮詢服務。如有需要,請在本人博客上留言,或EMAIL給我。
免責申明:
本文純屬技術探討,不對使用本方法是否侵犯他人版權負責。 請讀者自行斟酌,或諮詢Adobe公司確認該方法合法。
注: 《Flex程序性能測試》, 作者葉暉俊, [email protected]。 本文版權歸屬作者所有,可以自由轉載,但是必須註明出處和作者,否則將追究法律責任。