QCon2015专场有不少关于架构优化、专项领域调优专题,但能系统性描述产品测试方向只有《携程无线App自动化测试实践》。

 

(一). 携程的无线App自动化

    《携程无线App自动化测试实践》主要介绍了 携程在App自动化方向 进展。

1. 先总结下他们做到了些什么:

(1). 移动设备真机自动化测试集群,及集群监控。

(2). 集群中设备可提供远程人工控制服务(远程操作手机屏幕)。

(3). 基于Appium编写案例。

(4). 建立基本的自动化测试模式(自动化案例:手工案例 为 3:7)。

2. App自动化测试的产出效果:

,

(二). 反思

1. 携程的可改进之点:

(1). PC利用率低下:携程1台PC只挂2台移动设备。

adb查找设备/模拟器 端口是5555~5585,每个设备/模拟器占2个端口,所以PC一般可以挂15个设备/模拟器。当时我们做移动自动化测试时,就是一台PC挂6~8台移动设备。

当然,携程不这么做肯定有原因:

a)adb-server与移动设备 I/O 时,会不定期出现卡死。

原因:移动设备没有返回,导致adb-server一直read()不到数据。另外,adb-server和设备I/O时,是加锁并且没timeout的,这将导致:一台设备读卡死,其他设备也别想干活了……

解决方案:adb监控,发现异常adb,干掉并重启。重启adb会有副作用(执行中案例会失败),但可通过:案例执行的幂等 与 重复执行失败案例 解决。

b)adb无法承受大量 I/O 并发

            adb设计目标并不是为了高并发(从 锁+子进程数限制 可见)……所以当15台设备同时进行高频指令传输时,是很慢的……但单PC负载6~8台移动设备,还是可以的。
       
            所以,恶意猜测下,携程只挂2台目的就是为了省事。

(2). 测试结果 不具备 功能正确性  结论

携程的某些测试类型(如:可达性测试、及所谓的冒烟测试......)不能给出功能正确性判断。这在业界是有争议的,一部分人认为:可测试Activity页是否崩溃/Webpage是否加载成功;另一部分则认为:需要人手返工测试,保证功能正确性,所以它没必要存在。个人更倾向后者。另外,这也从侧面反应出一个问题:UI级别的自动化测试实施不容易,这里就不扯远了。

2. 携程的可取之处:

(1). 提供设备远程人工控制服务(远程操作手机屏幕)。

该功能其实并不新鲜,Testin早在2012年已对外提供类似服务,只不过13年后屏蔽对外。它的优点在于统筹资源,可减少设备冗余。

(2). 基于Appium编写案例。

我之前也负责过YY的移动端测试框架"TestAgent"的实现与维护,之所以认为 基于Appium实施自动化测试 可取,原因有二:

a)能提供良好的 案例编写/编程 风格。

UI自动化测试框架实施,我认为有3个重点:

1. 操作 被测试应用 UI元素 的方法。

2. 提供易读,易用API。

3. 提供方便,完备的 元素索引 方式。

其中2,3是编写优雅测试案例的基础。当然,对于2,3,Appium和TestAgent都是具备的。

b)开源社区支持。

Appium与其他测试框架(包括:阿里,百度,还有YY……)差别就在这里。

                开源社区提供了:大量经验交流,技术支持与持续改进; 
 
                另外,开源工具的广泛普及也降低了日后人员招聘和业务交接的难度。

(3). 携程拥有独立的基础工具研发部门支撑各上层业务测试

以上说的优与劣,皆技术层面问题。但这个非技术性问题,才是我最大感触。

                自从测试中心分拆到各个项目组后,带来了更高效的项目团队,但我感觉存在一些副作用:知识与工具共享比以前困难。我想这也可能是测试中心拆分后,自动化测试方面突破有所减缓的原因之一,业务测试人员在日常测试中是很难兼顾 工具开发+自动化平台运营 与 案例编写+维护 2种职责的。携程自动化测试有此进展,其有基础工具部门支撑是很大原因,而这也是恰恰公司所缺乏的。
 
 
 
 

关于QCon2015感想与反思的更多相关文章

  1. [个人博客作业Week7]软件工程团队项目感想与反思

    在阅读了推荐阅读的材料之后,我想了很多东西.最终还是决定,以团队项目的经历为主线,叙述我关于软件工程的一些思考与体会. 凤凰涅槃,浴火重生 如果要我来概况这几周团队项目的经历的话,那么句话是我所能想到 ...

  2. 【个人博客作业Week7】软件工程团队项目一轮迭代感想与反思

    (发布晚原因:发到团队博客了 一.关于银弹 在佛瑞德·布鲁克斯于1986年发布的<没有银弹:软件工程的本质性与附属性工作>这篇软件工程的经典论文中,作者向我们讲述了软件工程没有银弹这样的理 ...

  3. 开博近一年的感想 by 程序员小白

    /* 好吧,这里的写博客应该理解为更宏观的写文章. */   在去年的这个时候,我所知道的平台只有 CSDN 和博客园..然而 CSDN 的广告实在是不想吐槽了,选择博客园是一件非常自然的事情.要说开 ...

  4. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序

    直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...

  5. BugPhobia开发篇章:Alaph阶段Scurm Meeting

    [github]   https://github.com/bugphobia/XuebaOnline 0x01 :目录与摘要 If you weeped for the missing sunset ...

  6. 个人作业week7——前端开发感想总结

    个人作业week7——前端开发感想总结 1. 反思 首先要谈谈在这次团队项目的工作中,我这边出现过的较为严重的一个问题:我和HoerWing (后端担当)合作时,最初因为我没有使用github(始终连 ...

  7. [2019BUAA软件工程]结对编程感想

    结对编程感想 写在前面   本博客为笔者在完成软件工程结对编程任务后对于编程过程.最终得分的一些感想与经验分享.此外笔者还对于本课程的结对编程部分提出了一些建议. Tips Link 作业要求博客 2 ...

  8. 20165211 获奖感想及java课程总结

    20165211 获奖感想及java课程总结 理论脱离实践是最大的不幸.--达芬奇 这句话,是我在学习Java之前,假期内写的20165211 学习基础和C语言调查里的所引用的一句话,是当时我对Jav ...

  9. Android 开发感想

    18年从.net转行做安卓开发,现在已经过去一年多了.说一下感想和心得体会! 一.开始 说一下我的经厉,从毕业开始出来工作一直是从事.net方向的开发工作.一开始也是没什么经验,加上也没有其他手艺就找 ...

随机推荐

  1. Java使用Scanner接收中文并输出时出现乱码

    Java中使用Scanner接收输入的中文并输出时会出现乱码现象,怎么解决此问题呢? 1.方法一 在声明Scanner时添加对应的编码格式就可以了,如下所示: Scanner sc = new Sca ...

  2. AspNetPager 免费分页控件7.5.1版发布!

    AspNetPager 免费分页控件7.5.1版发布,本次升级主要内容有: 修正了ShowDisabledButtons为false时html闭合标签丢失的bug:改为从System.Web.UI.W ...

  3. iOS NSDate与NSString相互转化

    1.时间格式的字符串转date NSString *birthdayStr=@"1986-03-28 00:00:00.000"; NSDateFormatter *dateFor ...

  4. window下flask开发环境搭建

    1.安装python 官网下载https://www.python.org/downloads/,按提示安装就行,记住安装目录,把它添加到系统path中. 2.安装pip 官网下载pip文件:http ...

  5. archlinux 安装过程记录

    2014年安装了一次,使用U盘启动安装的,但是当时网络有问题,断断续续,没有做详细记录. 现在到了杭州,重新来一次. 使用U盘安装 下载ISO :http://mirrors.163.com/arch ...

  6. [ MySql学习心得 ] --Two

    五.MySql 中常用子句 1.where子句 我们都知道在查询数据时,未必会查整个表中的数据,当有条件查询时,就会用到where子句.其结构: select * from  [表名]  where ...

  7. 异常:System.Data.EvaluateException: 未找到列[District].

    异常:System.Data.EvaluateException: 未找到列[District]. 这里存在的问题不一定是说,数据源表没有该字段.此问题在于数据库字段包含空格字符.

  8. GDB常用命令

    一. gdb使用流程 1.编译生成可执行文件 gcc -g hello.c -o hello 2.启动gdb gdb hello 3. 在main处设置断点 break main 4.运行程序 run ...

  9. JavaScript-计算器

    事件周期 DOM:3个阶段 1.捕获:从最外层元素,向内层元素,逐个记录绑定的事件处理函数.默认,暂不触发任何事件 2.目标触发:优先触发目标元素绑定的事件处理函数 目标元素:实际点击的元素 3.冒泡 ...

  10. 前端学习之touch.js与swiper学习

    Touch.js是移动设备上的手势识别与事件库,改框架基于原生js,操作简单,主要分drag,swipe,rotate,scale,tab,hold,touch操作. swiper是一个移动端触摸滑动 ...