文档章节

简单的自动化测试小程序(一)

shaula
 shaula
发布于 2016/05/18 18:25
字数 926
阅读 489
收藏 10

需求:

                在休眠时唤醒设备,解锁。然后执行拍照、拨打电话、下载数据,执行一个应用(浮点运算、gpu等),在执行20分钟后将其关闭,然后进入休眠。

 

实现:

                因为模拟的是用户操作,所以并不是在自己的应用中实现如上需求描述,而是调用当前系统的现有应用,模拟用户交互。所以就在Activity的onCreate中,直接开启了一个服务,由服务来进行控制,随后将Activity finish()掉。

                服务开始之后就进行状态判定,如果是锁屏的情况下,进行解锁。inKeyguardRestrictedInputMode就可以实现状态判定,如果是在锁屏的情况下,我就发送一个keyevent 26 \\power   间隔1s之后  keyevent 82 \\unlock.              

                随后开启使用startActivity开启相机、拨号、浏览器(如果传递的网址是下载的文件,就可以直接走浏览器的下载了)等。这里注意intent要加上Intent.FLAG_ACTIVITY_NEW_TASK 。

                最后设置了一下定时器,在一定时间之后再次启动这个Activity,注意我这里说的是“再次启动Activity"而不是service,这里是根据setRepeating中的参数决定的。其实也可以启动服务。

 

知识点:

               1,event? getevent/sendevent? input keyevent?  

                不打算分析事件机制、源码解析。第一步就是拿着自己的手机adb shell getevent,能看到如/dev/input/event5: 0003 0002 000003bc类似的在滚动输出,点两下触屏,和按键会发现event后面的都在发生变化,但是有一定规律,譬如在滑动触屏的时候,始终是输出的是event1(你的可能是别的),如此一来我们可以确定的是触屏事件是event1,那么是这样么,我们再次输入adb shell getevent -p来查看,找到even1的描述

                        add device 8: /dev/input/event1

                        name:     "goodix-ts"                 

我的这个name还是比较直白的 touch screen,所以还真是这样。同时也可以查看其他的event都对应的是什么设备,譬如我一直滚动的event5是accelerometer。

                至此,我们再来分析一下后面的数据,以触屏事件为例:                        

               adb shell getevent /dev/input/event1  (获取当前触屏事件)

得到                 0001 014a 00000001
                        0003 0035 00000173
                        0003 0036 000003d5
                        0003 0030 0000003b

                这三列分别代表type、code、value,这列数据中就包含你触摸位置的坐标,0x35 是x轴、0x36是y轴。转化为10进制就变成了371,949。(当前我的0x35 max、 0x36 max值与我当前实际分辨率相等,所以没有比例转换的问题)

                使用sendevent可以模拟用户完成一次点击事件。例如下面就是一次完整的点击返回。

               shell@msm8916_32:/ $ sendevent /dev/input/event1 1 158 1
               sendevent /dev/input/event1 1 158 1
               shell@msm8916_32:/ $ sendevent /dev/input/event1 0 0 0
               sendevent /dev/input/event1 0 0 0
               shell@msm8916_32:/ $ sendevent /dev/input/event1 1 158 0
               sendevent /dev/input/event1 1 158 0
               shell@msm8916_32:/ $ sendevent /dev/input/event1 0 0 0
               sendevent /dev/input/event1 0 0 0

                上面的输入太繁琐,好在还有简化点的。

                input tap  200 300     //点击200、300坐标

                input swipe 200 300 1200 300 //由200、300向 1200、300滑动

                input keyevent 3   //home

                input keyevent 4   //back

                不同厂商的keyevent实际上可能有所不同,还请各位同学去framework/native/include/input/KeycodeLables.h中去查看。

                至此,我们就能使用在adb shell中做灭屏,唤醒,点击,滑屏...一系列动作。

                                                                                                            ----to be continued

 

© 著作权归作者所有

共有 人打赏支持
shaula
粉丝 0
博文 4
码字总数 2755
作品 0
朝阳
程序员
私信 提问
开发者眼中最好的 22 款 GUI 测试工具

1.Abbot - Java GUI 测试框架 Abbot是一个基于GUI的简单的Java测试框架,它能够帮助开发者测试Java用户界面。 它提供事件自动生成和验证Java GUI组件,使您能够轻松地启动,探索和控制应用程...

oschina
2014/06/06
27.9K
16
UI 自动化测试--iQuery

在程序界面(UI)自动化测试中,最烦人的就是抓取控件的过程了,要么是程序员忘记在代码里给控件添加自动化测试用的标签;要么就是界面布局经常 变,如果是基于坐标位置抓取的话,一点小变化...

知平软件
2012/08/14
4K
0
【转载】自动化测试过程

提到测试,一般都认为是使用测试用例进行测试,而事实上,这只是完整测试过程中的一个步骤,测试活动其实是一个过程,如下图所示,是一系列的步骤,通过这些步骤实现测试活动,导致测试的执行...

chieei
2016/09/01
124
0
【转载】回归测试:人工测试还是自动化?

在程序发展的每一个阶段所产生的问题是,每次重复的的回归测试所需时间太长,而且往往被证实功能并无明显变化。因此,缺陷存在的可能性是相当低的。自然的,其产生的结果就是,我们得出一个想...

aabbc
2016/09/09
165
0
「转载」换个角度看手工测试与自动化测试

「转载」换个角度看手工测试与自动化测试 之前,自己也开发过自动化的架构,也有用过testbird这样的自动化测试服务,并做过长期的手工测试,对两者有深刻的思考。简单的总结,自动化完成不了...

kyzg2211
2016/10/20
242
0

没有更多内容

加载失败,请刷新页面

加载更多

编程价值观、原则、模式

读自《实现模式》 模式,即是针对特定问题的通用解决方案。 每个模式都承载这一点点理论,但实际编程中存在着一些更加深远的影响力,远不是孤立的模式所能概括的。 价值观是编程过程的统一支...

遥借东风
2分钟前
0
0
php分割二级域名做跳转处理方法

使用php中的全局变量 $_SERVER['HTTP_HOST'] ,可以获得用户当前访问的域名字符串,在这里面查询自己定义的各个子域名字符串,然后使用header函数重定向到不同的页面 代码如下 if( strpos($...

Mr_Azaz
4分钟前
0
0
容器之Zookeeper的使用

我们使用zookeeper时,都是在Linux上安装zookeeper,之后启动时要加入配置文件。 使用docker之后,我们可以直接使用镜像运行容器,镜像可以从docker.hub上下载,地址是https://hub.docker.co...

克虏伯
昨天
1
0
esxi 更换ssl证书

概述 就是想换一个证书而已,你可以通过下面的途径去申请一个泛解析域名的证书之后再esxi上安装上 使用阿里云域名api申请Let’s Encrypt泛域名免费ssl证书 申请完成证书之后进行下一步 操作 ...

bboysoulcn
昨天
1
0
PLC编程入门:梯形图

梯形图(LAD)是PLC编程的最佳可视化语言,它看起来非常类似于继电器电路图,因此如果 你对继电器控制和电子电路有所了解的话,那么学起来会非常容易! 在这个教程中,我们将学习关于使用梯形...

汇智网教程
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部