關鍵字: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 類:
![]() |
文章來源于領測軟件測試網 http://www.kjueaiud.com/