目录
前言:
Appium是一种用于自动化移动设备应用程序的开源工具,它具有跨平台的特性,能够在iOS和Android等多种移动设备上进行测试。Appium提供了一套API,开发人员可以使用多种编程语言来编写自动化脚本。
Appinum前置知识
app类型和区别
Andriod SDK
元素获取—UI Automator
adb命令实践
Android 调试桥
adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用。
Tips: 在 android_sdk/platform-tools/ 中找到 adb 工具,然后根据其具体的路径配置好环境变量。然后启动cmd 输入‘adb’即可查看是否配置成功。
adb 的工作原理
启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有,它将启动服务器进程。当服务器启动时,它与本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令—所有 adb 客户端均使用端口 5037 与 adb 服务器通信。
启用 adb 调试
要在通过 USB 连接的设备上使用 adb,您必须在设备系统设置中启用 USB debugging(位于 Developer options 下)。
在运行 Android 4.2 及更高版本的设备上,Developer options 屏幕默认情况下处于隐藏状态。如需将其显示出来,请转到 Settings > About phone 并点按 Build number 七次。返回上一屏幕,在底部可以找到 Developer options。
注:当您连接运行 Android 4.2.2 或更高版本的设备时,系统将显示一个对话框,询问您是否接受允许在这台计算机上调试的 RSA 密钥。这种安全机制可以保护用户设备,因为它可以确保只有在您能够解锁设备并确认对话框的情况下才能执行 USB 调试和其他 ADB 命令。
adb常用命令
查看adb版本
adb version
连接夜神模拟器(此处分别演示模拟器和真机连接)
adb connect 127.0.0.1:62001
Tips:
夜神模拟器的端口是规律的,第一个模拟器端口是62001,第二个模拟器端口是62025,第三个是62025+1,依此类推。
-
模拟器1:Android 4.4.2 地址:127.0.0.1:62001
-
模拟器2: Andriod 5.1.1 地址:127.0.0.1:62025
-
更多详情:夜神安卓模拟器adb命令详解
查看设备信息
adb devices
如果出现如下提示:
adb server version (31) doesn't match this client (36); killing...
-
原因: adb版本不对 ,Androd SDK的版本和模拟器的adb版本不一致
-
解决方案:将Android SDK的 adb替换掉模拟器的adb即可。模拟器adb路径 :{安装Path}\Nox\bin
adb shell
android 设备底层是 linux 系统。 shell 是 linux 系统的字符交互界面。
adb shell #进入指定设备shell adb -s 127.0.0.1:62001 shell #退出adb shell exit
进入adb shell后有两种状态显示:#代表有root权限,$代表没有root权限
root@android:/ # shell@mx4:/ $
root用户是系统中唯一的超级管理员,它具有等同于操作系统的权限。一些需要root权限的应用,譬如广告阻挡,卸载系统预装App是需要root权限的。可问题在于root比windows的系统管理员的能力更大,足以把整个系统的大部分文件删掉,导致系统完全毁坏,不能再次使用。所以,用root进行不当的操作是相当危险的,轻微的可以死机,严重的甚至不能开机。所以,在Unix、Linux及Android中,除非确实需要,一般情况下都不推荐使用root。
在设备安装apk
adb install | -r <apkName> -r 覆盖原安装文件 -s 可以指定设备 eg: #默认安装 adb install "C:\Users\Shuqing\Desktop\Appium 自动化测试教程\wandoujia.apk" #覆盖安装 adb install -r "C:\Users\Shuqing\Desktop\Appium 自动化测试教程\wandoujia.apk" #指定设备安装 adb -s 127.0.0.1:62001 install C:\Users\Shuqing\Desktop\Appium\kaoyan3.1.0.apk 自动化测试教程\wandoujia.apk"
如遇到报错:Failure [INSTALL_FAILED_INVALID_URI]
解决方案: cmd命令行下执行以下命令:
-
第一步、adb remount
-
第二步、adb shell
-
第三步、cd /data
-
第四步、chmod 777 local
-
重新安装apk,ok了。
卸载apk
1.首先进入设备的/data/app目录找到app包名
adb shell cd /data/app/
2.执行命令删除
adb uninstall | -k <apkName> 卸载软件 adb uninstall com.wandoujia.phoenix2
Tips:安装后的包名系统会在末尾加上-1之类的数字,要去掉才可以成功卸载。 软件名称为包名,不要包含.apk
-k 加 -k 参数,为卸载软件但是保留配置和缓存文件.
查看设备上面安装的应用包名
adb shell pm list package
文件读取写入
将文件从PC写入到设备
adb push <本地路径> <设备路径> eg: adb push C:\Users\Shuqing\Desktop\kyb.txt /sdcard C:\Users\Shuqing\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\Shuqing\Desktop /sdcard/server.log: 1 file pulled. 0.0 MB/s (196 bytes in 0.004s)
注意:由于权限问题,不能直接pull到电脑磁盘根目录,否则会报错:
C:\Users\Shuqing>adb pull /sdcard/server.log D:\\ adb: error: cannot create file/directory 'D:\\': No such file or directory
屏幕截图
$ adb shell screencap /sdcard/screen.png adb pull /sdcard/screen.png C:\Users\Shuqing\Desktop
adb服务启动和关闭
adb kill-server 关闭adb服务 adb start-server 开启adb服务
Tips:如果5037端口被占用可以使用如下命令释放端口
C:\Users\Shuqing> 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 XXX
小结
-
adb是自动化非常重要的一个工具
-
目前很多PC客户端手机助手也是基于adb连接原理进行封装的。
-
可以将常用的adb命令封装成bat命令,随时可以运行。如:
adbdevices.bat
adb devices pause
AdbConnect.bat
adb connect 127.0.0.1:62025 adb devices pause
Package与Activity
adb shell pm list package 查看所有的package包
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获取
研发提供
aapt
aapt即Android Asset Packaging Tool,在SDK的build-tools目录下。该工具可以查看,创建, 更新ZIP格式的文档附件(zip, jar, apk)。也可将资源文件编译成二进制文件。获取命令如下:
aapt dump badging xxxx.apk aapt dump badging xxxx.apk | find "launchable-activity"
可以把appt配置到环境变量(系统变量中的Path),这样运行便捷一些,appt路径:\Andriod_SDK\build-tools{version}
Activity页面布局元素
FrameLayout
FrameLayout是最简单的布局了。所有放在布局里的控件,都按照层次堆叠在屏幕的左上角。后加进来的控件覆盖前面的控件。
LinearLayout
LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。
RelativeLayout
RelativeLayout相对布局允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。
AbsoluteLayout
AbsoluteLayout是绝对位置布局。在此布局中的子元素的android:layout_x和android:layout_y属性将生效,用于描述该子元素的坐标位置。屏幕左上角为坐标原点(0,0),第一个0代表横坐标,向右移动此值增大,第二个0代表纵坐标,向下移动,此值增大。在此布局中的子元素可以相互重叠。在实际开发中,通常不采用此布局格式,
TableLayout
TableLayout 为表格布局,适用于N行N列的布局格式。一个TableLayout由许多TableRow组成,一个TableRow就代表TableLayout中的一行。
TextView
通常用于显示文字用的。
ImageView
通常用于显示图片用的。
monkey简介
Monkey简介
在Android的官方自动化测试领域有一只非常著名的“猴子”叫Monkey,这只“猴子”一旦启动,就会让被测的Android应用程序像猴子一样活蹦乱跳,到处乱跑。人们常用这只“猴子”来对被测程序进行压力测试,检查和评估被测程序的稳定性。
Moneky 路径
Monkey程序是Android系统自带的,其启动脚本是位于Android系统的/system/bin目录的Monkey文件,其jar包是位于Android系统的/system/framework目录的Monkey.jar文件。用户主要是通过adb命令来启动Monkey的,Monkey在运行时,会根据命令行参数的配置,生成伪随机的事件流,并在Android设备上执行对应的测试事件。同时,Monkey还会对测试系统进行监测,当出现以下三种情况时会进行特殊处理:
-
如限定了Monkey运行在特定包上,当监测到试图转到其他包的操作,将对其进行阻止。
-
如应用程序崩溃或接收到任何失控异常,Monkey将记录对应的错误