文档章节

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

shaula
 shaula
发布于 2016/05/18 18:25
字数 926
阅读 481
收藏 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
23.4K
16
UI 自动化测试--iQuery

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

知平软件
2012/08/14
4K
0
「转载」换个角度看手工测试与自动化测试

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

kyzg2211
2016/10/20
206
0
网站测试自动化系统—系统应该有的功能

在前面几篇文章网站测试自动化系统—基于Selenium和VSTT、数据驱动测试、在测试代码中硬编码测试数据里,大概介绍了编写测试代码的过程。然而光把代码写完了是不够的,自动化测试不仅仅是将原...

技术小美
2017/11/12
0
0
Watij - 面向 Web 的自动化测试工具

简介: 随着应用程序渐渐脱离独立的宿主模型并进入到云中,可靠性和可预测性的测试变得更加重要。在云环境中,有许多 因素是我们无法控制的,因此编写健壮的、经过测试的代码比以往更加迫切。...

IBMdW
2011/11/10
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

InvalidKeyException: Illegal key size

Caused by: java.lang.RuntimeException: java.security.InvalidKeyException: Illegal key size 解决方案:去官方下载JCE无限制权限策略文件。 jdk 5: http://www.oracle.com/technetwork/j......

自由的开源
19分钟前
0
0
JAVA秒杀实现以及优化原理

秒杀与其他业务最大的区别在于:秒杀的瞬间, (1)系统的并发量会非常的大 (2)并发量大的同时,网络的流量也会瞬间变大。 关于(2),最常用的办法就是做页面静态化,也就是常说的前后端分...

小贱是个程序员
23分钟前
1
0
Spring Aop之Advisor解析

在上文Spring Aop之Target Source详解中,我们讲解了Spring是如何通过封装Target Source来达到对最终获取的目标bean进行封装的目的。其中我们讲解到,Spring Aop对目标bean进行代理是通过Ann...

爱宝贝丶
26分钟前
0
0
Java高级工程师面试阿里,阿里云,天猫,菜鸟,涉及到的知识点

前言: 分享 Java高级工程师面试阿里,阿里云,天猫,菜鸟,涉及到的知识点,文章有点长,但比较全面,阅读时间15分钟左右,干货满满。 一、HashMap的那些事 1.1、HashMap的实现原理 1.1.1、...

Java大蜗牛
50分钟前
2
0
nginx模块学习五 expires 浏览器缓存

缓存原理 语法 Syntax: expires [modified] time;expires epoch | max | off;Default: expires off;Context: http,server,location,if in location 例/etc/nginx/conf.d/default.con......

Romanceling
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部