自动化测试知识点杂记,后续再进行整理
自动化测试流程与分类
测试流程
需求分析:
当给你一个需求或者一个系统让你去做自动化的时候你什么都不知道你就去做自动化能行吗?你不去分析系统的哪些模块儿适合做自动化哪些不适合 ?
如果盲目的去做,当你做到后面的时候可能你框架还没弄好需求或者系统又变了,那你是否做了无用功?所以我们第一步一定是确定需求或者系统哪些模块适合做自动化,而且一定要明白这个需求或者系统做自动化给我们带来的好处是什么,而不是说为了自动化而做自动化。
方案选择:
有的人可能对选择方案会比较陌生,不知道这个到底是干什么的?那么问你一个很简单的问题,现在自动化测试框架常见的有robotium、appium、monkeyrunnner、UIAutomator等等,这么多的框架你到底选择哪一个呢?其实这就是一个方案的选择,那么有时候你也会根据你项目的需求去选择一个更加适合的框架,让我们这个需求实现利益最大化。
环境准备
这个最好理解,方案选择好之后就该准备环境了。这个环境不会像大家想的那样配置一个jdk、appium、ide就行了,你需要考虑的是appium的版本、持续集成、代码管理等等问题。
系统设计
系统设计主要是对整个测试框架系统进行合理的设计,比如各个公共模块的封装,不同模块的文件管理,配置数据和代码的分离、日志管理等等。就像工程建设实现都是经过严格的方案设计,然后根据设计方案进行施工。
编码
编码故名思意就是编写代码,这里我们的编写代码是根据事设计好的用例来进行编写代码。
自动化测试分类
分层测试
测试金字塔分层一般为三层:底层单元测试、中间层为接口测试、顶层为UI层。测试人员一般是在UI层进行测试。
移动APP的UI自动化测试长久以来一直是一个难点,难点在于UI的”变”, 变化导致自动化用例的大量维护。 从分层测试的角度,自动化测试应该逐层进行。 最大量实现自动化测试的应该是单元测试, 最容易实现也最容易在早期发现问题; 其次是接口级测试, 以验证逻辑为目的进行自动化, 由于接口的相对稳定, 自动化测试成本相对也可以接受; 自动化成本最大的便是UI级自动化测试, 然而UI界面是直接反馈给用户的效果展示,适度的尤其是BVT级的自动化测试也是非常必要的。
jdk配置环境变量步骤
- 下载jdk安装(http://www.oracle.com/technetwork/java/javase/downloads/index.html)选择适合自己系统的进行下载安装,一定要记住是安装路径,等一下有用
- 桌面计算机右键选属性,或是开始菜单计算机上点右键选属性--高级系统设置==环境变量
- 弹出窗口上,新建一个变量名为JAVA_HOME,变量值填JDK安装的最终路径
- 下面是path变量,在其后添加一个英文状态的分号(;)后在末尾加上%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin,点确定
- 下面添加CLASSPATH变量,由于不存在,所以新建一个,变量名CLASSPATH,变量值%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar,首尾不带空格的,点确定完成,至此环境变量配置完成,点确定关掉环境变量配置窗口。
-
最后检测环境变量是否配置成功,cmd窗口输入java -version,会显示安装的java版本。就表示环境变量配置成功。
SDK环境搭建(
Android SDK包下载
- 官网下载:https://android-sdk.en.softonic.com/download
- 网盘下载: http://tools.android-studio.org/index.php/sdk
)
电脑系统变量里面添加变量名ANDROID_HOME 路径为实际存放SDk的路径
其他几个路径配置到系统环境Path中如下图所示
配置检测
在cmd界面输入‘adb’和‘aapt’来判断是否安装SDK成功
UI Automator
Android SDK中提供了如下工具来支持UI自动化测
- uiautomatorviewer---一个图形界面工具来扫描和分析应用的UI空间。存放在tools目录
- uiautomator---一个测试的java库,包含了创建UI测试的各种API和执行自动化测试的引擎
使用方法
- 开启真机(或模拟器)的USB调式模式后连接电脑
- 打开设备上的App界面
- 启动UI Automatorviewer
- 获取对应页面的元素(多设备连接时要选择需要获取元素的设备)
注意事项
报错1
Error while parsing UI hierarchy XML file: Invalid ui automator hierarchy file.
一般Andriod 4.X系统会容易出现,换5.X及以上的系统OK
报错2
java.lang.ArrayIndexOutOfBoundsException
【解答】一般是设备息屏,导致页面没有元素显示,获取时数组地址越界报错,激活设备重启UI Auto即可
- 演示获取真机模拟器的界面
- 获取报错的笔记
报错3
Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!
这个错的原因是因为没有dump下来界面的信息保存到uidump.xml文件中,而该文件保存在/data/local/tmp下,如果没生成该文件,uiautomatorviewer就会报这个错。
解决方案为:重启设备或者重新连接
安卓模拟器
各个模拟器产品
- blueStacks:推出时间长,但游戏兼容性,尤其是性能欠佳
- 靠谱助手:基于bluestacks优化了界面,但缺少属于自己的内核技术,在兼容性和性能方面需要提升,产品不成熟
- 海马玩:版本与功能更新速度慢,弹出广告插件多,占用资源明显
- 逍遥安卓:业界首创一键多开是其亮点,版本更新快,需求响应及时,模拟器性能和兼容性均不错,流畅,口碑好。
- 夜神模拟器:基于Virtualbox定制的安卓模拟器,直接集成NOVA桌面是它特色(个人偏爱这一款)
夜神模拟器安装配置
操作步骤
- 下载成功之后点击安装包。
- 安装成功之后会默认启动一个模拟器,基于Andriod 4.4.2系统
- 关闭该模拟器,找到桌面生成的“夜神多开器”图标,点击打开。
- 点击底部“添加模拟器” 然后选择全新模拟器Android 5.1.1 等待下载安装完成。
- 点击启动模拟器按钮即可成功启动模拟器,默认是平板屏幕模式,可以通过设置切换为手机模式。
开启VT
VT是什么?为什么要开启VT?
VT,全称是Virtualization Technology,即是虚拟化技术,虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
如何开启VT?
- 进入BIOS,选择Configuration选项,选择Intel Virtual Technology并回车。
- 注意:若无VT选项或不可更改,则表示你的电脑不支持VT技术。
- 将光标移动至Enabled处,并回车确定。
- 此时该选项将变为Enabled,最后按F10热键保存并退出即可开启VT功能。
adb命令
adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用。
Tips: 在 android_sdk/platform-tools/ 中找到 adb 工具,然后根据其具体的路径配置好环境变量。然后启动cmd 输入‘adb’即可查看是否配置成功。
启用adb调试:
通过USB链接设备,必须在设备中启用USB debugging
- 当android4.2及更高版本的设备上,Developer options屏幕默认状态下处于隐藏状态,如需显示出来,请转到Settings--About phons并点击Build number七次,
返回上一屏幕,在底部可以找到 Developer options。
-
注:当您连接运行 Android 4.2.2 或更高版本的设备时,系统将显示一个对话框,询问您是否接受允许在这台计算机上调试的 RSA 密钥。这种安全机制可以保护用户设备,因为它可以确保只有在您能够解锁设备并确认对话框的情况下才能执行 USB 调试和其他 ADB 命令。
adb常用命令
- 查看版本
adb verson
-
链接夜神模拟器
adb connect 127.0.0.1:62001
夜神模拟器的端口是规律的,第一个模拟器端口是62001,第二个模拟器端口是62025,第三个是62025+1,依此类推。
- 查看设备详情
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:/ $
在设备上安装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文件
-
首先进入设备的/data/app目录找到app包名
adb shell cd /data/app/
-
.执行命令删除
adb uninstall | -k <apkName> 卸载软件 adb uninstall com.wandoujia.phoenix2
Tips:安装后的包名系统会在末尾加上-1之类的数字,要去掉才可以成功卸载。 软件名称为包名,不要包含.apk
-k 加 -k 参数,为卸载软件但是保留配置和缓存文件.
查看设备上面安装的应用包名:
adb shell pm list package
文件读取写入:
adb push <local> <remote>
将文件从设备读取到PC:
adb pull <remote> <local>
可能会存在权限问题
屏幕截图:
$ 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
Package和Activity
Package
Package 包。只是在我们的app中这个Package是唯一的,就像你身份证号码一样。在我们做app自动化时,我们就需要知道他的Package,我们知道了Package那么也就知道我们需要对哪个app做自动化。 注意和.apk文件包名不同。
通过UIAuto演示不同app的包名--见视频
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
通常用于显示图片用的