主要讲解内容及笔记:

一、Cafe原理

Cafe是一款自动化测试框架,解决问题:跨进程测试、快速深度测试

官网:http://baiduqa.github.io/Cafe/

Cafe provides the following benefits:

* You can develop test cases across processes by operating them via Cafe.

* You can get & set system state without changed tested application, such as open or close wifi.  ——利用android4.2的一个系统漏洞,4.2以上的版本补上了这个漏洞,该项功能应该就失效了

* You can get & set fields of tested objects even invoke functions by calling api.

* The framework can handle system running log for some non-ui check point.

* You can do application UI depth-first travel automated by invoking only one api.

* You can record hand-operations to cafe code and replay it even at another phone or others version android.

二、核心技术

1、跨进程——AIDL分析

AIDL(Android Interface Definition Language——安卓接口定义语言)

AIDL与其他的接口定义语言类似,它允许你定义编程接口,使用进程间通信(Interprocess Communication,简称IPC)来使得client和server之间能够通信。安卓系统中的进程之间不能共享内存,因此需要定义一些机制在不同进程间进行数据通信。

建立AIDL服务的步骤(摘自百度,还得自己试一下,内容不理解)——————

建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:
(1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。
(2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。
(3)建立一个服务类(Service的子类)。
(4)实现由aidl文件生成的Java接口。
(5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。
 
2、利用漏洞提升权限
 
System权限的应用场景:
-设置系统时间、系统属性
-重启adb、重启手机
 
利用安卓签名检查漏洞(ZipFile.java)
首先说明一下什么是安卓签名检查漏洞?(具体见:http://www.isucc.me/390.html)
其实就是zip压缩包(apk本来就是zip压缩包)允许统一路径下存在多个同名文件的特性导致的,然后程序检查签名呢,是会检查最后一个,但是解压程序,安卓系统加载文件的时候又是走的前面的那个(只要保证新文件在原来文件的文件流靠前的位置即可),危害很大,所以安卓4.2之后的系统就修复了这个漏洞
 
-在没有platform签名的情况下修改Settings.apk的代码逻辑
-普适性:安卓1.6-4.2都存在这个漏洞,可用作测试提权
-zip允许同名文件存在,第一个是修改的class.dex,第二个是原来的class.dex
-利用安装签名校验时,同名文件只会校验最后面那个
 
其他技术:架构用法
-可以不启动instrument,通过intent即可调用cafe.apk中的接口
例子不懂,等自己试了回来补充
 
-get和set方法:获取系统属性,用到了java的反射机制(不懂,查!!!)
-遍历优化算法:local.traveler()
 
三、demo演示
这个要自己去跑,注意的就是:签名要一致,否则就无法用,这个跟Robotium一致,就是说你所要测试的程序和testapk的签名得一致,然后这个testapk才能在所测试的程序上跑
 
四、源码分析
1、com.baidu.cafe.remote——IRemoteArms.aidl(所有的跟安卓操作相关的都定义了获取操作)
2、com.baidu.cafe.local.traveler——AppTraveler.java(改进了monkey的遍历算法,避免了monkey里面的死循环)
3、录制器(可以自己试一下,用自家程序试试,哈哈!!)
-基于hook的录制原理(windows上面有hook啊,而且现在很多程序会利用hook来写驱动啥的,导致根本卸载不了)
-UI遍历测试
4、com.baidu.cafe.local——LocalLib.java(searchTextFromParent,找到父控件,然后就能找到所嵌套的子控件,用的反射的原理:具体程序是com.baidu.cafe.remote里的ReflectHelper.java)
注:动态生成的视图也是可以getview的
5、生成报告(android-junit-report-x.x.x.jar)——这个我可以用在我的Robotium的程序里,生成report啊
6、因为对Robotium做了封装,可以直接在里面用Robotium的东西,solo啊solo啊
 
五、cafe的优点和缺点
 
优点:
失败时自动截图
测试用例截取logcat日志
自动生成Junit Report Xml
获取应用当前的帧率(比如“英雄联盟”的程序,在同等情况下,帧率越高程序性能越好,类似程序或者视频的这种需要用到)
获取当前的tcp发送和接收流量(新闻、视频啊之类的,尤其是在使用了3G流量的情况下)
使用root权限执行shell(在已root的系统上?root之后就可以提权)
 
缺点:
安卓4.2以上系统反签名有问题(最新版本也没有修复?)
脚本编写人会junit+java(java在学,junit其实用到了一点,系统的知识还是需要查一下)
不去封装稳定版本的uiautomator(所以还是需要看一下uiautomator的框架,熟悉和理解Uiautomator和Robotium的框架)
 
本次cafe架构自动化视频学习连接:http://www.goldensunshine.cc/forum.php?mod=viewthread&tid=20&extra=page%3D2

网易云课堂:

http://study.163.com/course/courseMain.htm?courseId=712011

金阳光测试

新浪微博:金阳光woody

         

          网站地址

1、百度搜:金阳光测试

2、官网:www.goldensunshine.cc

微信公众号

百度Cafe原理--Android自动化测试学习历程的更多相关文章

  1. Robotium原理初步--Android自动化测试学习历程

    章节:自动化基础篇——Robotium原理初步(第四讲) 主要讲解内容与笔记: 一.基于控件 1.spinner——下拉菜单 2.TabHost——左右滑动选择菜单,类似电话本 3.Gallery—— ...

  2. Appium原理初步--Android自动化测试学习历程

    章节:自动化基础篇——Appium原理初步(第七讲) 本期关键词: Appium.跨语言跨平台.Bootstrap 主要讲解内容及笔记: 一.what is appium 一种封装了uiautomat ...

  3. Selenium原理初步--Android自动化测试学习历程

    章节:自动化基础篇——Selenium原理初步(第五讲) 注:其实所有的东西都是应该先去用,但是工具基本都一样,底层都是用的最基础的内容实现的,测试应该做的是: (1)熟练使用工具,了解各个工具的利弊 ...

  4. MonkeyRunner原理初步--Android自动化测试学习历程

    章节:自动化基础篇——MonkeyRunner原理初步 主要讲解内容及笔记: 一.理论知识和脚本演示 最佳方式是上官网文档去查看monkeyrunner的介绍,官网上不去,就找了一个本地的androi ...

  5. 截图原理(二)——android自动化测试学习历程

    接上一篇(截图原理) 视频地址:http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=87 ...

  6. 截图原理(一)——Android自动化测试学习历程

    把两节的内容汇总起来,第一节讲的是如何在apk中直接进行截屏,用到了Robotium的Solo类的takeScreenShot方法,有一个小的demo,以及从方法一直往里钻,知道它具体是怎么进行截屏的 ...

  7. AndroidDriver原理初步--Android自动化测试学习历程

    章节:自动化基础篇——AndroidDriver原理初步(第六讲) 主要讲解内容及笔记: 一.AndroidDriver核心原理 对上图的解析: PC端的端口通过adb,将android版的Remot ...

  8. Monkey原理初步和改良优化--Android自动化测试学习历程

    章节:自动化基础篇——Monkey原理初步和改良优化(第三讲) 主要讲解内容与笔记: 一.理论知识: 直接看文档,来了解monkey的概念.基本原理,以及如何使用. First,what is And ...

  9. 自动化预备知识上&&下--Android自动化测试学习历程

    章节:自动化基础篇——自动化预备知识上&&下 主要讲解内容及笔记: 一.需要具备的能力: 测试一年,编程一年,熟悉并掌握业界自动化测试工具(monkey--压力测试.monkeyrun ...

随机推荐

  1. [转]身份证从 15 >> 18

    身份证号码的结构和表达形式 1.号码的结构 由十七位数字本体码和一位效验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字效验码.2.地址码 表示编码对象常住 ...

  2. [转]Windows服务“允许服务与桌面交互”的使用和修改方法

    上一篇文章是纯 C# 代码的形式勾上 “允许服务与桌面交互” 选项的 本文转载自:http://blog.csdn.net/lanruoshui/article/details/4756408 描述: ...

  3. 未来的趋势发展 802.11v网络协议解析

    目前的无线网络中,一个基站通常与拥有最强信号的接入点联系在一起.但是,这个接入点也许过载了.在802.11v标准中,包括了一个指令,接入点能够使用这个指令要求一个基站报告它支持的无线电信道.传输的功率 ...

  4. 【Python编程:从入门到实践】chapter4 操作列表

    chapter4 操作列表 4.1 遍历整个列表 magicians=['alice','david','carolina'] for magician in magicians: print(mag ...

  5. 知识picture

  6. OpenACC 与 CUDA 的相互调用

    ▶ 按照书上的代码完成了 OpenACC 与CUDA 的相互调用,以及 OpenACC 调用 cuBLAS.便于过程遇到了很多问题,注入 CUDA 版本,代码版本,计算能力指定等,先放在这里,以后填坑 ...

  7. bootstrapValidator针对设置赋值进行验证

    bootstrapValidator在提交的时候可以进行验证,但是对于点击输入框进行赋值的时候验证失效. 解决方法: 然后在设置change方法方可解决.

  8. Spring Boot实践——用外部配置填充Bean属性的几种方法

    引用:https://blog.csdn.net/qq_17586821/article/details/79802320 spring boot允许我们把配置信息外部化.由此,我们就可以在不同的环境 ...

  9. UI5-文档-4.11-Pages and Panels

    在完成了应用程序结构的所有工作之后,是时候改进我们的应用程序的外观了.在这一步中,您还将了解控件聚合. Preview A panel is now displaying the controls f ...

  10. Asp.Net MVC参考资料

    Every day up!!!!!! 1.无废话MVC入门教程 2.MVC快速入门 3.MVC小牛之路 4.Web API强势入门指南 5.全网最全的mvc汇总 6.MVC5+EF6+Bootstra ...