一种面向Android及其衍生系统的软件操作录制回放方法

文档序号:6331484阅读:265来源:国知局
专利名称:一种面向Android及其衍生系统的软件操作录制回放方法
技术领域
本发明涉及一种装备Android及衍生系统设备上的记录回放方法,涉及用户界面 自动化、软件测试等领域,属于软件工程领域。
背景技术
Android系统是Google公司推出的一款Linux操作系统上的应用系统框架平台, 此平台采用Java语言开发。以此框架平台为基础,能方便地开发一些嵌入式软件。随着 Android系统的不断推广,各大手机厂商以及相关嵌入式设备商以Android系统为基础定 制出适合各自产品的Android的衍生系统。Android系统现在的最新版本为2. 1。在此背景下,针对Android及衍生系统平台上的软件测试的研究与开发也逐渐深 入,但是目前针对此类平台上的软件黑盒测试现在还局限于手工测试,没有合适的测试工 具。针对此问题,需要对Android及衍生系统平台上的软件操作进行记录,在对软件作相关 修改后,可以利用记录进行回放以测试软件行为是否和修改前一致。

发明内容
本发明解决了现有技术中存在的问题,充分利用Android及衍生系统的特性,根 据不同的使用情况以不同的方式完成操作的记录,并根据记录方式的不同完成相应的回放 功能,以测试软件行为是否和修改前一致。为完成上述发明目的,采用以下技术方案一种面向Android及其衍生系统的软件操作录制回放方法,包括如下步骤1)装备Android及其衍生系统的设备端与PC端连接并通信;2)对设备端进行UI操作,设备端或PC端记录UI操作指令及相应的程序状态信 息;3) PC端解析步骤2)中记录的UI操作指令及相应的程序状态信息,利用记录的UI 操作指令驱动设备端执行UI操作,并将执行后的程序状态与记录的相应的程序状态进行 比较,完成回放。所述步骤1)中设备端与PC端通过TCP/UDP/USB协议进行连接与通信;所述步骤1)中设备端与PC端连接采用客户端/服务器端模式,设备端为服务器 端,PC端为客户端。所述步骤2)包括如下三个步骤2-1)记录服务器端起始点的状态;2-2)记录UI操作指令以及相应的程序状态;2-3)记录结束点的状态;其中,步骤2-2)设备端的UI操作有两种方式,第一种是直接在设备端进行操作; 第二种是通过PC端与设备端的通信将设备端当前画面显示在PC端虚拟屏幕,然后在PC端 虚拟屏幕上操作,根据虚拟屏幕操作构造相应的操作指令传送给设备端的服务器程序,服
4务器程序按照操作指令驱动设备端执行;对于第一种方式,在服务器端新建脚本文件,利用Android系统及衍生系统提供 的getevent工具获取操作的每一条指令并将其记录在服务器端特定脚本文件中,当用户 通过客户端插入检测点时,服务器端将GUI信息插入服务器端特定的脚本文件中,记录结 束时,服务器端程序将设备端的脚本发送给客户端程序;对于第二种方式,在PC端新建一脚本文件(脚本形式符合基本格式,能正确解析 即可),在PC端构造操作指令并记录在脚本文件中。PC端虚拟屏幕和设备端界面保持同步, 每次设备端操作执行完成后的界面信息(包括所处界面所有关键UI的状态信息如UI对象 坐标、尺寸等)都通过服务器端程序发送给客户端程序并在客户端进行重绘,客户端程序 将GUI信息插入到脚本文件中。上述步骤中的脚本文件的基本格式为指令序列;Checkpoint ;程序状态信息;指令序列;Checkpoint ;程序状态信息;程序结束时状态信息;对于直接在设备端进行UI操作的输入方式而言,其指令序列中的每条指令格式 如/dev/input/eventO0001 OOle 00000001 所示,/dev/input/eventO 表示设备;后面三 个十六进制数分别表示指令类型、键码、键值。对于在客户端(PC端)虚拟屏幕输入UI操作而言,其指令序列中的每条指令格式 为EventType Action Eventdata,其中EventType指示操作事件类型(事件类型有 键盘事件,屏幕动作事件,时间事件);Action指示哪一种操作(对于键盘事件有Click和 Iongclick操作;对于屏幕动作事件有click,drag和Iongclick等操作;对于时间事件有 wait等操作),Eventdata指示具体的操作,如键盘事件指示按下的是哪一个键,而屏幕动 作事件指示事件发生的坐标等。脚本文件中的检测点指示经过一系列的操作指令执行之后,需要对指令执行后的 相应程序状态进行检查,检查的方法是比较脚本中检测点后的程序状态信息与指令执行后 的程序状态是否一致;所述步骤3)中的回放过程包括如下三个步骤3-1)根据上述步骤2-1)中的记录设置回放时的初始状态;3-2)根据PC端获取的脚本文件,对其进行解析获取相应的操作指令序列和相应 的程序状态信息,将每个检测点之前的指令序列发送给服务器端程序,服务器端应用程序 执行完相应的指令序列后,将程序状态信息即GUI发送给客户端程序与脚本文件中记录的 相应的检测点之后的记录进行比较;3-3)对比回放完毕后所处的状态是否与步骤2-3)中记录的状态一致;步骤3-2)具具体实现如下
3-2-1)如果记录采用的是直接在设备端进行UI操作的方式,则在客户端(PC 端)根据获取的指令序列和相应的检查点信息利用Android系统及衍生系统提供的工具 sendevent工具构造操作指令并发送给服务器端程序驱动设备端执行并检查是否与预期一 致,如果一致则继续发送下一条指令,否则报错;直至序列中所有的指令都发送完毕;3-2-2)如果记录采用的是在客户端(PC端)虚拟屏幕输入UI操作的方式,则客 户端根据之前记录的操作指令逐条发送给服务器端程序,服务器端驱动执行完成一个指 令后,服务器端程序将服务器端界面状态信息发送给客户端程序,如果此时脚本中是一个 Checkpoint,则客户端程序比较之前记录的状态信息,如果一致,则继续发送下一条指令, 否则报错;如果不是Checkpoint,则继续发送下一条指令。直至序列中的所有指令发送完 毕。在步骤3-3)中不论采用直接在设备端进行UI操作的方式还是采用在客户端 (PC端)虚拟屏幕输入UI操作的方式,在指令序列执行完毕后,服务器端程序将此时所处状 态信息发送给客户端程序并与步骤2-3)中记录的状态进行比较。与现有技术相比,本发明具有的技术效果是利用本发明的方法对Android及衍生系统平台上的软件操作进行记录,在对软件 作相关修改后,可以利用记录进行回放以测试软件行为是否和修改前一致。


图1为本发明方法流程图。
具体实施例方式为了更清楚的说明本发明,特将本发明的具体实施方案说明如下本方案描述了两种操作方式下的记录回放过程,录制回放系统服务器端程序安装 在设备端,客户端程序安装在PC端。在记录过程中,服务器端程序主要负责监听设备端的 操作并将操作指令及执行结果发送给客户端程序,客户端程序主要负责接收执行指令和相 应的结果并对其进行整理;而在回放过程中,客户端程序主要负责将记录的指令按照顺序 发送给服务器端,服务器端程序接收到指令后驱动设备端执行相应的指令。录制回放的过 程主要包括PC端与设备端的连接、记录开始设置、记录操作指令及相应程序状态信息、记 录结束设置、根据记录指令序列及相关状态信息回放检测等步骤。以下结合附图1,分别描 述各个步骤。(I)PC端与设备端通过USB接口连接,预先约定PC端与设备端连接的端口,当然也 可以使用TCP/UDP等协议进行连接,连接方式采用客户端/服务器端模式,其中PC端为客 户端,设备端为服务器端;两者通信利用java socket编程接口实现;(2)设置记录开始时的起始状态,记录的信息以脚本形式保存在客户端,起始状态 信息也不例外。用户点击客户端的“开始记录”菜单调用客户端接口如StartRecordO记 录服务器端的起始时的状态信息,并将服务器端的GUI信息发送到客户端并显示在虚拟屏 幕上,其伪代码如下所示StartRecord_Client(){sendStartlnfoToServer();waitForGUIInfoQ ;IoadGraph (); recordGUIInfo ();
}
StartRecord—Server () {
receiveStartlnfoFromClient(); DUMP ();
sendGUIInfoToClient ();
ι
(3)对设备端进行操作并记录。操作有两种方式,一种是在设备端操作,另-中的虚拟屏幕上进行操作,以下分别描述两种操作方式的记录方法。
(31)当使用人工方式在设备端手工操作时,其操作流程如下伪代码所示 Record—Server () {
createFile(recordFile); recordlnitialState(recordFile); while O {
if (isClient){
recordGUIInfo(recordFile); if (endRecord){
SendRecordFileToClient(); exit ;
ι
setClient (false); }else {
recordlnstrument (recordFile);
ι中是
Record—Client () {
If (checkpoint or endRecord){ setClient (true); if (endRecord){
sendEndlnfoToServer() waitForServer (); receiveRecordFile ();
如上代码所示,首先在服务器端创建一脚本文件,并开始记录,当用户在客户端发送checkpoint或结束记录信息时,服务器端将程序状态信息插入到相应的脚本文件中。
(32)当使用客户端虚拟屏幕操作时,客户端与服务器端执行流程如下伪代码所







Record_Client()
{
createFile (recordFile) ;//recordFile 是脚本文件 if(endRecord) {//如果是结束记录标识 SendEndToServer (); waitForServer (); recordGUIInfo(recordFile); exit ;
ι
while ( ! endRecord){
mocklnstrument () or insertCheckPoint () ;//发送指令或检查点 if (IsOperation) {// 如果是指令
recordlnstrument (recordFile) ;// 记录指令信息
ι
waitForServer ();
Il如果活动改变或需要重新DUMP信息 if (receive activitychange or dumplnfo){ recordGUI Info (recordFile); IoadGraph ();
}
Else{
Continue ;
Record—Server ()
waitlnformationFromClient();
Il如果接收到记录结束信息,则将GUI信息发送给客户端并推出 if (receiveEnd) { DUMP ();
sendDumpInfoToClient (); exit ;
Il如果是检查点,则将⑶ι信息发送给客户端并推出 if(isCheckPoiht) {
8
}}客户端与服务器端交互信息,当用户点击客户端的插入检查点菜单或结束记录菜 单时,服务器端将此时设备端GUI信息由DUMP导出并发送给客户端更新虚拟屏幕并保存此 时的状态;当用户操作虚拟屏幕时,客户端构造操作指令并保存指令,然后向服务器端发送 操作指令,服务器端调用injectEventO接口驱动设备端执行,服务器端检测是否发生活 动切换(用户界面发生界面改变),如果没有则直接发送结束执行消息给客户端,客户端接 收消息后执行下一条指令;如果发生活动切换,则将此切换自动当作一个检查点插入处理。(4)当以手工方式操作设备端时,当用户点击客户端的结束记录菜单时,客户 端利用接口如sendEndToServer 0向服务器端发送结束信息,服务器端收到消息后, 调用系统提供的DUMP接口获取当前窗口 GUI信息插入到脚本文件中,并调用接口如 SendRecordFileToClient ()向客户端发送记录的脚本文件,然后结束;当用户通过客户端 虚拟屏幕方式录制时,当用户点击结束记录菜单时,服务器端接收到结束消息后调用接口 如sendDumpInfoToClientO向客户端发送⑶I信息并退出,客户端程序将接收到的信息 插入到脚本文件中。(5)由步骤(4)得到的脚本文件格式是(指令1,指令2,…检查点,…,结束状 态信息),手工方式与虚拟屏幕操作方式在这里指令格式是不同的,手工方式指令格式如/ dev/input/event0:0001 OOle 00000001,其中 /dev/input/eventO 指设备名称,后面三个 十六进制数分别表示类型,键码和码值,具体意义在Android系统中有定义;而屏幕操作格 式是“EventType Action Eventdata”,其中EventType指示操作事件类型(事件类型有 键盘事件,屏幕动作事件,时间事件);Action指示哪一种操作(对于键盘事件有Click和 Iongclick操作;对于屏幕动作事件有click,drag和Iongclick等操作;对于时间事件有 wait等操作),Eventdata指示具体的操作,如键盘事件指示按下的是哪一个键,而屏幕动 作事件指示事件发生的坐标等。回放过程如下伪代码所示Replay—Client(recordSequence)
DUMP ();
sendDumpInfoToClientO ;
ι
//如果接收的是操作指令,则植入指令并执行 Il如果发生活动切换,则导出信息并将此处作为一个检查点 if (receive Instrument){ InjectEvent (); if (activitychanged){ DUMP ();
sendDumpInfoToClientO ;
ι
else {
SendExeEndToClient();
{
0145]while ( ! recordSequence. end){
0146]while(notCheckPoint) {
0147]sendlnstrumentToServer ();
0148]}
0149]sendCheckPointO ;
0150]waitForlnfoFromServer ();
0151]Il比较接收到的信息和检查点的信息是否一致
0152]fig = checkPointlnfo (receive, checkpointlnfo);
0153]if(flg == true)//如果一致,则继续
0154]continue ;
0155]else{//如果不一致,则报错返回
0156]ReportError ();
0157]exit ;
0158]}
0159]} }Replay_Server ()
、!
权利要求
一种面向Android及其衍生系统的软件操作录制回放方法,包括如下步骤1)装备Android及其衍生系统的设备端与PC端连接并通信;2)对设备端进行UI操作,设备端或PC端记录UI操作指令及相应的程序状态信息;3)PC端解析步骤2)中记录的UI操作指令及相应的程序状态信息,利用记录的UI操作指令驱动设备端执行UI操作,并将执行后的程序状态与记录的相应的程序状态进行比较,完成回放。
2.如权利要求1所述的方法,其特征在于,所述步骤1)设备端与PC端连接采用客户端 /服务器端模式,设备端为服务器端,PC端为客户端;且设备端通过TCP或UDP或USB协议 与PC端进行连接并通信。
3.如权利要求1所述的方法,其特征在于,所述步骤2)包括如下步骤 3-1)记录服务器端起始点的状态;3-2)记录UI操作指令以及相应的程序状态; 3-3)记录结束点的状态;其中,步骤3-2)对设备端进行的UI操作包括直接在设备端进行UI操作;或者通过PC 端与设备端的通信将设备端当前画面显示在PC端虚拟屏幕上进行UI操作。
4.如权利要求3所述的方法,其特征在于,所述直接在设备端进行操作的实现方法为 在设备端新建脚本文件,获取操作的每一条指令并将其记录在设备端脚本文件中,当用户 在客户端发送检测点信息或结束记录信息时,设备端将程序状态信息插入到脚本文件中。
5.如权利要求3所述的方法,其特征在于,所述在PC端虚拟屏幕上进行操作的实现方 法为在PC端新建脚本文件,将PC端虚拟屏幕和设备端界面保持同步,设备端操作执行完 成后的界面信息都通过通信发送给PC端,在PC端构造操作指令并记录在脚本文件中。
6.如权利要求4或5所述的方法,其特征在于,所述脚本文件的格式为 指令序列;检测点; 程序状态信息;指令序列; 检测点; 程序状态信息; 程序结束时状态信息。
7.如权利要求4所述的方法,其特征在于,所述脚本文件中的每条指令格式为/dev/ input/event0:0001 OOle 00000001,其中,/dev/input/eventO 表示设备;0001 表示指令 类型、OOle表示键码、00000001表示键值。
8.如权利要求7所述的方法,其特征在于,解析时将指令中的十六进制数转换为十进 制数。
9.如权利要求5所述的方法,其特征在于,所述脚本文件中的每条指令格式为 EventType Action Eventdata,其中EventType表示操作事件类型,所述事件类型包括键 盘事件、屏幕动作事件、时间事件;Action表示哪一种操作,对于键盘事件包括Click和 Iongclick操作;对于屏幕动作事件包括click,drag和Iongclick操作;对于时间事件包括wait操作;Eventdata指示具体的操作。
10.如权利要求1所述的方法,其特征在于,所有UI操作指令执行完毕后,设备端将此 时程序状态信息发送给PC端,与PC端记录的程序状态信息进行比较。
全文摘要
本发明提供了一种面向Android及其衍生系统的软件操作录制回放方法,包括如下步骤1)装备Android及其衍生系统的设备端与PC端连接并通信;2)对设备端进行UI操作,设备端或PC端记录UI操作指令及相应的程序状态信息;3)PC端解析步骤3)中记录的UI操作指令及相应的程序状态信息,利用记录的UI操作指令驱动设备端执行UI操作,并将执行后的程序状态与记录的相应的程序状态进行比较,完成回放。利用本发明的方法对Android及衍生系统平台上的软件操作进行记录,在对软件作相关修改后,可以利用记录进行回放以测试软件行为是否和修改前一致。
文档编号G06F11/36GK101957793SQ20101027304
公开日2011年1月26日 申请日期2010年9月3日 优先权日2010年9月3日
发明者安朗, 张亚峰, 薛云志, 郑东阳, 陈军成 申请人:中国科学院软件研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1