Android UiAutomator
UiAutomator是一个做UI测试的自动化框架。《Android自动化测试框架》中已有详细介绍,这里就不再累赘了。
一、首先了解自动化测试流程
- 自动化需求分析
- 测试用例设计
- 自动化框架搭建
- 脚本编写
- 测试运行
- 结果分析
二、自动化测试框架的搭建
1.JDK 1.6以上
2.SDK (android sdk tools revision21 or higher;android sdk platform API 16 or higher )
3.Eclipse (adt)
4.ANT
接下来环境变量配置。1-3的环境变量配置详见《搭建Android开发环境》。这里讲一下ANT的环境变量配置。博主使用的eclipse是adt-bundle,也就是已经集成好的工具。先在Eclipse目录下搜索ant.bat,找到文件的位置。配置好变量之后,运行ant -h显示如图即配置成功。
变量名:ANT_HOME 变量值:ant.bat的路径,例如:E:\adt\eclipse\plugins\org.apache.ant_1.8.3.v201301120609
变量名:Path 变量值:%ANT_HOME%\bin;
三、新建测试工程
1.打开eclipse,新建一个java工程->Package->Class
2.导入android.jar和uiautomator.jar包(路径:sdk\platforms\android-20\)
在libs文件中选择这两个jar包,点击右键出现Add to Build Path->点击即可
注:新建一个libs文件夹的目的是:将工程拷贝别人时,防止两个jar包的路径错误。
或者可以在工程名上点击右键->Properties->Java Build Path->Libraries
四、编写脚本
用例:唤醒设备->打开设置->点击显示->设置字体->超大->截图->回到home界面
1.在SDK的tools目录下找到uiautomatorviewer.bat文件
2.Android设备通过USB连接电脑
3.运行uiautomatorviewer.bat文件,点击Device ScreenShot进行查看详情
4.新建一个类继承UiAutomatorTestCase
5.编写脚本测试用例,方法名必须以test开头
附上脚本实例(比较简单):
package com.change.display; import java.io.IOException;
import android.os.RemoteException;
import com.android.uiautomator.core.UiDevice;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase; public class Display extends UiAutomatorTestCase{
public void test1 () throws UiObjectNotFoundException, RemoteException, IOException{
//Device wake up
UiDevice.getInstance().wakeUp();
//sleep 3s
sleep(3000);
//Open the settings
Runtime.getRuntime().exec("am start -n com.android.settings/.Settings");
//Click on display
try{
UiObject display = new UiObject(new UiSelector().text("显示"));
display.click();
sleep(3000);
}catch(Exception e){
e.printStackTrace();
}
//Select font
UiObject fs = new UiObject(new UiSelector().text("字体大小"));
fs.clickAndWaitForNewWindow();
//Change font
UiObject size = new UiObject(new UiSelector().text("超大"));
size.click();
//Screen shot
sleep(3000);
Runtime.getRuntime().exec("screencap -p /sdcard/test.png");
//Enter Home interface
sleep(3000);
getUiDevice().pressHome(); } }
注意:在代码有中文。首先需要改编码格式(UTF-8),否则会出乱码现象且不能运行。(右键点击工程名-propertise-Resource)
五、编译运行脚本
1.创建编译文件:android create uitest-project -n <name> -t <target> -p <path>
-n <name>: name是指要生成的jar包的名字,自己定义的
-t <target>: target指的是android-sdk的ID。通过android list 查看id。
-p <path>指的是将要进行编译的工程路径。例如E:\adt\workspace\AutoTest
注:id 所对应的API (sdk)尽量与导入的android.jar包和uiautomator.jar所在的SDK版本一致。
实例:android create uitest-project -n ChangeFont.jar -t 1 -p E:\adt\workspace\AutoTest
运行后会在AutoTest目录下生成如下图的3个文件。
注:这里生成build.xml文件可能会出现如下图问题..Error:Could not access ....
解决:可删除已存在的build.xml文件,再进行编译
2.编译:在AutoTest目录下cmd 中运行ant build。若编译成功,最后会显示BUILD SUCCESS且在AutoTest\bin目录下生成ChangeFont.jar文件;
反之显示BUILD FAILED。
本实例在此步骤出现的问题:显示Class not found:javac 1.8
分析:Ant版本太低,可能与jdk 1.8不匹配。
解决:下载较新版本的Ant,配置好环境变量,重新运行ant build。编译成功
3.将打包好的jar包push到android设备中
adb push E:\adt\workspaceAutoTest\bin\ChangeFont.jar data/local/tmp
注:运行脚本时设备会优先到data/local/tmp下寻找jar包
4.运行,命令详解《Android “Command” from work summary》
adb shell uiautomator runtest <jars> --nohup -c <packagename.classname>
实例:adb shell uiautomator runtest ChangeFont.jar --nohup -c com.change.display.Display
六、结果分析
先上图看下运行后显示的信息
解释:numtests 运行的所有用例数量 stream 信息流与错误流
id 运行框架 test 用例名字 class 用例完整类名
current 当前正在运行第几条 CODE 状态信息
1.运行前打印当前用例信息
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.change.display.Display:
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=test1
INSTRUMENTATION_STATUS: class="com".change.display.Display
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1
2.运行时打印运行信息
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=test1
INSTRUMENTATION_STATUS: class="com".change.display.Display
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 0
3.运行后打印结果信息
INSTRUMENTATION_STATUS: stream=
Test results for WatcherResultPrinter=.
Time: 13.147
OK (1 test)
INSTRUMENTATION_STATUS_CODE: -1
附:如果要终止测试该怎么实现呢?
@echo off
for /f "tokens=2 " %%a in ('adb shell ps -A^| findstr uiautomator') do (
adb shell kill %%a > nul
) pause
Android UiAutomator的更多相关文章
- Android uiautomator gradle build system
This will guide you through the steps to write your first uiautomator test using gradle as it build ...
- Android UiAutomator 自动化测试编译运行---新手2
1.首先打开eclipse创建java项目
- Appium python自动化测试系列之Android UIAutomator终极定位(七)
android uiautomator text定位 可能有人不知道为什么说android uiautomator是终极定位,而且android uiautomator和appium有什么关系呢?如果 ...
- Android UiAutomator - CTS Frame
使用UiAutomator进行UI自动化测试后,生成的测试结果并不是很美观.为了生成一份好看的测试结果(报告),本文将使用CTS框架,当然也可以自己编写一份测试报告框架(如:生成html,excel报 ...
- Android UiAutomator 快速调试
背景:在Eclipse中不能直接运行Uiautomator工程,所以每次编写一份用例都要进行手动输入命令,很烦.调试起来不仅繁琐还浪费时间.网上找到一份快速调试的代码UiAutomatorHelper ...
- python+Android+uiautomator的环境
Python+Android+uiautomator的环境搭建 Python 下载适合系统的版本并安装,安装时勾选把路径加入path 验证:windows下打开cmd输入python 出现以下界面说明 ...
- Appium+python自动化(十二)- Android UIAutomator终极定位凶“胸”器(七)(超详解)
简介 乍眼一看,小伙伴们觉得这部分其实在异性兄弟那里就做过介绍和分享了,其实不然,上次介绍和分享的大哥是uiautomatorviewer,是一款定位工具.今天介绍的是一个java库,提供执行自动化测 ...
- Android uiautomator实例使用
转载自:http://blog.csdn.net/huiguixian/article/details/22398193 Android测试工具中,Monkey Runner只要简单几个指令即可,但他 ...
- android uiautomator自己主动化測试
前提是自己电脑上配置好JDK,android和ant的环境 1.命令行下进入\Android-sdk\tools\文件夹下,执行命令: android list 查看相应android版本 ...
随机推荐
- netty的解码器和粘包拆包
Tcp是一个流的协议,一个完整的包可能会被Tcp拆成多个包进行发送,也可能把一个小的包封装成一个大的数据包发送,这就是所谓的粘包和拆包问题 粘包.拆包出现的原因: 在流传输中出现,UDP不会出现粘包, ...
- 解决vue.js在编写过程中出现空格不规范报错的情况
找到build文件夹下面的webpack.base.conf.js文件. 然后打开该文件,找到图下这段代码,把他注释掉. 注释掉之后,再进行子页面等编写的时候,空格不规范的情况下也不会再报错啦.因为这 ...
- MySQL - GROUP BY和HAVING的用法
按姓名分组查询 SELECT username, COUNT(username) AS '人数' FROM t_user GROUP BY username 只查询姓名相同的人 SELECT user ...
- react实现极简搜索框效果
hover.css内容 * { margin:; padding:; } li.hover { background: #ccc; color: darkgreen; } js内容 import Re ...
- java实现在线浏览PDF文档功能
实现在线浏览pdf文档功能(本代码适用于项目服务中固定的并且少量的pdf浏览,比如注册时的注册条款在线浏览等): //设置响应内容类型为PDF类型 response.setContentType(&q ...
- python初级实战-----主机在线情况监控web
背景 公司有600多台服务器,打算写一个小程序,能一眼看见哪些服务器不在线. 大体思路是: 1.把所有服务器ip存进数据库,ping命令判断服务器是否在线 2.更新数据库中ip的状态 3.简单的web ...
- 关于VXLAN的认识-----基础知识
一.什么是VXLAN 普通的VLAN数量只有4096个,无法满足大规模云计算IDC的需求,因为目前大部分IDC内部结构主要分为两种L2,L3. L2结构里面,所有的服务器都在一个大的局域网里面,TOR ...
- gradle记录
set-env.bat set "JAVA_HOME=G:\jdk" set "CLASSPATH=%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\ ...
- Netty实现简单UDP服务器
本文参考<Netty权威指南> 文件列表: ├── ChineseProverbClientHandler.java ├── ChineseProverbClient.java ├── C ...
- CF1095E Almost Regular Bracket Sequence
题目地址:CF1095E Almost Regular Bracket Sequence 真的是尬,Div.3都没AK,难受QWQ 就死在这道水题上(水题都切不了,我太菜了) 看了题解,发现题解有错, ...