基于AMF協議的Flex應用程序的性能測試
下面我們將具體了解哈AMF協議,并通過模擬Client與Server實現AMF協議通信的連接方式來完成大并發的壓力測試。
AMF是Adobe獨家開發出來的通信協議,它采用二進制壓縮,序列化、反序列化、傳輸數據,從而為Flash 播放器與Flash Remoting網關通信提供了一種輕量級的、高效能的通信方式。
模擬AMF請求與Server端建立通信,Adobe官方提供了一個Server端的通信服務就是BlazeDS,Flex將數據通過AMF協議轉換成 二進制格式進行傳輸給Server端的BlazeDS服務,然后BlazeDS再將數據解析成Java需要的格式,完成Flex客戶端與Server端的 通信過程。因此通過進一步分析發現,我們的目的就是要模擬AMF與BlazeDS建立連接,就解決了問題了。這里,就是利用Java來模擬AMF請求,通 過AMFConnection連接Blazeds接口,具體Demo代碼如下:
package org.test.service.TestLogin;
import flex.messaging.io.amf.client.AMFConnection;
import flex.messaging.io.amf.client.exceptions.ClientStatusException;
import flex.messaging.io.amf.client.exceptions.ServerStatusException;
public class AMFDemo {
public static void main(String[] args) {
// 創建AMF連接
AMFConnection amfCon = new AMFConnection();
//連接 remote URL
String url = http://localhost:8080/TestLogin/messagebroker/amf ;
try{
amfCon.connect(url);
}catch(ClientStatusException cse){
System.out.println(cse);
return ;
}
TestLogin result ;
try{
result = (TestLogin)amfCon.call("TestLogin.login","username","passwd");//傳輸對象的參數,登錄用戶、密碼
}catch(ClientStatusException ce){
System.out.println(ce);
}catch(ServerStatusException se){
System.out.println(se);
}
amfCon.close();
System.out.println("Sucessfull!!!");
}
}
package org.test.service.TestLogin; import flex.messaging.io.amf.client.AMFConnection; public class AMFDemo implements Runnable{ public void run(){ } |
通過Java模擬AMF請求與BlazeDS建立通信連接,完成基于AMF協議的Flex應用程序的壓力測試,拋棄傳統的工具壓測方式,從而尋 找最適合FLex本身的性能測試方案。當然,這個只是一種純代碼方式來實現,我們也可以借助通用工具來完成,至少在完成以上的代碼實現過程,之后可以通過 LoadRunner或者是JMeter來調用Java代碼完成,不過似乎JMeter對于Java支持更方便。使用工具的目的其實為了采樣壓力測試的數 據方便分析,而真正實現壓力測試,其實不管是工具還是腳本,其實都是通過模擬底層的交互方式來達到同樣的目的。
作為一名測試人員,對于Java與Flex的通信方式的理解遠不如開發人員,所以可能以上對于BlazeDS的通信機制描述難免有誤。但這里并 不只是記錄如何實現一種壓力測試,而是表達一種個人對于性能測試思想的理解,很多時候不要一味地去追求自動化工具的強大,而忽略了其性能測試本身的思想。 希望能通過不斷總結,來逐步提高自己!
posted on 2012-05-11 09:57 順其自然EVO 閱讀(389) 評論(0) 編輯 收藏 所屬分類: 性能測試