安卓平台自动化测试之ADB工具

1.Android系统漫谈

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导(2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟)及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。

    1.1 发行版本

Android在正式发行之前,最开始拥有两个内部测试版本,并且以著名的机器人名称来对其进行命名,它们分别是:阿童木(AndroidBeta),发条机器人(Android 1.0)。后来由于涉及到版权问题,谷歌将其命名规则变更为用甜点作为它们系统版本的代号的命名方法。甜点命名法开始于Android 1.5发布的时候,然后按照26个字母数序

Android 1.1 2008年9月发布的Android第一版。

Android 1.5 Cupcake(纸杯蛋糕):2009年4月30日发布。

Android 1.6 Donut(甜甜圈):2009年9月15日发布。

Android 2.0 2009年10月26日发布。

Android 2.2/2.2.1 Froyo(冻酸奶)2010年5月20日发布。

Android 2.3.x Gingerbread(姜饼) :2010年12月7日发布。

Android 3.0 Honeycomb(蜂巢):2011年2月2日发布。

Android 4.0 Ice Cream Sandwich(冰激凌三明治):2011年10月19日在香港发布。

Android 4.1 Jelly Bean(果冻豆):2012年6月28日

4.2 Jelly Bean(果冻豆):2012年10月30日

Andriod 4.0 KitKat(奇巧巧克力)

Android 4.4KitKat(奇巧巧克力): 2013年下半年 2013年9月4日凌晨,谷歌对外公布了Android新版本Android 4.4KitKat(奇巧巧克力),并且于2013年11月01日正式发布,新的4.4系统更加整合了自家服务,力求防止安卓系统继续碎片化、分散化。

Android 5.0 Lollipop(棒棒糖):2014年11月3日

Android5.0 系统使用一种新的Material Design设计风格。从图片上就能看到一些全新的设计。

Android 6.0 Marshmallow(棉花糖):2015年5月28日

新系统的整体设计风格依然保持扁平化的MeterialDesign风格。Android6.0在对软件体验与运行性能上进行了大幅度的优化。据测试,Android6.0可使设备续航时间提升30%。

Android 7.0 Nougat(牛轧糖):2016年8月22日[10]

Android 8.0 Oreo(奥利奥)

2017年8月22日,谷歌正式发布了Android

8.0的正式版,其正式名称为:Android Oreo(奥利奥)

Android 9.0 Pistachio Ice Cream(开心果冰淇淋)

2018年2月,Android 9.0的初步代号定为Pistachio

Ice Cream,中文暂译为开心果冰淇淋,预计2018年5月9日发布。

Android 4.2 Jelly Bean 原生系统用户界面 Android 4.2Jelly Bean(果冻豆):2012年10月30日 Android 4.2沿用“果冻豆”这一名称,以反映这种最新操作系统与Android 4.1的相似性。

1.2 定制版本

   MIUI

   flyme

  EMUI

  SmartisanOS

1.3 Android各系统占有率,研发团队一般根据占用率决定兼容哪些版本

http://mta.qq.com/mta/data/device/os

https://mtj.baidu.com/data/mobile/device/

资料来源: https://baike.baidu.com/item/Android/60243?fr=aladdin

2.初识Anrdiod SDK

2.1 SDK简介

SDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此,Android

SDK 指的是Android专属的软件开发工具包。另外Android开发环境有多套,比如Android studio,Adt等。其实下载哪个都是可以完成自动化测试环境搭建,sdk相对比较轻量级且觉得够用

2.2 下载与安装

首先需要安装配置好jdk环境,确认java环境变量配置OK,Cmd中运行如下命令界面显示如下即jdk环境配置OK;

C:\Users\gxj48899>java -versionjava

version "1.8.0_05"Java(TM) SE Runtime Environment (build1.8.0_05-b13)Java

 HotSpot(TM)64-Bit Server VM (build 25.5-b02, mixed mode)


图2-2-1


Android SDK包下载官网下载:https://android-sdk.en.softonic.com/download(打不开很正常,有墙)

如果下载的.exe 文件则运行文件,一路傻瓜式安装。如果下载.zip直接解压即可

1)打开C:\Program Files \Android文件夹,点击SDK Manager.exe打开管理窗口

图2-2-2


2)勾选需要安装的工具

Android SDK Tools:(必须,只需下载一个版本,一般选最新版本):基础工具包,版本号带rc字样的是预览版。

Android SDK Platform-tools(必须,只需下载一个版本,一般选最新版本):从android2.3开始划出此目录,存放公用开发工具,比如adb、sqlite3等,被划分到了这里。

Android SDK Build-tools(必须,可以安装多个版本):Android项目构建工具。

SDK Platform(必须):对应平台的开发工具,需要在哪个版本的平台下开发就下载哪个。

勾选完成之后点击Install


图2-2-3

3)依次选择包点击接受,注意每个包都要依次设置


图2-2-4

4)点击安装


图2-2-5

2.3 环境变量

1)系统变量里面添加变量名 ANDROID_HOME 路径为实际存放SDK的路径


图2-2-6

2)将C:\Program Files\Andriod\platform-tools;

C:\Program Files\Andriod\tools;

C:\Program Files\Andriod\build-tools;

C:\Program Files\Andriod\build-tools;C:\Program Files\Andriod\build-tools\29.0.2;写入系统变量的Path中


图2-2-7

在cmd界面输入“adb” 和“aapt”来判断安装是否成功。


图2-2-8
图2-2-9

3.UIAutomator

3.1 UIAutomator简介

Android 4.3发布的时候包含了一种新的测试工具–uiautomator,uiautomator是用来做UI测试的。也就是普通的手工测试,点击每个控件元素看看输出的结果是否符合预期。比如 登陆界面 分别输入正确和错误的用户名密码然后点击登陆按钮看看是否能否登陆以及是否有错误提示等。

3.2 UIAutomator使用

双击C:\Program Files\Andriod\tools\uiautomatorviewer.bat可能会出现闪退,将bat文件拖入CMD中查看报错原因


图3-2-1

如果出现以上报错,解决方案:降级JDK为8.0

打开成功界面如下,在自动化测试中该工具主要用来进行原生元素的定位

图3-2-2

链接真机,此真机为远程真机而非本地电脑连接的真机:

1)adb connect 10.101.52.78:15225

2)adb devices 查看手机链接情况

3)打开App

4)点击按钮截图


图3-2-3


截图成功,该工具右上角展示目前元素的坐标位置,相同手机在不同分辨率的手机上坐标不同,通常我们使用坐标定位时,一般用相对手机宽高进行定位


可能遇到的坑:点击按钮截图,报错


图3-2-4

解决方案:

在cmd命令窗口中输入 adb root 即可

无效时,可参考其他解决方案,笔者百度到的解决方案:

https://blog.csdn.net/weixin_39230341/article/details/90598944

4.adb 命令

4.1 adb简介:

adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用。

Tips: 在 android_sdk/platform-tools/ 中找到 adb 工具,然后根据其具体的路径配置好环境变量。然后启动cmd 输入‘adb’即可查看是否配置成功。

4.2 adb工作原理:

启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有,它将启动服务器进程。当服务器启动时,它与本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令—所有 adb 客户端均使用端口 5037 与 adb 服务器通信

4.3  adb常用命令

在通过ADB连接手机之前,一定要

1)打开开发者选项选择允许通过USB调试、允许通过USB安装

2)手机不能锁屏

3)手机不能设密码

常用命令:

1)adb version查看ADB版本

2)adb connect 127.0.0.1:62001--》连接远程手机

3)adb devices--》查看连接的设备信息

4)adb shell --》进入手机系统,进入之后可以用linux命令与系统交互

adb –s 127.0.0.1:62001(设备名) shell 指定进入某台手机

5)exit 退出手机系统

进入adb shell后有两种状态显示:#代表有root权限,$代表没有root权限

root@android:/ #

shell@mx4:/$

“人非圣贤孰能无过,但是拥有root密码就真的万劫不复了。”Root权限是一种超出Admin的权限

6)使用adb命令安装apk文件

adb install | -r <apkName>  -r 覆盖原安装文件 -s 可以指定设备

eg:

#默认安装

adb install “D:\MyConfiguration\gxj48899\Downloads\apk名称.apk”

#覆盖安装

adb install -r  “ D:\MyConfiguration\gxj48899\Downloads\apk名称.apk”

#指定设备安装

adb  -s 10.101.52.78  install  -r “D:\MyConfiguration\gxj48899\Downloads\tap名称.apk"

Adb安装App遇到的坑:

1)安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE或者INSTALL_FAILED_VERSION_DOWNGRADE


解决方法:原因:手机上装了相同版本的apk,删掉重新执行命令即可

2)如遇到报错:Failure [INSTALL_FAILED_INVALID_URI]和Unable to open file,此为权限问题,调整权限即可

解决方案: cmd命令行下执行以下命令:

第一步、adb remount

第二步、adb shell

第三步、cd /data

第四步、chmod 777 local

重新安装apk,ok了。

7)执行命令删除

adb uninstall  | -k  <apkName>  卸载软件

adb uninstall  软件包名(注意软件包名不是软件名称,稍后笔者为大家详细讲解)

Tips:安装后的包名系统会在末尾加上-1之类的数字,要去掉才可以成功卸载。 软件名称为包名,不要包含.apk

-k 加 -k 参数,为卸载软件但是保留配置和缓存文件.

查看设备上面安装的应用包名 adb shell pm list package

8)文件读取写入

将文件从PC写入到设备

adb push  <local> <remote>

eg:

adb push C:\Users\gxj48899\Desktop\kyb.txt  /sdcard

C:\Users\gxj48899\Desktop\kyb.txt: 1 file pushed. 0.1 MB/s (462 bytes in 0.005s)

将文件从设备读取到PC

adb pull   <remote>   <local>

eg:

adb pull /sdcard/server.log  C:\Users\gxj48899\Desktop

/sdcard/server.log: 1 file pulled. 0.0 MB/s (196 bytes in 0.004s)

注意:由于权限问题,不能直接pull到电脑磁盘根目录,否则会报错:

C:\Users\gxj48899>adb pull /sdcard/server.log  D:\\

adb: error: cannot create file/directory 'D:\\': No such file or directory

9)屏幕截图

$ adb shell screencap /sdcard/screen.png

adb pull /sdcard/screen.png  D:\MyConfiguration\gxj48899\Downloads

用于后期改写AppiumLibrary的截图方法


9)adb服务启动和关闭

adb kill-server                        关闭adb服务

adb start-server                      开启adb服务

Tips:如果5037端口被占用可以使用如下命令释放端口

C:\Users\gxj48899> netstat -ano | findstr "5037"

TCP    127.0.0.1:5037         0.0.0.0:0              LISTENING       11072

TCP    127.0.0.1:5037         127.0.0.1:59519        TIME_WAIT       0

taskkill -f -pid 11072

小结

1.adb是自动化非常重要的一个工具

2.目前很多PC客户端手机助手也是基于adb连接原理进行封装的。

3.可以将常用的adb命令封装成bat命令,随时可以运行。

如:

adbconnect 127.0.0.1:62025

adbdevices

pause

参考文档

http://www.android-doc.com/tools/help/adb.html

https://developer.android.com/studio/command-line/adb.html (如打不开,很正常!因为有墙。。)

https://www.cnblogs.com/lxs1314/p/6214154.html

5.Package与Activity

Package

Package 包。只是在我们的app中这个Package是唯一的,就像你身份证号码一样。在我们做app自动化时,我们就需要知道他的Package,我们知道了Package那么也就知道我们需要对哪个app做自动化。 注意和.apk文件包名不同。

Activity

Android中,activity是所有程序的根本,所有程序的流程都运行在activity之中,activity可以算是开发者遇到的最频繁,也是android当中最基本的模块之一。在android的程序中,activity一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么activity就相当于一个网页。在activity当中可以添加一些Button、Checkbox等控件,可以看到activity概念和网页的概念相当类似。

一般一个android应用是由多个activity组成的,这多个activity之间可以进行相互跳转。例如,按下一个Button按钮后,可能会跳转到其他的activity,与网页跳转稍微有点不一样的是,activity之间的跳转有可能返回值。

Tips:activity的生命周期:即“产生、运行、销毁”,但是这其中会调用许多方法onCreate(创建) 、onStart(激活) 、onResume(恢复) 、onPause(暂停) 、onStop(停止) 、onDestroy(销毁) 、onRestart(重启)。

Activity获取

1)研发提供

2)aaptaapt即Android Asset Packaging Tool,在SDK的build-tools目录下。该工具可以查看,创建, 更新ZIP格式的文档附件(zip, jar, apk)。也可将资源文件编译成二进制文件。获取命令如下:

aapt dump badging xxxx.apkaapt dump badging xxxx.apk | find “launchable-activity”可以把appt配置到环境变量(系统变量中的Path),这样运行便捷一些,appt路径:\Andriod_SDK\build-tools\{version}

图5-1-1

Activity页面布局元素

FrameLayoutFrameLayout是最简单的布局了。所有放在布局里的控件,都按照层次堆叠在屏幕的左上角。后加进来的控件覆盖前面的控件。

LinearLayoutLinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。

RelativeLayoutRelativeLayout相对布局允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。

AbsoluteLayoutAbsoluteLayout是绝对位置布局。在此布局中的子元素的android:layout_x和android:layout_y属性将生效,用于描述该子元素的坐标位置。屏幕左上角为坐标原点(0,0),第一个0代表横坐标,向右移动此值增大,第二个0代表纵坐标,向下移动,此值增大。在此布局中的子元素可以相互重叠。在实际开发中,通常不采用此布局格式,

TableLayoutTableLayout 为表格布局,适用于N行N列的布局格式。一个TableLayout由许多TableRow组成,一个TableRow就代表TableLayout中的一行。

TextView通常用于显示文字用的。

ImageView通常用于显示图片用的。

参考资料:

http://www.xuebuyuan.com/1975042.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,446评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,450评论 2 369
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 140,740评论 0 318
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 51,962评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,842评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 45,982评论 1 271
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,408评论 3 380
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,123评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,348评论 1 287
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,472评论 2 307
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,248评论 1 324
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,117评论 3 310
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,494评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,834评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,109评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,364评论 2 340
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,560评论 2 335

推荐阅读更多精彩内容