专利名称:一种基于安卓系统的待测应用自动测试方法和系统的制作方法
技术领域:
本发明涉及基于安卓系统的测试技术领域,特别是涉及基于安卓系统的待测应用自动测试方法和系统。
背景技术:
目前安卓(Andriod)系统自动化测试工具中,实现能力较强的均为控件识别。但由于Andriod机制,外部工具无法获得被测应用内容,目前大部分采用的方法是将测试工具 与被测应用合并打包,形成一个应用,然后对内部的被测工具进行调用,实现自动化测试。此种测试技术存在以下缺陷1.无法跨应用测试如在浏览相册时分享至微博,这样的操作测试无法实现。2.由于被测应用和测试工具是一体的,一些关闭,开启的操作会同时关闭测试工具,无法进行自动化。自动化覆盖率不高。3.同时,无法跨应用验证检测点。如分享,下载等需要进入其他应用进行验证的情形无法进行。不能提供准确客观的结果。
发明内容
基于此,有必要针对现有基于安卓系统的自动化测试工具无法跨应用测试的技术问题,提供一种基于安卓系统的待测应用自动测试方法和系统。—种基于安卓系统的待测应用自动测试方法,包括
对多个待测应用和测试工具分别进行反编译;
修改每个待测应用和测试工具,使得每个待测应用和测试工具的注册文件的进程参数相同;
将每个待测应用和测试工具各自编译成新的安装包;
对每个待测应用和测试工具给予相同签名;
通过测试工具启动待测应用程序,进行测试。进一步的,所述进程参数为每个待测应用和测试工具的注册文件的用户名和进程标识,所述修改每个待测应用和测试工具,使得每个待测应用和测试工具的注册文件的进程参数相同具体包括
修改每个待测应用和测试工具的注册文件,使得每个待测应用和测试工具的注册文件的用户名相同;
修改每个待测应用和测试工具的注册文件,使得每个待测应用和测试工具的注册文件的进程标识相同。
进一步的,所述通过测试工具启动待测应用程序,进行测试,具体包括
根据测试工具中预设的测试步骤对第一待测应用进行操作;
如果测试步骤中需要调用第二待测应用,则调用第二待测应用,所述第二待测应用在第一待测应用的进程中启动。进一步的,所述根据测试工具中预设的测试步骤对第一待测应用进行操作,具体包括
步骤41,测试工具根据预设的测试用例获取第一待测应用的检测对象,执行步骤42 ;步骤42,对第一待测应用进行检索操作,获取所述待测对象的目标窗口,执行步骤43 ;步骤43,根据预设的待测对象的检测点,获取所述目标窗口的检测点的状态,并保存为检测点的初始状态,执行步骤44 ;
步骤44,根据预设的测试用例调用所述检测对象的操作步骤,执行步骤45 ;
步骤45,重新获取所述目标窗口的检测点的状态,并保存为检测点的结束状态。进一步的,所述获取所述待测对象的目标窗口具体如下
获取安卓系统框架层中的第一待测应用的窗口管理器;
从所述窗口管理器中的获取第一待测应用的根窗口;
获取所述根窗口所包括的所有子窗口,并生成包括有子窗口的识别参数的子窗口列
表;
获取目标窗口的标识参数;
根据目标窗口的识别参数匹配所述子窗口列表,得到目标窗口。进一步的
所述获取安卓系统框架层中的第一待测应用的窗口管理器,通过反射机制动态获得; 所述从所述窗口管理器中的获取第一待测应用的根窗口,通过反射机制动态获得。—种基于安卓系统的待测应用自动测试系统,包括
反编译模块,用于对多个待测应用和测试工具分别进行反编译;
修改模块,用于修改每个待测应用和测试工具,使得每个待测应用和测试工具的注册文件的进程参数相同;
编译模块,用于将每个待测应用和测试工具各自编译成新的安装包;
签名模块,用于对每个待测应用和测试工具给予相同签名;
测试模块,用于通过测试工具启动待测应用程序,进行测试。进一步的,所述进程参数为每个待测应用和测试工具的注册文件的用户名和进程标识,所述修改模块
修改每个待测应用和测试工具的注册文件,使得每个待测应用和测试工具的注册文件的用户名相同;
修改每个待测应用和测试工具的注册文件,使得每个待测应用和测试工具的注册文件的进程标识相同。进一步的,所述测试模块包括
主测试子模块,用于根据测试工具中预设的测试步骤对第一待测应用进行操作;
调用测试子模块,用于如果测试步骤中需要调用第二待测应用,则调用第二待测应用,所述第二待测应用在第一待测应用的进程中启动。
进ー步的,所述主测试子模块,包括
检测对象获取单元,用于测试工具根据预设的测试用例获取第一待测应用的检测对
象;
目标窗ロ获取单元,用于对第一待测应用进行检索操作,获取所述待测对象的目标窗
n ;
检测点初始状态获取单元,用于根据预设的待测对象的检测点,获取所述目标窗ロ的检测点的状态,并保存为检测点的初始状态;
操作步骤调用単元,用于根据预设的测试用例调用所述检测对象的操作步骤;
检测点结束状态获取単元,用于重新获取所述目标窗ロ的检测点的状态,并保存为检测点的结束状态。本发明基于安卓系统的待测应用自动测试方法及系统,由于多个待测应用和测试工具均使用同一个用户名、进程标识以及签名,因此当其中一个待测应用在测试过程中需要调用另一待测应用,则所有待测应用及测试工具在启动后处于同一进程中,那么测试エ具就有权限控制另ー待测应用。从而实现了在andriod手机端的跨应用自动化测试。使得基于andriod系统的自动化测试应用从单个应用的自动化测试发展到多应用同时测试,提高了自动化测试的覆盖率,节省人力资源。而且由于能跨应用测试,因此能设置更广的检测点检测范围,不再限于检测当前应用,也可检测多个应用的状态。由于测试应用和被测应用运行在同一进程,被测应用強制退出,会导致测试应用也崩溃,目前可以通过监控Instrumentaion输出流,异常情况下,PC端可以重启测试应用和被测应用。
图1为本发明基于安卓系统的待测应用自动测试方法的工作流程 图2为本发明基于安卓系统的待测应用自动测试方法的一个实施例的工作流程 图3为本发明基于安卓系统的待测应用自动测试方法的测试步骤的工作流程 图4为本发明基于安卓系统的待测应用自动测试方法的测试步骤的ー个实施例的エ作流程 图5为本发明基于安卓系统的待测应用自动测试系统的结构模块图。
具体实施例方式下面结合附图和具体实施例对本发明做进ー步详细的说明。如图1所示为本发明基于安卓系统的待测应用自动测试方法的工作流程图。一种基于安卓系统的待测应用自动测试方法,包括
步骤S101,对多个待测应用和测试工具分别进行反编译;
步骤S102,修改每个待测应用和测试工具,使得每个待测应用和测试工具的注册文件的进程參数相同;
步骤S103,将每个待测应用和测试工具各自编译成新的安装包;
步骤S104,对每个待测应用和测试工具给予相同签名;
步骤S105,通过测试工具启动待测应用程序,进行测试。
其中,所述进程參数为每个待测应用和测试工具的注册文件的用户名和进程标识,所述修改每个待测应用和测试工具,使得每个待测应用和测试工具的注册文件的进程參数相同具体包括
修改每个待测应用和测试工具的注册文件,使得每个待测应用和测试工具的注册文件的用户名相同;
修改每个待测应用和测试工具的注册文件,使得每个待测应用和测试工具的注册文件的进程标识相同。作为ー个例子,如图2所示
步骤S201,调用ApkTool工具将待测应用和测试工具分别反编译;
步骤S202,修改各个应用和测试工具的的AndroidMainifest文件,使其共享ー个Android:ShareUserId 和 Android:Process;
步骤S203,调用ApkTool将待测应用和测试工具各自编译成新的APK ;
步骤S204,调用Android签名工具对各个被测应用和测试工具给予相同签名;至此,被测应用和测试工具运行时将处于同一进程内。步骤S205,开启测试工具,通过测试工具启动被测应用,自动化测试开始。如图3所示为本发明基于安卓系统的待测应用自动测试方法的测试步骤的工作流程图包括
步骤S301,测试工具根据预设的测试用例获取第一待测应用的检测对象,执行步骤
5302;
步骤S302,对第一待测应用进行检索操作,获取所述待测对象的目标窗ロ,执行步骤
5303;
步骤S303,根据预设的待测对象的检测点,获取所述目标窗ロ的检测点的状态,并保存为检测点的初始状态,执行步骤S304 ;
步骤S304,根据预设的测试用例调用所述检测对象的操作步骤,执行步骤S305 ;
步骤S305,重新获取所述目标窗ロ的检测点的状态,并保存为检测点的结束状态。其中,如果测试步骤中需要调用第二待测应用,则调用第二待测应用,所述第二待测应用在第一待测应用的进程中启动。其中,获取所述待测对象的目标窗ロ具体如下
获取安卓系统框架层中的第一待测应用的窗ロ管理器,在其中一个实施例中,通过反射机制动态获得窗ロ管理器;
从所述窗ロ管理器中的获取第一待测应用的根窗ロ,在其中一个实施例中,通过反射机制动态获得根窗ロ;
获取所述根窗ロ所包括的所有子窗ロ,并生成包括有子窗ロ的识别參数的子窗ロ列
表;
获取目标窗ロ的标识參数;
根据目标窗ロ的识别參数匹配所述子窗ロ列表,得到目标窗ロ。作为ー个例子,如图4所示,包括
步骤S401,通过测试工具启动第一待测应用;
步骤S402,读取第一待测应用的测试用例步骤,根据测试用例步骤确定第一待测应用的检测对象;
步骤S403,在测试工具中通过java的反射机制动态的获取Android系统框架层的中android, view. WindowManagerImpl类,即当前应用的窗ロ管理器;
步骤S404,继续通过java的反射机制动态获取当前应用窗ロ管理器中的mViews数组,该数组中保存着当前Activity的根View,即DecorView ;
步骤S405,获取DecorView的所有子View,如果是View直接添加到列表中,如果是ViewGroup,递归查找并添加其所有的子View ;并过滤掉INVISIBLE及GONE属性的View,生成子窗ロ列表;
步骤S406,根据检测对象包括的View的Id或者text或Index在子窗ロ列表中匹配,从而识别目标View,获取目标View的检测点的状态,并保存为检测点的初始状态;
步骤S407,获取当前进程的Instrumentation对象,并调用其同步方法,等待UI线程处于空闲状态;
步骤S408,根据测试用例步骤调用Activity的相关方法,在Android的UI线程里对View的操作(如点击,输入);
步骤S409,如果测试用例需要调用第二待测应用,则启动第二待测应用,执行步骤S403,由于另一应用和测试工具以及待测应用使用同一个Android: ShareUserId和AndroidiProcess;以及签名,则启动后处于同一进程中,那么测试工具就有权限控制另ー应用;
步骤S410,对第一待测应用进行检索操作,查找对应view并操作,步骤同步骤S40TS408 ;
步骤S411,重新获取View的状态,确认检测点状态,收集测试结果,并保存为检测点的结束状态;
步骤S412,如果还有下一条用例则执行步骤S402,否则执行步骤S413 ;
步骤S413,测试结束。如图5所示为基于安卓系统的待测应用自动测试系统的结构模块图,包括
反编译模块501,用于对多个待测应用和测试工具分别进行反编译;
修改模块502,用于修改每个待测应用和测试工具,使得每个待测应用和测试工具的注册文件的进程參数相同;
编译模块503,用于将每个待测应用和测试工具各自编译成新的安装包;
签名模块504,用于对每个待测应用和测试工具给予相同签名;
测试模块505,用于通过测试工具启动待测应用程序,进行测试。其中,测试模块包括
主测试子模块,用于根据测试工具中预设的测试步骤对第一待测应用进行操作;
调用测试子模块,用于如果测试步骤中需要调用第二待测应用,则调用第二待测应用,所述第二待测应用在第一待测应用的进程中启动。主测试子模块,包括
检测对象获取单元,用于测试工具获取第一待测应用的检测对象;
目标窗ロ获取单元,用于对第一待测应用进行检索操作,获取所述待测对象的目标窗
n ; 检测点初始状态获取单元,用于根据预设的待测对象的检测点,获取所述目标窗ロ的检测点的状态,并保存为检测点的初始状态;
操作步骤调用単元,用于调用所述检测对象的同步方法;
检测点结束状态获取単元,用于重新获取所述目标窗ロ的检测点的状态,并保存为检测点的结束状态。本发明可在任意电脑(PC)连接到服务端,进行自动化测试控制,并且可选择自动化项目的模块进行测试,无需一次全运行,在程序中断出错后可以选择后续模块运行。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
权利要求
1.一种基于安卓系统的待测应用自动测试方法,步骤包括 对多个待测应用和测试工具分别进行反编译; 修改每个待测应用和测试工具,使得每个待测应用和测试工具的注册文件的进程参数相同; 将每个待测应用和测试工具各自编译成新的安装包; 对每个待测应用和测试工具给予相同签名; 通过测试工具启动待测应用程序,进行测试。
2.根据权利要求1所述的基于安卓系统的待测应用自动测试方法,其特征在于,所述进程参数为每个待测应用和测试工具的注册文件的用户名和进程标识,所述修改每个待测应用和测试工具,使得每个待测应用和测试工具的注册文件的进程参数相同具体包括 修改每个待测应用和测试工具的注册文件,使得每个待测应用和测试工具的注册文件的用户名相同; 修改每个待测应用和测试工具的注册文件,使得每个待测应用和测试工具的注册文件的进程标识相同。
3.根据权利要求1或2所述的基于安卓系统的待测应用自动测试方法,其特征在于,所述通过测试工具启动待测应用程序,进行测试,具体包括 根据测试工具中预设的测试步骤对第一待测应用进行操作; 如果测试步骤中需要调用第二待测应用,则调用第二待测应用,所述第二待测应用在第一待测应用的进程中启动。
4.根据权利要求3所述的基于安卓系统的待测应用自动测试方法,其特征在于,所述根据测试工具中预设的测试步骤对第一待测应用进行操作,具体包括 步骤(41),测试工具根据预设的测试用例获取第一待测应用的检测对象,执行步骤(42); 步骤(42),对第一待测应用进行检索操作,获取所述待测对象的目标窗口,执行步骤(43); 步骤(43),根据预设的待测对象的检测点,获取所述目标窗口的检测点的状态,并保存为检测点的初始状态,执行步骤(44); 步骤(44),根据预设的测试用例调用所述检测对象的操作步骤,执行步骤(45); 步骤(45),重新获取所述目标窗口的检测点的状态,并保存为检测点的结束状态。
5.根据权利要求4所述的基于安卓系统的待测应用自动测试方法,其特征在于,所述获取所述待测对象的目标窗口具体如下 获取安卓系统框架层中的第一待测应用的窗口管理器; 从所述窗口管理器中的获取第一待测应用的根窗口; 获取所述根窗口所包括的所有子窗口,并生成包括有子窗口的识别参数的子窗口列表; 获取目标窗口的标识参数; 根据目标窗口的识别参数匹配所述子窗口列表,得到目标窗口。
6.根据权利要求5所述的基于安卓系统的待测应用自动测试方法,其特征在于 所述获取安卓系统框架层中的第一待测应用的窗口管理器,通过反射机制动态获得;所述从所述窗口管理器中的获取第一待测应用的根窗口,通过反射机制动态获得。
7.一种基于安卓系统的待测应用自动测试系统,其特征在于,包括 反编译模块,用于对多个待测应用和测试工具分别进行反编译; 修改模块,用于修改每个待测应用和测试工具,使得每个待测应用和测试工具的注册文件的进程参数相同; 编译模块,用于将每个待测应用和测试工具各自编译成新的安装包; 签名模块,用于对每个待测应用和测试工具给予相同签名; 测试模块,用于通过测试工具启动待测应用程序,进行测试。
8.根据权利要求7所述的基于安卓系统的待测应用自动测试系统,其特征在于,所述进程参数为每个待测应用和测试工具的注册文件的用户名和进程标识,所述修改模块 修改每个待测应用和测试工具的注册文件,使得每个待测应用和测试工具的注册文件的用户名相同; 修改每个待测应用和测试工具的注册文件,使得每个待测应用和测试工具的注册文件的进程标识相同。
9.根据权利要求7所述的基于安卓系统的待测应用自动测系统,其特征在于,所述测试模块包括 主测试子模块,用于根据测试工具中预设的测试步骤对第一待测应用进行操作; 调用测试子模块,用于如果测试步骤中需要调用第二待测应用,则调用第二待测应用,所述第二待测应用在第一待测应用的进程中启动。
10.根据权利要求9所述的基于安卓系统的待测应用自动测试系统,其特征在于,所述主测试子模块,包括 检测对象获取单元,用于测试工具根据预设的测试用例获取第一待测应用的检测对象; 目标窗口获取单元,用于对第一待测应用进行检索操作,获取所述待测对象的目标窗Π ; 检测点初始状态获取单元,用于根据预设的待测对象的检测点,获取所述目标窗口的检测点的状态,并保存为检测点的初始状态; 操作步骤调用单元,用于根据预设的测试用例调用所述检测对象的操作步骤; 检测点结束状态获取单元,用于重新获取所述目标窗口的检测点的状态,并保存为检测点的结束状态。
全文摘要
本发明涉及基于安卓系统的测试技术领域,特别是涉及基于安卓系统的待测应用自动测试方法和系统,所述方法包括对多个待测应用和测试工具分别进行反编译;修改每个待测应用和测试工具,使得每个待测应用和测试工具的注册文件的进程参数相同;将每个待测应用和测试工具各自编译成新的安装包;对每个待测应用和测试工具给予相同签名;通过测试工具启动待测应用程序,进行测试。本发明实现了在andriod手机端的跨应用自动化测试,使得基于andriod系统的自动化测试应用从单个应用的自动化测试发展到多应用同时测试,提高了自动化测试的覆盖率,节省人力资源。
文档编号G06F11/36GK103019942SQ201210589438
公开日2013年4月3日 申请日期2012年12月31日 优先权日2012年12月31日
发明者曾元清, 陈勇 申请人:广东欧珀移动通信有限公司