Robotium双client測试框架
互聯網的本質就是信息交換。移動互聯網更是如此, 所以很多移動互聯網的服務類應用中有著身份地位不同的兩種用戶(比如:交易中的買家和賣家, 教學中的老師和學生, 打車中的車主和乘客)。近期的工作是給公司的某個產品建立android客戶端測試框架,使用的自己主動化測試技術是robotium。因為產品的用戶存在兩種身份(在這里簡稱clientA, clientB),那么就須要建立一個可以同步兩種不同用戶的測試框架,這就是本文標題“Robotium雙客戶端測試框架”的由來。
?
1. 需求具體分析
為了方便大家理解。我畫了張圖,不說廢話直接上圖。
如上圖所描寫敘述的,客戶身份A、B各有一些測試用例須要運行(圖中圓型隊列),當運行到紫色用例時須要兩個client同步,這時運行到用例方法體內的客戶身份須要向同步server通信已獲得還有一個客戶身份得同步信息,假設對方已經準備就緒。用例方法開始同步運行。假設對方沒有就緒,告知server自己已經就緒而且開始等待。
?
2.server端核心代碼
還是先上代碼,稍后解釋。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String methodName = request.getParameter("testMethodName");//more development for methods syncString clientAReady = request.getParameter("clientAReady");String clientBReady = request.getParameter("clientBReady");//debuglog("methodName:"+methodName); /*sync code*/if(clientAReady == null || clientBReady == null){return ;}if(clientAReady.equals("unknown")){//clientB requestGlobalResource.clientBMark = "ready";clientAReady = GlobalResource.clientAMark;}else if (clientBReady.equals("unknown")){//clientA requestGlobalResource.clientAMark = "ready";clientBReady = GlobalResource.clientBMark;}//寫回json數據}重要的就是中間的if—else循環,主要功能是識別不同客戶身份,然后依照身份讀取還有一身份的狀態信息而且把自己的狀態給寫入server。
3.client核心代碼
client代碼能夠簡單分為三部分,第一是robotium測試框架建立,其次須要輪詢server對方數據。最后是須要接收數據并更等待狀態位。
關于robotium測試框架建立不是本文的重點也比較簡單。筆者并不打算展開說明。
附上相關資料:http://www.robotium.cn/archives/210。假設是大家做過android開發應該不難上手。
關于server通信,我使用的是HttpClient框架。用法為建立一個HttpClient對象。向服務發送數據請求,使用框架中提供的handler子類異步接收數據并處理。代碼還是非常easy的。
?
輪詢數據
public void testSync () throws Exception{while(ClientBReady.equals("notReady")){NetManager.TestSyncServlet("testSync", "unknown", "ready", syncHandler);Thread.sleep(5000);} //robotium control code }發送請求
package com.network.httpconnect;import com.network.httpconnect.AsyncHttpClient; import com.network.httpconnect.AsyncHttpResponseHandler; import com.network.httpconnect.RequestParams;public class NetManager {public static String getServiceBaseUrl() { return "http://localhost:8080/appTestServer/"; }public static int getTimeOut() { return 5 * 1000; }public static void TestSyncServlet(String testMethodName, String clientAReady, String clientBReady, AsyncHttpResponseHandler handler){String url = getServiceBaseUrl() + "TestSyncServlet";try{RequestParams params = new RequestParams();params.put("testMethodName", testMethodName);params.put("clientAReady", clientAReady);params.put("clientBReady", clientBReady);AsyncHttpClient client = new AsyncHttpClient();client.setTimeout(getTimeOut());client.post(url, params, handler);}catch (Exception ex){ex.printStackTrace();if (handler != null)handler.onFailure(null, ex.getMessage());}}}接收數據
private AsyncHttpResponseHandler syncHandler = new AsyncHttpResponseHandler(){@Overridepublic void onSuccess(String content) {super.onSuccess(content);debuglog("content:"+ content);try {JSONObject receiveData = new JSONObject(content);ClientBReady = receiveData.getString("ClientBReady");} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic void onFailure(Throwable error, String content) {super.onFailure(error, content);} };
?
因為筆者水平有限,本文的實現可能不是很完美,我已經將代碼上傳到github,不清楚的地方能夠看源代碼,歡迎大家一起討論。
github地址為:https://github.com/cibon/Robotium_two_clients_framework。
轉載于:https://www.cnblogs.com/mfrbuaa/p/5218164.html
總結
以上是生活随笔為你收集整理的Robotium双client測试框架的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 导出EXCEL遇到问题
- 下一篇: 自适应设计与响应式设计
