目录
前言:
一、方法介绍
1、UI Automator
3、shell脚本
二、shell脚本实现自动化测试原理和步骤
1、 原理
2、步骤
三、shell自动化测试实例
前言:
在开发项目的过程中,我们将某个阶段的需求完成并且提测,通常,在测试工程师更细致的测试之下,会测试出一些我们没有考虑周全而出现的代码逻辑问题或自测没有测出来的交互问题,有些问题可以直接通过打印定位,但是对于一些偶现,且在当前打印中并不能快速定位的问题,那我们接下来的调试步骤一般是在相关代码里添加一些自己的新的打印,然后根据测试工程师描述的步骤进行操作,然后再观察打印,重复这两个步骤之后一步步debug出有问题的代码段,由于这个问题是偶现的,若概率非常小,则需要我们不断的手动点击屏幕,做大量的重复的动作去复现测试工程师描述的问题,该过程相当费“体力”,此时我们会想,既然该操作动步骤是重复的,那我们有没有方法进行自动化测试呢。
那么接下来我重点介绍一种自动测试的方法,shell脚本自动化测试。
一、方法介绍
要实现自动化测试,方法有很多,例如使用原生框架UI Automator、使用第三方开源工具Appium、以及我提到的shell脚本自动化测试等等。接下来,对于前两种方法我只是做一个简单的介绍,第三种自动化测试方法我会着重说明。
1、UI Automator
UI Automator 是一个适用于跨应用功能界面的界面测试框架,对系统和已安装的应用进行测试。借助 UI Automator API 在设备上测试可见元素,而无论 Activity 位于哪里。因此你可以执行打开“设置”菜单等操作或测试设备中的应用。你的测试可以通过描述词查找界面组件,例如该组件中显示的文字,或内容说明等。
• 类型:官方原生测试框架。
• 用途:跨应用UI自动化测试,支持操作系统级界面元素(如通知栏、设置菜单)。
• 特点:无需源码,提供API定位控件,支持多设备并行测试。
• 工具链:UI Automator Viewer用于控件层级分析。
• 缺点:对H5支持有限。
2、Appium
Appium是开源的、跨平台的测试自动化测试框架,主要用于测试移动端应用,Appium支持模拟器和真机上的原生应用、混合应用、Web应用。Appium使用WebDriver的JSON wire协议来驱动Apple系统的UI Automator库、Android系统的UI Automator框架,因Appium集成了Selendroid框架,所以Appium支持比较老版本的Android,Appium支持Selenium WebDriver支持的所有语言(Java、Python、JavaScript、Objective-C、PHP、Ruby、C#、Clojure、Perl等)。
• 用途:跨平台端到端测试,支持原生、混合和Web应用。
• 优势:
1)多语言支持(Python、Java等),脚本复用性高。
2)无需修改应用代码,通过Desired Capabilities配置设备参数。
• 典型操作:元素定位(ID/XPath)、滑动、输入文本。
3、shell脚本
相比于以上提到的两个方法,该方法较为轻量化,但可以测试的功能较为有限,优势是对于一些简单的测试,例如简单的重复点击屏幕几个固定坐标的测试,使用该方法方便快捷,轻量化,不需要配置较为繁杂的坏境,且代码量非常小。
• 用途:测试一些较为简单的测试项,例如重复点击屏幕的固定坐标等。
• 优势:轻量化,系统级别测试,代码编写简单,不需要配置复杂的环境等。
• 缺点:不能实现较为复杂的测试。
二、shell脚本实现自动化测试原理和步骤
1、 原理
Shell自动化测试实际上就是将我们平时adb调试时使用的各种命令组合起来,组成一个可以满足我们测试要求的测试文本,由于我们的测试需求通常是做大量重复操作复现问题,故该脚本通常包含循环语句。测试的时候运行该脚本即可实现自动化测试。
2、步骤
(1)将我们的测试逻辑通过shell语句组合起来,形成一个文本,例如myTest.sh;
(2)adb或者串口连接我们的设备,将该shell文本复制到我们的设备的某个路径下,例如etc/myTest.sh;
(3)使用执行命令使该脚本执行起来(./etc/myTest.sh)。
三、shell自动化测试实例
以下是自动化测试脚本实例,该脚本的功能是打开应用一和应用二,且将它们进行分屏,重复200次。
- #!/system/bin/sh
- sleep 1
- i=1
- while [ $(($i)) -le 200 ]
- do
- i=$(($i+1))
- # 最近任务
- input tap 3811 1087 //点击坐标(3811,1087)
- sleep 0.5
- input tap 3796 1141
- sleep 0.5
- # kill all_pid
- input tap 3615 1483 //点击坐标(3615,1483)
- sleep 0.5
- # init
- input keyevent HOME
- sleep 2
- # 进入侧边栏
- input tap 3811 1087
- sleep 0.5
- input tap 3796 1141
- sleep 0.5
- # 打开应用分屏
- input tap 3238 702
- sleep 0.5
- # 选择应用一
- input tap 2627 738
- sleep 0.5
- # 选择应用二
- input tap 2265 925
- sleep 0.5
- # 确认开启进入分屏
- input tap 2643 1178
- sleep 6
- done
部分代码语句解析:
while [ $(($i)) -le 200 ] : 循环测试两百次
input tap 3811 1087 : 点击屏幕坐标(3811,1087)
input keyevent HOME : 点击home按键,回到主页