基于android平台的自动化测试方法及测试工具
技术领域
本发明属于程序测试领域,尤其涉及一种基于android平台的自动化测试方法及测试工具。
背景技术
Android是一种以Linux为基础的开放源码操作系统,正因为其开源免费,再加上Android操作系统简单实用,受到广大厂商的偏爱,特别在智能手机领域短短的三年内就取得的长足的发展,目前已经超过苹果操作系统成为第一智能操作系统,不仅如此,在平板电脑、智能电视等其他领域越来越多的厂商都开始逐步倾向选择Android操作系统。
智能设备之所以能受到广大消费者的喜爱,就是因为其具有海量的应用软件,通过不同的应用软件实现不同的功能,丰富了用户的生活,提高用户的使用体验,苹果手机正是凭借这点积累了大量的粉丝。对于Android手机也不例外,正是因为系统开源,广大的程序爱好者都可以加入到这个Android程序开发的环境中来,Android如火如荼的气势实在难以抵挡。但在一方面,作为正式的软件产品进入市场之前,需要测试人员进行精细的测试工作以保证软件质量,在另一方面,Android操作系统更新也越来越快,从2008年9月发布Android1.1到2011年10月19日发布的Android4.0,短短的三年时间内Android操作系统升级了无数版本,但在操作系统升级的同时也需要对先前开发的软件是否能用在新版本的Android平台上进行验证测试,比如一些在Android2.1-update1版本上可以正常运行的软件在Android 2.1-update3和2.2上就可能导致崩溃,这就意味着需要进行大量重复的测试工作,即使是在同一版本的Android操作系统中,根据不同的设备终端也会出现不同的软件运行结果,比如在Motorola设备终端上用红色边框来高亮一个输入域,但在其他品牌设备终端上用同样的红色边框来表示输入域就会出现问题,所以说在软件开发过程中需要进行大量的软件测试。
在测试Android程序时,可以通过SDK里自带现成的测试工具monkey和monkeyrunner,monkey主要应用在压力和可靠性测试上,运行该命令可以随机地向目标程序发送各种模拟键盘事件流,并且可以自己定义发送的次数,以此观察被测应用程序的稳定性和可靠性,应用起来也比较简单,记住那几个命令就行了。而monkeyrunner,相比之下会强大一些,它主要可应用于功能测试,回归测试,并且可以自定义测试扩展,灵活性较强,并且测试人员可以完全控制。但目前基于Android平台的软件测试都是通过测试人员一步步人工实现的,在测试过程中需要不停地看着设备对象的显示屏,来判断该测试用例是否通过,这样的人工测试需要浪费大量的人力物力,限制了Android软件的进一步发展,而且目前也没有一款完善的基于Android平台的自动化测试工具。
发明内容
鉴于上述问题,本发明实施例的目的是提供一种基于android平台的自动化测试方法,旨在解决现阶段基于android平台的人工逐步测试程序造成的人力物力资源大量浪费的问题。
本发明实施例是这样实现的,基于android平台的自动化测试方法,包括下述步骤:
用于录制操作事件并生成android平台可执行脚本的脚本录制步骤;
用于在设备对象接收到执行脚本的命令后执行所述可执行脚本的脚本执行步骤;以及
用于根据脚本执行结果判断自动化用例是否通过的结果判断步骤。
进一步,在脚本录制和脚本执行的步骤中保存当前界面元素,通过比对界面元素判断自动化用例是否通过,若所述得到的界面元素相同则表明该自动化用例通过,反之该自动化用例未通过。
进一步,在所述脚本录制步骤之前还包括下述步骤:
用于获取与当前PC机连接的设备对象,并读取linux层与android层的键值映射文件到对应的HashMap中的工具初始化步骤。
本发明实施例的另一目的在于提供一种基于android平台的自动化测试工具,本自动化测试工具包括:
脚本录制单元,用于录制操作事件并生成android平台可执行脚本;
脚本执行单元,用于在设备对象接收到执行脚本的命令后执行所述可执行脚本;以及
比对判断单元,用于根据脚本执行结果判断自动化用例是否通过。
进一步,所述脚本录制单元和脚本执行单元均保存当前界面元素,所述比对判断单元通过比对界面元素判断自动化用例是否通过,若所述得到的界面元素相同则表明该自动化用例通过,反之该自动化用例未通过。
进一步,本自动化测试工具还包括:
工具初始化单元,用于获取与当前PC机连接的设备对象,并读取linux层与android层的键值映射文件到对应的HashMap中。
本发明实施例的有益效果是:本发明实施例提供了一种基于android平台的自动化测试方法,该方法通过脚本录制得到设备对象操作事件的可执行脚本,在脚本录制时保存设备对象显示的界面元素,再通过执行所述可执行脚本得到设备对象的界面元素,将两次界面元素自动比对即可得知该测试用例是否通过,整个过程仅需程序测试人员观察最后的比对结果记录就可知哪些程序测试用例通过哪些没有通过,该方法实现起来全程自动化,节约了大量的人力物力资源。
本发明实施例的另一个有益效果是:本发明实施例提供了一种基于android平台的自动化测试工具,该测试工具包括脚本录制单元、脚本执行单元和比对判断单元,实现了脚本录制时的界面元素和脚本执行后的界面元素的自动比对,得出测试结果,从而可以自动化地实现程序的测试,节约了大量的人力物力资源。
附图说明
图1是本发明第一实施例提供的基于android平台的自动化测试方法流程图;
图2是本发明第二实施例提供的图1中所述脚本录制步骤的具体工作流程图;
图3是本发明第三实施例提供的图2中所述脚本解析步骤的具体流程图;
图4是本发明第四实施例提供的图1中所述脚本执行步骤和比对判断步骤的具体流程图;
图5是本发明第五实施例提供的基于android平台的自动化测试工具的结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在实现本发明实施例前需要搭建好测试通讯系统,本发明实施例的自动化测试工具存放在Android SDK的tools目录下,该测试工具运行在PC机上并且可以运行jar包,所述测试工具通过在PC机上安装有android自带的ADB工具或是通过USB实现与外围设备对象连接,配置好socket通讯参数。所述测试工具在操作界面上通过swt/jface展示出来,在底层功能时通过shell命令实现,通过socket端口和地址将shell命令发送给外围被测设备。
本发明实施例通过录制脚本事件,根据接收到的shell命令回放脚本,再将执行脚本完毕后自动获取的界面元素与录制脚本事件过程中获取的界面元素进行比对,得出测试用例的测试结果,从而实现基于android平台的软件自动化测试,在整个测试过程中无需测试人员一步步跟踪测试,可以直接读取自动化测试工具的测试结果,节约了人力成本。
以下结合具体实施例对本发明的具体实现进行详细描述:
实施例一:
图1示出了本发明第一实施例提供的基于android平台的自动化测试方法流程,详述如下:
在步骤S1中,工具初始化步骤,用于获取与当前PC机连接的设备对象,并读取linux层与android层的键值映射文件到对应的HashMap中。
在本发明实施例中,该步骤是实现基于android平台自动化测试的前置步骤,自动化测试工具需要与外界设备对象连接,所述的设备对象是Android操作系统的设备即可,包括但不限于智能手机、平板电脑和智能电视等。所述的基于linux层的键值映射文件为qwerty.kl,该文件里包括操作设备对象的功能以及该功能所对应的键值,通过点击设备按键,系统根据该按键的键值就可以找到该按键对应的功能,譬如在android手机中,键值217是搜索键,其对应的按键功能是SEARCH,点击搜索键后,根据其键值217找到对应的按键功能SEARCH。所述基于android层的键值映射文件为keyEvent.java,该文件包含的是事件键码值,以16进制格式保存。将这两个键值映射文件的映射内容读取到对应的HashMap中以供后续键值映射查询。
在步骤S2中,脚本录制步骤,用于录制操作事件并生成android平台可执行脚本。
在本发明实施例中,所述的操作事件是指通过设备操作动作产生的事件,包括点击设备上的实体按键或虚拟按键和点击控制所述设备的遥控器上的实体或虚拟按键。
在本发明实施例中,作为优选的实施例,在脚本录制完成后,自动化测试工具会自动获取当前界面元素并保存该界面元素供后续比对使用。
在步骤S3中,脚本执行步骤,用于在设备对象接收到执行脚本的命令后执行所述可执行脚本。
在本发明实施例中,录制好事件脚本后,为了达到软件测试目的,需要执行录制好的可执行脚本,作为优选的实施方式,测试工具会自动获取脚本执行完毕后的界面元素,通过该界面元素与先前录制脚本时保存的界面元素比对就可判断本测试用例是否通过。
在步骤S4中,结果判断步骤,用于根据脚本执行结果判断自动化用例是否通过。
在本发明实施例中,在脚本录制和脚本执行的步骤中保存当前界面元素,在结果判断步骤中通过比对界面元素判断自动化用例是否通过,若所述得到的界面元素相同则表明该自动化用例通过,反之该自动化用例未通过。
在本发明实施例中,无需人工就可以实现自动比对,进一步作为优选的实施方案,获取当前界面元素是通过Android自带工具hierarchyviewer实现的,该工具原本的用途是UI分析,但在此可用作于获取界面元素,并进行界面元素比对。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成。
实施例二:
图2示出了本发明第二实施例提供的图1中所述脚本录制步骤S2的具体工作流程,详述如下:
在步骤S21中,触发录制步骤,用于标识可以开始进行脚本录制;
在本发明实施例中,本步骤为实现脚本录制的前置步骤,只有设备对象接收到该触发录制的命令时才开始进行脚本录制。在具体实现时,可以在自动测试工具的工作界面上提供“开始录制”按钮,测试人员通过点击该按钮开始执行脚本录制。
在步骤S22中,连接确认步骤,用于确认自动化测试工具是否获取到设备对象。
在本发明实施例中,本步骤同样是进行脚本录制前的一个优选步骤,为了进一步确认自动化测试工具是否获取到设备对象,若没有获取到设备对象,自动化测试工具给出“未获取到设备”的提示,并结束录制。这样可以防止在没获取到设备对象时进行错误录制,最终得到错误的比对结果。
在步骤S23中,命令生成发送步骤,用于在自动化测试工具端构建操作命令,并将所述的操作命令格式化成二进制byte数组,通过建立socket连接将所述的操作命令发送到被测设备对象。
在本发明实施例中,测试人员根据需要选择待测的功能,在测试工具端写入所述待测功能对应的指令代码构建操作命令。譬如要测试搜索功能时,测试人员在测试工具端直接写入search指令代码生成搜索操作命令,该命令经过处理后通过socket端口发送到被测设备对象。
在步骤S24中,命令执行步骤,用于设备对象接收所述操作命令并执行该操作命令,执行完毕后获取并保存执行脚本信息;
在本发明实施例中,作为优选的实施方案,所述保存的执行脚本信息包括:表示设备操作动作的16进制码流、设备对象接收到本次操作命令与上一次操作命令的间隔时间、本次操作命令执行完毕后设备对象显示的当前界面元素。
进一步作为优选的是,所述的16进制码流分为三段,包括设备类型、键值和操作类型。原始的16进制码流如下:
/dev/input/event3:0004 0004 00070028
/dev/input/event3:0001 001c 00000001
/dev/input/event3:0000 0000 00000000
/dev/input/event3:0004 0004 00070028
/dev/input/event3:0001 001c 00000000
/dev/input/event3:0000 0000 00000000
上述的0004、001c、0000等均表示键值。
在步骤S25中,脚本解析步骤,用于将所述执行脚本信息中包含有表示设备操作动作的键值与装载有linux层映射文件的HashMap做映射,再将得到的映射值与装载有android层映射文件的HashMap做映射,得到经双层映射后的键值。
在步骤S26中,脚本生成步骤,用于根据经双层映射后的键值生成android平台可执行的脚本。
在本发明实施例中,该可执行的脚本提供给下一步脚本执行步骤使用。
实施例三:
图3示出了本发明第三实施例提供的图2中所述脚本解析步骤的具体流程,详述如下:
在步骤S251中,自动化测试工具调用触发解析进程。
在步骤S252中,判断所述保存的执行脚本信息是否为有效的脚本,若为无效脚本,则脚本解析结束。
在步骤S253中,若所述执行脚本信息为有效的脚本,则进一步判断该执行脚本信息中包含有表示设备操作动作的键值是否为设备按键操作或是遥控器按键操作,若不是设备按键或遥控器按键操作,则脚本解析结束。
在步骤S254中,若表示设备操作动作的键值为设备按键操作或是遥控器按键操作,则将该键值与装载有linux层映射文件的HashMap做映射,这里的linux层映射文件为qwerty.kl。
在步骤S255中,将步骤S254得到的映射值与装载有android层映射文件的HashMap做映射,得到经双层映射后的键值,这里的android层映射文件为keyEvent.java。
在本发明实施例中,只有通过linux层和android层键值双层映射,才能验证在android的操作界面上能否完成按键操作所对应的功能。
在本发明实施例中,若脚本解析结束后未能得到经双层映射后的键值,则停留在此步骤,不会生成在android平台可执行的脚本。
实施例四:
图4示出了本发明第四实施例提供的图1中所述脚本执行步骤S3和比对判断步骤S4的具体流程,详述如下:
在步骤S31中,自动化测试工具调用触发执行进程。
在步骤S32中,自动化测试工具确认是否获取到设备对象。
在本发明实施例中,再次确认自动化测试工具是否获取到设备对象,若没有获取到设备对象,自动化测试工具给出“未获取到设备”的提示,并结束测试用例和标记本测试用例脚本执行失败,这样可以防止在没获取到设备对象时脚本错误执行,最终得到错误的比对结果,因此本步骤可以进一步保证脚本执行步骤正确执行。
在步骤S33中,若已获取到设备对象,则通过建立socket连接再根据模块名和用例名获取可执行脚本路径,最终得到可执行脚本。
在本发明实施例中,建立socket连接时需要配置客户端(设备对象)的地址和端口号以及服务器端(PC机端)的端口号,以便建立完整socket通讯。
在步骤S34中,判断所述得到的可执行脚本是否为需要执行的脚本。
在本发明实施例中,若检测到所述的可执行脚本不是所需要执行的脚本,则直接结束测试用例,并同时标记本测试用例脚本执行失败。
在步骤S35中,若该执行脚本是需要执行的脚本,则将所述可执行脚本中包含的键值组装成shell命令,设备对象根据接收所述shell命令开始执行所述可执行脚本。
在步骤S36中,执行sleep线程,休眠在脚本录制时保存的上次操作的间隔时间。
在本发明实施例中,本步骤是优选的实施方式,一般情况设备对象可以是智能电视,而目前大部分的智能电视的大多应用需要依赖网络,譬如在搜索网络电视的时候经常会出现一定时间的网络延时,这里通过启用sleep线程休眠在脚本录制时保存的上次操作的间隔时间,以保证脚本被执行完毕,这时设备对象显示的界面元素就是脚本被执行完毕后的界面元素。
在步骤S37中,获取设备对象当前界面元素同时记录当前界面元素已经的获取次数。
在步骤S38中,判断设备对象当前界面元素是否获取成功,若获取成功,则保存当前界面元素,否则继续执行sleep线程。
在本实施例中,若获取当前界面元素失败,则继续执行sleep线程,在执行sleep线程时若受到外界意外干扰没有休眠足够时间,可能会导致在获取当前界面元素时脚本并未执行完毕,造成了不必要的比对错误,这样可以克服脚本执行过程中出现的意外干扰。
在步骤S39中,进一步作为优选的实施方式,若当前界面元素获取失败,则进一步判断当前记录的获取次数是否小于一预设的阈值,若小于所述阈值则继续执行sleep线程,否则该测试用例执行结束并记录用例执行状态。
在本实施例中,作为实践得出的结论,所预设的阈值为3,当记录的获取次数大于或等于3时,直接退出脚本执行并指示脚本执行失败,这样可以避免不必要的重复的获取界面数据,节约了测试时间。
在步骤S41中,将可脚本执行完成后自动获取的界面元素与脚本录制过程中获取的界面元素进行比对。
在步骤S42中,根据比对结果判断该自动化用例是否通过的比对判断步骤,若所述得到的界面元素相同则表明该自动化用例通过,反之该自动化用例未通过,并记录该自动化用例的执行状态。
在本发明实施例中,所述的执行状态包括动化用例通过、自动化用例未通过、脚本执行失败等等。
实施例五:
图5示出了本发明第五实施例提供的基于android平台的自动化测试工具的结构,为了便于说明,仅示出了与本发明实施例相关的部分。详述如下:
工具初始化单元,用于获取与当前PC机连接的设备对象,并读取linux层与android层的键值映射文件到对应的HashMap中。
在本发明实施例中,本工具单元是优选部件,自动化测试工具需要与外界设备对象连接,所述的设备对象是基于Android操作系统的设备即可,包括但不限于智能手机、平板电脑和智能电视等。在初始化过程中自动化测试工具连接到设备对象后,需要预先将含有键值映射内容的两个映射文件读取到对应的HashMap中以供后续键值映射查询。
脚本录制单元,用于录制操作事件并生成android平台可执行脚本。
在本发明实施例中,该单元是本自动化测试工具的核心所在,只有录制好操作事件后才能进行脚本执行,从而自动化地完成软件测试,整个过程都是本自动化测试工具自动完成。
所述的操作事件是指通过设备操作动作产生的事件,包括点击设备上的实体按键或虚拟按键和点击控制所述设备的遥控器上的实体或虚拟按键。在本发明实施例中,在脚本录制完成后,自动化测试工具会自动获取当前界面元素并保存该界面元素供后续比对使用。
脚本执行单元,用于在设备对象接收到执行脚本的命令后执行所述可执行脚本。
在本发明实施例中,录制好事件脚本后,为了达到软件测试目的,需要执行录制好的可执行脚本,作为优选的实施方式,测试工具会自动获取脚本执行完毕后的界面元素,通过该界面元素与先前录制脚本时保存的界面元素比对就可判断本测试用例是否通过。
结果判断单元,用于根据脚本执行结果判断自动化用例是否通过。
在本发明实施例中,判断自动化用例是否通过可以通过比对脚本录制步骤和脚本执行的步骤中保存的当前界面元素是否相同来实现,若所述得到的界面元素相同则表明该自动化用例通过,反之该自动化用例未通过,并记录该自动化用例的执行状态。
进一步作为优选的实施方式,所述的脚本录制单元包括:
命令生成发送模块,用于在自动化测试工具端构建操作命令,并将所述的操作命令格式化成二进制byte数组,通过建立socket连接将所述的操作命令发送到被测设备对象。
命令执行模块,用于设备对象接收所述操作命令并执行该操作命令,执行完毕后获取并保存执行脚本信息。
脚本解析模块,用将所述执脚本行信息中包含有表示设备操作动作的键值与装载有linux层映射文件的HashMap做映射,再将得到的映射值与装载有android层映射文件的HashMap做映射,得到经双层映射后的键值。以及
脚本生成模块,根据经双层映射后的键值生成android平台可执行的脚本。
作为上述脚本录制单元结构的进一步改进,本脚本录制单元还包括:
触发录制模块,用于标识可以开始进行脚本录制。
连接确认模块,用于确认自动化测试工具是否获取到设备对象。
进一步作为优选的实施方式,所述脚本执行单元包括:
触发执行模块,用于调用触发执行进程。
获取确认模块,用于确认是否获取到设备对象。
脚本获取模块,若已获取到设备对象,则通过建立socket连接再根据模块名和用例名获取可执行脚本路径,最终得到可执行脚本。
脚本确认模块,用于判断所述得到的可执行脚本是否为需要执行的脚本,若检测到所述的可执行脚本不是所需要执行的脚本,则直接结束测试用例,并同时标记本测试用例脚本执行失败。
回放执行模块,若该执行脚本是需要执行的脚本,则将所述可执行脚本中包含的键值组装成shell命令,设备对象根据接收所述shell命令开始执行所述可执行脚本。
休眠模块,用于执行sleep线程,休眠在脚本录制时保存的上次操作的间隔时间。
界面元素获取模块,用于获取设备对象当前界面元素同时记录当前界面元素已经的获取次数。在本发明实施例中,本模块是优选的实施方式,在执行sleep线程时若受到外界意外干扰没有休眠足够时间,可能会导致在获取当前界面元素时脚本并未执行完毕,造成了不必要的比对错误。
获取判定模块,用于判断设备对象当前界面元素是否获取成功,若获取成功,则保存当前界面元素,否则继续执行sleep线程。
阈值判定模块,若当前界面元素获取失败,则进一步判断当前记录的获取次数是否小于一预设的阈值,若小于所述阈值则继续执行sleep线程,否则该测试用例执行结束并记录用例执行状态。在本实施例中,作为实践得出的结论,所预设的阈值为3,当记录的获取次数大于或等于3时,直接退出脚本执行并指示脚本执行失败,这样可以避免不必要的重复的获取界面数据,节约了测试时间。
本发明的自动化测试工具运行在PC机上,对手机应用程序或智能电视应用程序进行自动化测试,测试人员仅需在本自动化测试工具的软件界面上PC观察测试完成后的显示结果即可,本自动化测试工具能够正确录制设备按键或遥控按键的操作轨迹,达到自动化测试的目的,有效地节约了开发成本。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。