CN102999419B - 一种Android测试事件记录回放方法及装置 - Google Patents

一种Android测试事件记录回放方法及装置 Download PDF

Info

Publication number
CN102999419B
CN102999419B CN201110268861.4A CN201110268861A CN102999419B CN 102999419 B CN102999419 B CN 102999419B CN 201110268861 A CN201110268861 A CN 201110268861A CN 102999419 B CN102999419 B CN 102999419B
Authority
CN
China
Prior art keywords
test
event
random
script
flow
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201110268861.4A
Other languages
English (en)
Other versions
CN102999419A (zh
Inventor
冉放
董海峰
林荣文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201110268861.4A priority Critical patent/CN102999419B/zh
Publication of CN102999419A publication Critical patent/CN102999419A/zh
Application granted granted Critical
Publication of CN102999419B publication Critical patent/CN102999419B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本申请公开了一种Android测试事件记录回放方法及装置。测试事件记录方法包括:实时生成随机测试事件流并执行;在执行随机测试事件流的过程中,记录每个测试事件执行时的系统环境信息;将随机测试事件流中的测试事件从随机模式转换为脚本模式;将脚本模式的测试事件写入测试记录文件,并在所述测试记录文件中记录每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间。测试事件回放方法包括:根据回放时间长度与总执行时间的比例,在测试记录文件的测试事件流中定位回放起始事件,并将回放起始事件之前的测试事件滤除;根据剩余的测试事件以及相应的系统环境信息,生成测试脚本;执行所生成的测试脚本,实现测试事件回放。

Description

一种Android测试事件记录回放方法及装置
技术领域
本申请涉及测试技术领域,特别是涉及一种Android测试事件记录回放方法及装置。
背景技术
安卓(Android)是一种以Linux为基础的开放源码操作系统,主要使用于智能手机、平板电脑等便携设备。该系统采用Java语言开发,包括操作系统、中间件、用户界面和应用软件等组成部分。随着Android系统的不断发展,各大硬件厂商也在不断推出各种基于Android系统的产品,目前,基于Android系统产品已经在市场上占有重要地位。
monkey随机测试是Android平台自动化测试的一种手段,其利用monkey程序模拟用户的按键输入、轨迹球输入、触摸屏输入等操作,并且通过伪随机的形式组织上述事件对运行在设备上的系统进行压力测试,从而检测系统可能存在的bug。
由于Androidmonkey测试的时间周期长,测试日志可读性差等事实,造成开发人员仅通过monkey测试的日志信息很难去定位一个bug的具体产生原因,从而无法有效地进行相关的修复操作。
发明内容
为解决上述技术问题,本申请实施例提供一种Android测试事件记录回放方法及装置,以实现对Androidmonkey测试事件的记录与回放,技术方案如下:
本申请实施例提供一种Android测试事件记录方法,包括:
实时生成随机测试事件流并执行;
在执行随机测试事件流的过程中,记录每个测试事件执行时的系统环境信息;
将随机测试事件流中的测试事件从随机模式转换为脚本模式;
将脚本模式的测试事件写入测试记录文件,并在所述测试记录文件中记录每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间。
在本申请方案的一种实施方式中,所述将随机测试事件流中的测试事件从随机模式转换为脚本模式,包括:
从随机模式测试事件指令中,提取事件状态参数;
将随机模式测试事件类型转换为对应的脚本模式测试事件类型,根据所提取的事件状态参数,生成脚本模式测试事件指令。
在本申请方案的一种实施方式中,所述将随机测试事件流中的测试事件从随机模式转换为脚本模式,包括:
在随机测试事件流执行完成后,统一将随机测试事件流中的测试事件从随机模式转换为脚本模式;
在执行随机测试事件流的过程中,将随机测试事件流中的测试事件从随机模式转换为脚本模式。
在本申请方案的一种实施方式中,所述在执行随机测试事件流的过程中,将随机测试事件流中的测试事件从随机模式转换为脚本模式,具体实现为:
在monkey源代码的测试事件抽象类中添加脚本模式转换方法,
根据测试事件的类型,在各个测试事件子类中,重写该脚本模式转换方法。
在本申请方案的一种实施方式中,在各个测试事件子类中重写脚本模式转换方法后,还包括:
在测试事件子类中为脚本模式转换方法添加标识,所述标识用于限定该方法仅在随机测试模式下触发。
本申请实施例还提供一种Android测试事件回放方法,包括:
获得测试记录文件,所述测试记录文件中,包括以脚本模式写入的随机测试事件流,还包括随机测试事件流中每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间;
接收测试用户输入的回放时间长度参数,根据回放时间长度与所述总执行时间的比例,在测试记录文件的测试事件流中定位回放起始事件,并将回放起始事件之前的测试事件滤除;
根据剩余的测试事件以及相应的系统环境信息,生成测试脚本;
执行所生成的测试脚本,实现测试事件回放。
在本申请方案的一种实施方式中,在生成测试脚本之前,还包括:
接收测试用户输入的应用包限定参数,将不符合所述限定参数的测试事件滤除。
本申请实施例还提供一种Android测试事件记录装置,包括:
随机测试事件流生成单元,用于实时生成随机测试事件流并执行;
系统环境信息记录单元,用于在执行随机测试事件流的过程中,记录每个测试事件执行时的系统环境信息;
测试事件模式转换单元,用于将随机测试事件流中的测试事件从随机模式转换为脚本模式;
测试记录生成单元,用于将脚本模式的测试事件写入测试记录文件,并在所述测试记录文件中记录每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间。
在本申请方案的一种实施方式中,所述测试事件模式转换单元,包括:
事件状态参数提取子单元,用于从随机模式测试事件指令中,提取事件状态参数;
事件指令生成子单元,用于将随机模式测试事件类型转换为对应的脚本模式测试事件类型,根据所提取的事件状态参数,生成脚本模式测试事件指令。
在本申请方案的一种实施方式中,所述测试事件模式转换单元,具体配置为:
用于在随机测试事件流执行完成后,统一将随机测试事件流中的测试事件从随机模式转换为脚本模式;
用于在执行随机测试事件流的过程中,将随机测试事件流中的测试事件从随机模式转换为脚本模式。
本申请实施例还提供一种Android测试事件回放装置,包括:
测试记录文件获得单元,用于获得测试记录脚本文件测试记录文件,所述测试记录脚本文件测试记录文件中,包括以脚本模式写入的随机测试事件流,还包括随机测试事件流中每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间;
回放时间设置单元,用于接收测试用户输入的回放时间长度参数,根据回放时间长度与所述总执行时间的比例,在测试记录文件的测试事件流中定位回放起始事件,并将回放起始事件之前的测试事件滤除;
测试脚本生成单元,用于根据剩余的测试事件以及相应的系统环境信息,生成测试脚本;
测试脚本执行单元,用于执行所生成的测试脚本,实现测试事件回放。
在本申请方案的一种实施方式中,该装置还包括:
回放事件设置单元,用于接收测试用户输入的应用包限定参数,将不符合所述限定参数的测试事件滤除。
本申请实施例还提供一种Android测试系统,该系统包括如权利要求8至10任一项所述的测试事件记录装置以及如权利要求11至12任一项所述的测试事件回放装置。
本申请实施例所提供的技术方案,通过将Androidmonkey随机测试事件流中的测试事件从随机模式转换为脚本模式的方式,实现对测试事件的记录;在回放过程中,利用以脚本模式记录的测试记录文件,根据用户所输入的回放时间长度与所述随机测试总执行时间的比例定位回放起始事件,然后生成新的测试脚本,通过执行新的测试脚本实现Androidmonkey随机测试事件的回放。应用本申请实施例所提供的方案,为Androidmonkey随机测试提供了录制及回放功能,使得开发人员能够更有效地定位bug的具体产生原因,提高测试效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为Android体系结构示意图。
图2为本申请实施例Android测试事件记录方法的流程图;
图3为本申请实施例Android测试事件回放方法的流程图;
图4为本申请实施例Android测试事件记录装置的结构示意图;
图5为本申请实施例Android测试事件回放装置的结构示意图;
图6为本申请实施例Android测试事件回放装置的另一种结构示意图;
图7为本申请实施例Android测试系统的结构示意图。
具体实施方式
首先Androidmonkey测试进行简单介绍。图1所示为Android的体系结构示意图,Android的体系结构分为驱动层、Native层、Framework层和应用层。Androidmonkey测试主要是从framework层进行测试事件注入,对应用程序进行测试,其中主要的涉及到的操作包括两大部分:事件发送与Activity切换。由于现有技术无法直接获取framework层的事件信息,因此无法实现Androidmonkey测试事件的记录。
为解决上述技术问题,本申请实施例提供一种Android测试事件记录方法,包括以下步骤:
实时生成随机测试事件流并执行;
在执行随机测试事件流的过程中,记录每个测试事件执行时的系统环境信息;
将随机测试事件流中的测试事件从随机模式转换为脚本模式;
将脚本模式的测试事件写入测试记录文件,并在所述测试记录文件中记录每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间。
为了使本领域技术人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本申请保护的范围。
Androidmonkey测试提供了两种实现方式,分别是随机(random)模式和脚本(script)模式。
其中,random模式是指,系统根据最初设定好的概率,随机地产生测试事件,实时生成随机测试事件流并执行,并将其注入到framework层的windowmanager当中,从而实现事件响应。monkeyrandom模式中提供的随机事件类型包括以下四类:
KeyEvent,模拟用户在设备上的按键操作;
MotionEvent,模拟用户在设备上的触摸屏点击操作和轨迹球操作;
FlipEvent,模拟用户在设备上的滑动操作;
ActivityEvent,模拟设备内部的触发操作,与用户操作无关。
script模式则是monkey事件的另外一种表现方式,系统可以通过指定脚本的方式来运行monkey事件流,monkeyscript模式中提供的测试事件类型包括以下五类:
DispatchKey(statusinfo),对应于random模式下的KeyEvent;
DispatchPointer(statusinfo)和DispatchTrackball(statusinfo),对应于random模式下的MotionEvent;
DispatchFlip(statusinfo),对应于random模式下的FlipEvent;
LaunchActivity(statusinfo),对应于random模式下的ActivityEvent;
可以看出,random模式的测试事件类型和script模式的测试事件类型是存在对应关系的,在本申请实施例所提供的技术方案中,利用这种对应关系,将随机测试事件流中的测试事件从random模式转换为script模式,从而保存事件信息,进而可以利用所保存的script模式的事件信息,实现测试事件的回放。
在将测试事件从random模式转换为script模式的过程中,需要获得测试事件相关状态参数,包括事件的触发时刻、响应时刻、动作类型、重复次数等等,对于不同类型的测试事件,具体的涉及的状态参数也不同。这部分信息可以在随机测试事件生成后,利用Android系统提供的get方法获得。
由于随机测试事件流的测试事件是在测试过程中实时逐一生成并执行,因此在实际应用中,可以在测试事件执行过程中,利用get方法获得每个测试事件的状态参数并记录,然后在整个随机测试事件流执行完成后,统一将随机测试事件流中的测试事件从随机模式转换为脚本模式;也可以在执行随机测试事件流的过程中,实时获得当前测试事件的状态参数并将测试事件从随机模式转换为脚本模式。
此外,为了实现测试事件的回放,在测试过程中还需要记录以下两类信息:
a)随机测试事件流的总执行时间。
在实际应用中,可以分别记录第一个测试事件开始执行的时刻、以及最后一个测试事件的结束时刻,这两个事件点的差值即可以作为整个测试事件流的总执行时间。
b)测试事件执行时的系统环境信息。
主要是指测试事件执行时的运行在系统最上层的程序组件(topActivity),即当前展现给用户的的程序组件。这部分信息可以利用Android系统提供的IActivityManager接口获得。
整个随机测试事件流执行完毕后,可以将已经转换为脚本模式的测试事件写入一测试记录文件,同时在这个文件中记录下每个测试事件的执行时的系统环境信息和整个随机测试事件流的总执行时间。至此,已经完成了一个完整的monkey随机测试事件的记录过程。
下面结合一个具体的实例,对本申请所提供的Android测试事件记录方法进行说明。图2所示为本申请实施例Android测试事件记录方法的流程图,包括以下步骤:
S101,实时生成随机测试事件流并执行;
在Android系统中,测试用户可以预先设定需要执行的测试事件总数以及需要执行的各类测试事件的概率,系统将按照设定,实时地产生随机测试事件并执行,其中,产生的所有随机测试事件构成一个随机测试事件流。
S102,在执行随机测试事件流的过程中,记录每个测试事件执行时的系统环境信息;
IActivityManager是Android中的activitymanagerservice提供的调用接口,Activity在系统中以堆栈的形式进行组织。当系统每次执行一个测试事件时,可以通过IActivityManager接口的getTasks方法,获得当前运行在系统最上层的程序组件(topActivity),即当前展现给用户的的程序组件。
在实际的测试过程中,如果运行某个测试事件时,可以对应该测试事件,将topActivity信息以注释的形式写入测试记录文件,写入形式可以为:
#inActivity(packageName,className)
其中packageName表示组件包的名称,className表示组件所属类别的名称。
S103,将随机测试事件流中的测试事件从随机模式转换为脚本模式;
本实施例中,采用在测试过程中实时将测试事件从随机模式转换为脚本模式的方法,具体实施方案如下:
在Androidmonkey的源代码中,提供一个MonkeyEvent的抽象类。在本实施例里中,通过MonkeyEvent.java中添加脚本模式转换(dumpScript)方法,以便各个事件子类可以重写(overwrite)该方法。其中dumpScript方法如下:
可以看到,dumpScript方法均是publicvoid类型,各个事件子类需要重写的方法并不实现具体的业务逻辑,只是提供方法供子类重写以便实现多态的机制。
在MonkeyEvent的各个事件子类中重写dumpScript方法时,还可以设定一个全局的标识,使得此方法只在random模式下进行。random模式下,当系统调用注入事件(injectEvent)方法时,将会获取当前事件对象,并通过get方法提取该事件对象的各个状态参数,并且将随机模式测试事件类型转换为对应的脚本模式测试事件类型,根据所提取的事件状态参数,生成脚本模式测试事件指令。将分别介绍如何重写各个子类事件的dumpScript方法:
a)KeyEvent
打开MonkeyKeyEvent.java,在其中增加dumpScript方法:
可以看到,对于Monkey中的KeyEvent事件,其状态参数包括:
downTime:事件触发时间、eventTime:事件响应时间、action:事件动作类型、keyCode:按键编码、repeatCount:重复次数、metaState:元状态、deviceId:对应的设备标识、scanCode:检测代码。通过这些状态参数,可以生成对应的script模式下的DispatchKey指令。
B)MotionEvent
打开MonkeyMotionEvent.java,在其中增加dumpScript方法:
可以看到,对于Monkey中的MotionEvent事件,其状态参数包括:
downTime:事件触发时间、eventTime:事件响应时间、action:事件动作类型、X:相对屏幕的x轴坐标、Y:相对屏幕的y轴坐标、pressure:触摸压力、size:触摸面积、xPrecision:X轴精确度、yPrecision:Y轴精确度、metaState:元状态、deviceId:对应的deviceID、edgeFlag:边界标志。通过这些状态参数,可以生成对应的script模式下的DispatchPointer指令或DispatchTrackball指令。
c)FilpEvent
打开MonkeyFlipEvent.java,在其中增加dumpScript方法:
对于Monkey中的FlipEvent事件,只记录trueorfalse等布尔值,该值作为FilpEvent事件的状态参数,根据这些状态参数,可以生成对应的script模式下的DispatchFlip指令。
d)ActivityEvent
打开MonkeyActivityEvent.java,在其中增加dumpScript方法:
可以看到,对于Monkey中的ActivityEvent事件,其状态参数包括:
Class:Activity对应的类别、Package:Activity对应的包名称。通过这些状态参数,可以生成对应的script模式下的LaunchActivity指令。
S104,将脚本模式的测试事件写入测试记录文件,并在所述测试记录文件中记录每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间。
在步骤S103中介绍的各个事件子类重写dumpScript的方法,在过程上都是记录各个事件的状态信息,然后根据状态信息转换为一条monkey脚本指令。将这些脚本指令写入到脚本文件中,同时相应写入每个测试事件执行时的系统环境信息和随机测试事件流的总执行时间,就可以生成测试记录文件。脚本文件的内容示意如下:
#1310524827450
startdata>>
LaunchActivity(packageName,className)
DispatchKey(0,0,0,22,0,0,0,0)
DispatchKey(0,0,1,22,0,0,0,0)
DispatchTrackball(-1,92359252,2,1.0,2.0,1.0,1.0,0,1.0,1.0,0,0)
DispatchTrackball(-1,92359263,2,-4.0,-1.0,1.0,1.0,0,1.0,1.0,0,0)
DispatchTrackball(-1,92359341,2,3.0,1.0,1.0,1.0,0,1.0,1.0,0,0)
DispatchTrackball(-1,92359372,2,2.0,0.0,1.0,1.0,0,1.0,1.0,0,0)
DispatchTrackball(-1,92359431,2,2.0,3.0,1.0,1.0,0,1.0,1.0,0,0)
DispatchTrackball(-1,92359592,2,-1.0,-3.0,1.0,1.0,0,1.0,1.0,0,0)
DispatchTrackball(-1,92359737,2,-5.0,-3.0,1.0,1.0,0,1.0,1.0,0,0)
DispatchTrackball(-1,92359748,2,-4.0,1.0,1.0,1.0,0,1.0,1.0,0,0)
DispatchTrackball(-1,92359847,2,1.0,4.0,1.0,1.0,0,1.0,1.0,0,0)
DispatchTrackball(-1,92359858,2,2.0,3.0,1.0,1.0,0,1.0,1.0,0,0)
DispatchTrackball(-1,92359881,2,1.0,1.0,1.0,1.0,0,1.0,1.0,0,0)
DispatchTrackball(-1,92359960,2,2.0,3.0,1.0,1.0,0,1.0,1.0,0,0)
在本申请的一种实施例方案中,脚本文件准备生成时,可以向脚本文件中写入当前时间作为脚本开始记录的时间,(如上面代码所示的时间戳“#1310524827450”),当脚本文件生成结束时(包括正常结束或者bug导致的非正常结束),向脚本文件中再次写入当前时间作为脚本结束时间。由于记录事件行为与随机事件执行行为是同步的,因此这两个时间点差值就可以作为整个随机测试事件流总执行时间。
下面将介绍如何利用测试记录文件实现测试事件的回放。本申请实施例提供的一种Android测试事件回放方法如下:
获得测试记录文件,所述测试记录文件中,包括以脚本模式写入的随机测试事件流,还包括随机测试事件流中每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间;
接收测试用户输入的回放时间长度参数,根据回放时间长度与所述总执行时间的比例,在测试记录文件的测试事件流中定位回放起始事件,并将回放起始事件之前的测试事件滤除;
根据剩余的测试事件以及相应的系统环境信息,生成测试脚本;
执行所生成的测试脚本,实现测试事件回放。
下面结合一个具体的实例,对本申请所提供的Android测试事件回放方法进行说明。图3所示为本申请实施例Android测试事件回放方法的流程图,包括以下步骤:
S201,获得测试记录文件;
应用前面所介绍的测试事件记录方法,在测试记录文件中,包括以脚本模式写入的随机测试事件流,还包括随机测试事件流中每个测试事件的执行时的系统环境信息和随机测试事件流的总执行时间;在本实施例中,根据以上信息,就可以实现对随机测试事件流的中途回放。
S202,在测试记录文件的测试事件流中定位回放起始事件,并将回放起始事件之前的测试事件滤除;
在本步骤中,可以利用Android系统的MonkeyHandler脚本对测试记录文件中的monkeyscript进行解析,给定不同的脚本参数以实现中途回放或特定应用的回放。
MonkeyHandler脚本提供连两个可选参数,其中参数-t为回放时间长度参数,用来表示希望从测试结束前的多少时间(单位为秒)起,开始进行回放。
测试用户可以利用-t参数输入所希望的回退时间长度,Handler脚本首先打开测试记录文件文件,利用所记录的结束时间与开始时间进行相减,得到随机测试的总持续时间。
通过实际测试,发现每个测试事件的持续时间是基本相同的,因此可以通过计算测试用户输入的回放时间长度与随机测试的总持续时间的比例,粗略估算出整个事件流的回放位置。
在实际应用中,可以先步将测试记录文件的每一行脚本都读取到一个列表当中,根据测试用户输入的回放时间长度与随机测试的总持续时间的比例,可以计算出回放位置大概位于整个测试记录文件的第几行,找到相应的脚本指令作为回放起始事件。
由于回放仅要求对测试结束前特定时间段内的事件进行回放,因此在定位回放起始事件之后,将该事件之前的所有脚本指令滤除。
S203,根据剩余的测试事件以及相应的系统环境信息,生成测试脚本;
针对于回放起始事件,首先找到其对应的系统环境信息:
#inActivity(packageName,className)。
将该注释修改为LaunchActivity(packageName,className)的形式以模拟回放的初始系统环境,最后将回放起始事件以及之后事件脚本写入,形成一个新的测试脚本。
S204,执行所生成的测试脚本,实现测试事件回放。
以上提供的方法,实现了特定时间点的测试事件中途回放,在本申请的另一个实施例中,还可进一步实现对特定系统环境下事件的中途回放。
除了-t之外,MonkeyHandler脚本还提供另一个可选参数-p,即应用包限定参数,用来指定某个特定应用的包名。在步骤S203生成新的测试脚本之前,测试用户可以利用-p参数输入所希望的回放的特定应用包名,形如,com.xxx.yyy。
根据测试记录文件的脚本列表,对这个列表进行逐行扫描,利用#inActivity(packageName,className)记录的包名信息,对脚本指令进行过滤,仅保留符合参数限定的事件,将其他事件滤除。
在步骤S203,利用-t以及-p参数共同的滤除结果生成新的测试脚本,就可以在特定时间点的测试事件中途回放的基础上,进一步实现对特定系统环境下事件的中途回放,以帮助测试人员更有效地定位系统bug。
可以理解的是,在以上实施例中所提供的程序源代码并不构成对本申请方案的限定,例如,本领域技术人员可以在不脱离本申请原理的前提下,根据实际需求对方案进行改进。例如在获取测试事件状态参数时,对所获取的状态参数类型根据实际需要进行取舍,或者在生成测试记录文件时,采用其他的数据格式,等等,这些都不影响本申请方案的实现。
相应于上面的方法实施例,本申请实施例还提供一种Android测试事件记录装置和回放装置。
参见图4所示,本申请实施例所提供测试事件记录装置包括:
随机测试事件流生成单元310,用于实时生成随机测试事件流并执行;
系统环境信息记录单元320,用于在执行随机测试事件流的过程中,记录每个测试事件执行时的系统环境信息;
测试事件模式转换单元330,用于将随机测试事件流中的测试事件从随机模式转换为脚本模式;
测试记录生成单元340,用于将脚本模式的测试事件写入测试记录文件,并在所述测试记录文件中记录每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间。
Androidmonkey测试提供了两种实现方式,分别是随机(random)模式和脚本(script)模式。
其中,random模式是指,系统根据最初设定好的概率,随机地产生测试事件,实时生成随机测试事件流并执行,并将其注入到framework层的windowmanager当中,从而实现事件响应。
script模式则是monkey事件的另外一种表现方式,系统可以通过指定脚本的方式来运行monkey事件流。
random模式的测试事件类型和script模式的测试事件类型是存在对应关系的,在本申请实施例所提供的技术方案中,利用这种对应关系,将随机测试事件流中的测试事件从random模式转换为script模式,从而保存事件信息,进而可以利用所保存的script模式的事件信息,实现测试事件的回放。
在将测试事件从random模式转换为script模式的过程中,需要获得测试事件相关状态参数,包括事件的触发时刻、响应时刻、动作类型、重复次数等等,对于不同类型的测试事件,具体的涉及的状态参数也不同。这部分信息可以在随机测试事件生成后,利用Android系统提供的get方法获得。
由于随机测试事件流的测试事件是在测试过程中实时逐一生成并执行,因此在实际应用中,可以在测试事件执行过程中,利用get方法获得每个测试事件的状态参数并记录,然后在整个随机测试事件流执行完成后,统一将随机测试事件流中的测试事件从随机模式转换为脚本模式;也可以在执行随机测试事件流的过程中,实时获得当前测试事件的状态参数并将测试事件从随机模式转换为脚本模式。
相应地,在本申请的一个实施例中,在本申请的一个实施例中,所述测试事件模式转换单元330,可以包括:
事件状态参数提取子单元,用于从随机模式测试事件指令中,提取事件状态参数;
事件指令生成子单元,用于将随机模式测试事件类型转换为对应的脚本模式测试事件类型,根据所提取的事件状态参数,生成脚本模式测试事件指令。
进一步地,所述测试事件模式转换单元330,可以具体配置为:
用于在随机测试事件流执行完成后,统一将随机测试事件流中的测试事件从随机模式转换为脚本模式;
用于在执行随机测试事件流的过程中,将随机测试事件流中的测试事件从随机模式转换为脚本模式。
为了实现测试事件的回放,在测试过程中还需要记录以下两类信息:
a)随机测试事件流的总执行时间。
在实际应用中,可以分别记录第一个测试事件开始执行的时刻、以及最后一个测试事件的结束时刻,这两个事件点的差值即可以作为整个测试事件流的总执行时间。
b)测试事件执行时的系统环境信息。
主要是指测试事件执行时的运行在系统最上层的程序组件(topActivity),即当前展现给用户的的程序组件。这部分信息可以利用Android系统提供的IActivityManager接口获得。这部分功能由系统环境信息记录单元320实现。
整个随机测试事件流执行完毕后,测试记录生成单元340将已经转换为脚本模式的测试事件写入一测试记录文件,同时在这个文件中记录下每个测试事件的执行时的系统环境信息和整个随机测试事件流的总执行时间。完成了一个完整的monkey随机测试事件的记录过程。
参见图5所示,本申请实施例所提供的Android测试事件回放装置包括:
测试记录文件获得单元410,用于获得测试记录脚本文件测试记录文件,
在测试事件记录装置所得到的测试记录文件中,包括以脚本模式写入的随机测试事件流,还包括随机测试事件流中每个测试事件的执行时的系统环境信息和随机测试事件流的总执行时间;本实施例所提供的测试事件回放装置,根据以上信息,就可以实现对随机测试事件流的中途回放。
回放时间设置单元420,用于接收测试用户输入的回放时间长度参数,根据回放时间长度与所述总执行时间的比例,在测试记录文件的测试事件流中定位回放起始事件,并将回放起始事件之前的测试事件滤除;
MonkeyHandler脚本提供连两个可选参数,其中参数-t为回放时间长度参数,用来表示希望从测试结束前的多少时间(单位为秒)起,开始进行回放。
测试用户可以利用-t参数输入所希望的回退时间长度,Handler脚本首先打开测试记录文件文件,利用所记录的结束时间与开始时间进行相减,得到随机测试的总持续时间。
通过实际测试,发现每个测试事件的持续时间是基本相同的,因此可以通过计算测试用户输入的回放时间长度与随机测试的总持续时间的比例,粗略估算出整个事件流的回放位置。
在实际应用中,可以先步将测试记录文件的每一行脚本都读取到一个列表当中,根据测试用户输入的回放时间长度与随机测试的总持续时间的比例,可以计算出回放位置大概位于整个测试记录文件的第几行,找到相应的脚本指令作为回放起始事件。
由于回放仅要求对测试结束前特定时间段内的事件进行回放,因此在定位回放起始事件之后,将该事件之前的所有脚本指令滤除。
测试脚本生成单元430,用于根据剩余的测试事件以及相应的系统环境信息,生成测试脚本;
针对于回放起始事件,首先找到其对应的系统环境信息:
#inActivity(packageName,className)。
将该注释修改为LaunchActivity(packageName,className)的形式以模拟回放的初始系统环境,最后将回放起始事件以及之后事件脚本写入,形成一个新的测试脚本。
测试脚本执行单元440,用于执行所生成的测试脚本,实现测试事件回放。
参见图6所示,在本申请的一个实施例中,Android测试事件回放装置还可以包括:
回放事件设置单元450,用于接收测试用户输入的应用包限定参数,将不符合所述限定参数的测试事件滤除。
除了-t之外,MonkeyHandler脚本还提供另一个可选参数-p,即应用包限定参数,用来指定某个特定应用的包名。在测试脚本生成单元430生成新的测试脚本之前,测试用户可以利用-p参数输入所希望的回放的特定应用包名,形如,com.xxx.yyy。
根据测试记录文件的脚本列表,对这个列表进行逐行扫描,利用#inActivity(packageName,className)记录的包名信息,对脚本指令进行过滤,仅保留符合参数限定的事件,将其他事件滤除。
测试脚本生成单元430利用-t以及-p参数共同的滤除结果生成新的测试脚本交给测试脚本执行单元440执行,就可以在特定时间点的测试事件中途回放的基础上,进一步实现对特定系统环境下事件的中途回放,以帮助测试人员更有效地定位系统bug。
参见图7所示,本申请实施例还提供一种Android测试系统,包括:测试事件记录装置510和测试事件回放装置520。其中所述测试事件记录装置和测试事件回放装置均与前面实施例所述相同,这里不再重复说明。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本申请的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

Claims (11)

1.一种Android测试事件记录方法,其特征在于,包括:
实时生成随机测试事件流并执行;
在执行随机测试事件流的过程中,记录每个测试事件执行时的系统环境信息;
将随机测试事件流中的测试事件从随机模式转换为脚本模式;
将脚本模式的测试事件写入测试记录文件,并在所述测试记录文件中记录每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间;
其中,所述将随机测试事件流中的测试事件从随机模式转换为脚本模式,包括:
从随机模式测试事件指令中,提取事件状态参数;
将随机模式测试事件类型转换为对应的脚本模式测试事件类型,根据所提取的事件状态参数,生成脚本模式测试事件指令。
2.根据权利要求1所述的方法,其特征在于,所述将随机测试事件流中的测试事件从随机模式转换为脚本模式,包括:
在随机测试事件流执行完成后,统一将随机测试事件流中的测试事件从随机模式转换为脚本模式;
在执行随机测试事件流的过程中,将随机测试事件流中的测试事件从随机模式转换为脚本模式。
3.根据权利要求2所述的方法,其特征在于,所述在执行随机测试事件流的过程中,将随机测试事件流中的测试事件从随机模式转换为脚本模式,具体实现为:
在monkey源代码的测试事件抽象类中添加脚本模式转换方法,
根据测试事件的类型,在各个测试事件子类中,重写该脚本模式转换方法。
4.根据权利要求3所述的方法,其特征在于,在各个测试事件子类中重写脚本模式转换方法后,还包括:
在测试事件子类中为脚本模式转换方法添加标识,所述标识用于限定该方法仅在随机测试模式下触发。
5.一种Android测试事件回放方法,其特征在于,包括:
获得测试记录文件,所述测试记录文件中,包括以脚本模式写入的随机测试事件流,还包括随机测试事件流中每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间;
接收测试用户输入的回放时间长度参数,根据回放时间长度与所述总执行时间的比例,在测试记录文件的测试事件流中定位回放起始事件,并将回放起始事件之前的测试事件滤除;
根据剩余的测试事件以及相应的系统环境信息,生成测试脚本;
执行所生成的测试脚本,实现测试事件回放。
6.根据权利要求5所述的方法,其特征在于,在生成测试脚本之前,还包括:
接收测试用户输入的应用包限定参数,将不符合所述限定参数的测试事件滤除。
7.一种Android测试事件记录装置,其特征在于,包括:
随机测试事件流生成单元,用于实时生成随机测试事件流并执行;
系统环境信息记录单元,用于在执行随机测试事件流的过程中,记录每个测试事件执行时的系统环境信息;
测试事件模式转换单元,用于将随机测试事件流中的测试事件从随机模式转换为脚本模式;
测试记录生成单元,用于将脚本模式的测试事件写入测试记录文件,并在所述测试记录文件中记录每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间;
其中,所述测试事件模式转换单元,包括:
事件状态参数提取子单元,用于从随机模式测试事件指令中,提取事件状态参数;
事件指令生成子单元,用于将随机模式测试事件类型转换为对应的脚本模式测试事件类型,根据所提取的事件状态参数,生成脚本模式测试事件指令。
8.根据权利要求7所述的装置,其特征在于,所述测试事件模式转换单元,具体配置为:
用于在随机测试事件流执行完成后,统一将随机测试事件流中的测试事件从随机模式转换为脚本模式;
用于在执行随机测试事件流的过程中,将随机测试事件流中的测试事件从随机模式转换为脚本模式。
9.一种Android测试事件回放装置,其特征在于,包括:
测试记录文件获得单元,用于获得测试记录脚本文件测试记录文件,所述测试记录脚本文件测试记录文件中,包括以脚本模式写入的随机测试事件流,还包括随机测试事件流中每个测试事件的执行时的系统环境信息和所述随机测试事件流的总执行时间;
回放时间设置单元,用于接收测试用户输入的回放时间长度参数,根据回放时间长度与所述总执行时间的比例,在测试记录文件的测试事件流中定位回放起始事件,并将回放起始事件之前的测试事件滤除;
测试脚本生成单元,用于根据剩余的测试事件以及相应的系统环境信息,生成测试脚本;
测试脚本执行单元,用于执行所生成的测试脚本,实现测试事件回放。
10.根据权利要求9所述的装置,其特征在于,该装置还包括:
回放事件设置单元,用于接收测试用户输入的应用包限定参数,将不符合所述限定参数的测试事件滤除。
11.一种Android测试系统,其特征在于,该系统包括如权利要求7至8任一项所述的测试事件记录装置以及如权利要求9至10任一项所述的测试事件回放装置。
CN201110268861.4A 2011-09-13 2011-09-13 一种Android测试事件记录回放方法及装置 Active CN102999419B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110268861.4A CN102999419B (zh) 2011-09-13 2011-09-13 一种Android测试事件记录回放方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110268861.4A CN102999419B (zh) 2011-09-13 2011-09-13 一种Android测试事件记录回放方法及装置

Publications (2)

Publication Number Publication Date
CN102999419A CN102999419A (zh) 2013-03-27
CN102999419B true CN102999419B (zh) 2016-03-16

Family

ID=47928016

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110268861.4A Active CN102999419B (zh) 2011-09-13 2011-09-13 一种Android测试事件记录回放方法及装置

Country Status (1)

Country Link
CN (1) CN102999419B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104679627B (zh) * 2013-12-02 2019-02-12 腾讯科技(深圳)有限公司 测试方法及装置
CN104090836B (zh) * 2014-02-17 2016-04-13 腾讯科技(深圳)有限公司 应用程序对系统广播的响应测试方法及装置
TWI528216B (zh) 2014-04-30 2016-04-01 財團法人資訊工業策進會 隨選檢測惡意程式之方法、電子裝置、及使用者介面
CN104866427B (zh) * 2015-06-05 2018-01-23 北京金山安全软件有限公司 一种基于Monkey命令的应用测试方法、装置及终端
CN106055442B (zh) * 2016-05-31 2019-06-25 周奇 操作重现方法及装置
CN108829598B (zh) * 2018-06-13 2019-11-29 深圳大学 一种移动应用的功耗检测方法及系统
CN110347606B (zh) * 2019-07-15 2022-11-08 百度(中国)有限公司 一种自动化测试方法、装置、设备及存储介质
CN115509909B (zh) * 2022-09-26 2023-11-07 北京百度网讯科技有限公司 测试方法、装置、电子设备和存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2420438A (en) * 2004-11-18 2006-05-24 Zootech Ltd Remote controller and access control to restricted audiovisual content
CN101175284B (zh) * 2006-11-01 2010-12-22 联想移动通信科技有限公司 一种便携式电子设备的功能测试方法
CN101771894A (zh) * 2008-12-31 2010-07-07 深圳市同洲电子股份有限公司 一种记录遥控器的轨迹测试系统、方法及数字电视接收终端
CN101493790B (zh) * 2009-02-27 2015-08-05 北京中星微电子有限公司 记录回放系统和记录回放方法
CN101635864A (zh) * 2009-08-21 2010-01-27 深圳创维数字技术股份有限公司 对电子设备的遥控测试方法及系统
US20110191676A1 (en) * 2010-01-29 2011-08-04 Microsoft Corporation Cross-Browser Interactivity Recording, Playback, and Editing
CN101931827A (zh) * 2010-08-05 2010-12-29 康佳集团股份有限公司 一种事件回放的机顶盒测试方法
CN102141960B (zh) * 2011-03-18 2013-08-14 广东欧珀移动通信有限公司 一种基于Android的自动化测试方法

Also Published As

Publication number Publication date
CN102999419A (zh) 2013-03-27

Similar Documents

Publication Publication Date Title
CN102999419B (zh) 一种Android测试事件记录回放方法及装置
US10853232B2 (en) Adaptive system for mobile device testing
CN104461894B (zh) 安卓软件的操作录制装置和方法
WO2020155777A1 (zh) Ui自动化功能测试方法、测试装置、测试设备及存储介质
US9465718B2 (en) Filter generation for load testing managed environments
US8627296B1 (en) Unified unit and integration test with automatic mock creation
WO2016095554A1 (zh) 应用程序的测试方法、设备及系统
CN108717393A (zh) 一种应用程序测试方法及移动终端
CN111756575A (zh) 存储服务器的性能分析方法及装置、电子设备
CN103984626A (zh) 一种生成测试用例脚本的方法及装置
Franke et al. Reverse engineering of mobile application lifecycles
CN108111364B (zh) 一种业务系统的测试方法及装置
TW201312340A (zh) 手持式電子裝置的測試系統及方法
CN104268083A (zh) 软件自动化测试方法和装置
CN108415826A (zh) 应用的测试方法、终端设备及计算机可读存储介质
CN106354629A (zh) 一种基于多级服务器的iOS系统移动应用自动测试系统的架构方法
CN103729293A (zh) 一种基于uml活动图的gui测试方法
CN106528429A (zh) 一种ui界面测试方法及装置
Canny et al. Model-based testing of GUI applications featuring dynamic Instanciation of widgets
US11179644B2 (en) Videogame telemetry data and game asset tracker for session recordings
CN101183400B (zh) 图形硬件设计中调试与验证的方法与系统
CN105339974B (zh) 模拟传感器
RU2729210C1 (ru) Комплекс тестирования программного обеспечения электронных устройств
Raut et al. Android mobile automation framework
US11422696B2 (en) Representation of user interface interactive regions

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant