簡介: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 。