互联网的本质就是信息交换。移动互联网更是如此, 所以很多移动互联网的服务类应用中有着身份地位不同的两种用户(比如:交易中的买家和卖家, 教学中的老师和学生, 打车中的车主和乘客)。近期的工作是给公司的某个产品建立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測试框架相关推荐

  1. python的unittest測试框架的扩展浅谈

    非常多时候測试框架须要依据測试数据来自己主动生成測试用例脚本,比方接口測试,通过不同參数构建组合去请求接口,然后验证返回结果.假设这样能通过配置excel数据来驱动測试.而不用去写一大堆的測试用例脚本 ...

  2. 【金阳光測试】大话Android自己主动化測试--Android自己主动化系列(1)--金阳光于2013年4月份...

    Android自己主动化測试框架和工具在四年多的发展日趋成熟. 从五年前的第一代自己主动化架构演进到眼下第四代(本系列讲座第7篇后将具体剖析第三代和第四代自己主动化框架)从曾经最早谷歌推崇的monke ...

  3. Android单元測试之JUnit

    随着近期几年測试方面的工作慢慢火热起来.常常看见有招聘測试project师的招聘信息.在Java中有单元測试这么一个JUnit 方式,Android眼下主要编写的语言是Java,所以在Android开 ...

  4. 使用maven运行单元測试总结

    maven本身没有单元測试框架,可是maven的default生命周期的test阶段绑定了maven-surefire-plugin插件,该插件能够调用Junit3.Junit4.TestNG等Jav ...

  5. 你的第一个AngularJS应用--教程二:基架、建立和測试的工具

    介绍 有非常多可用的工具能够帮助你开发AngularJS 应用,那些非常复杂的框架不在我的讨论范围之中,这也是我開始这系列教程的原因. 在第一部分,我们掌握了AngularJS框架的基本结构,开发了第 ...

  6. 高并发測试工具webbench

    1.简单介绍 webbench最多能够模拟3万个并发连接去測试server的负载能力.编译和配置简单,仅基于TCP协议上对server进行測试. Webbench也是开放源代码.从代码上看,每一个cl ...

  7. 在Eclipse中使用JUnit4进行单元測试(0基础篇)

    本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数,这些函数的功能可能 ...

  8. 第4代白盒測试方法介绍--理论篇

    关键词: 白盒測试 第4代 測试方法 4GWM 在线測试 持续測试 灰盒 脚本驱动 脚本桩 摘  要: 本文是第4代白盒測试方法的理论介绍,描写叙述3个关键领域内9项关键特征的概念与固有特征.同一时候 ...

  9. Selenium2 Python 自己主动化測试实战学习笔记(五)

    7.1 自己主动化測试用例 无论是功能測试.性能測试和自己主动化測试时都须要编写測试用例,測试用例的好坏能准确的体现了測试人员的经验.能力以及对项目的深度理解. 7.1.1 手工測试用例与自己主动化測 ...

最新文章

  1. 2021年大数据Flink(十六):流批一体API Connectors ​​​​​​​​​​​​​​Redis
  2. 使用svn时碰到的一个的问题
  3. 比较顺序表和链表的优缺点
  4. 杂项-Log:NLog
  5. 开课吧里的python学习是真的吗-Python是个什么鬼?为何学英语的都在关注...
  6. 判断objcet是否是map类型_Java集合类和Map判定一个对象是否已经存在
  7. java cstring_Java CString類代碼示例
  8. JAVA-idea中maven配置
  9. 凸优化第五章对偶 5.3 几何解释
  10. 微信小程序获取地理位置源码
  11. python制作软件安装包_Python安装包及开发工具
  12. python和javaweb开发哪个更火_python和Java哪个更适合web开发?
  13. 项目管理中的里程碑是什么
  14. 解决javax.persistence.EntityNotFoundException: Unable to find
  15. 智能合约审计之整形溢出攻击
  16. Java计算文件MD5值
  17. 利用JavaScript批量删除QQ空间说说(只需一个浏览器)
  18. 到底什么是微前端,框架qiankun如何使用(基于vue,附代码)
  19. 面试题--5个数能组成多少中不同的二叉搜索树的结构--卡特兰数
  20. 洪水填充算法_洪水填充算法分析

热门文章

  1. 【安卓开发 】Android初级开发(网络操作)
  2. 网页编程从入门到精通 杨凡_干货 | web前端入门基础知识
  3. diveintopython3 official_Python 学习资料整理
  4. C语言程序控制语句——while
  5. microsoftexchange邮箱容量怎样看_企业邮箱申请注册的要求有哪些?_网站建设_创客网络...
  6. oracle 11g release2版本jdbc,Oracle发布JDeveloper11gRelease2更新版
  7. 发动机冷启动和热启动的区别_「牛车实验室」AGM自动启停蓄电池解读 和普通蓄电池到底有什么区别...
  8. js 转化为实体符_js转html实体的方法
  9. python输入代码如何清除_Bug清除手册-代码书写规范与基本使用(Python)
  10. [渝粤教育] 西南科技大学 数据库应用 在线考试复习资料(3)