一种对被测应用程序进行功能遍历的测试方法

文档序号:6548545阅读:171来源:国知局
一种对被测应用程序进行功能遍历的测试方法
【专利摘要】本发明的一种对被测应用程序进行功能遍历的测试方法,包括以下步骤:S1:测试客户端与被测设备端建立连接关系;S2:所述测试客户端启动所述被测设备端的被测应用程序;S3:所述测试客户端在执行过程中不断地获取所述被测设备端的所有界面上的所有控件元素的位置信息,并将获取的所有所述控件元素存储到相应的控件元素队列中;S4:逐个对所述控件元素队列中位于队首的控件元素进行点击出列操作,直到所述控件元素队列中的所有所述控件元素都被点击出列;S5:所述客户端启动所述手机端的新被测应用程序,跳转到步骤S3。该测试方法不要求对被测应用程序进行预处理操作,可以对无法获取apk文件的被测应用程序进行功能遍历。
【专利说明】一种对被测应用程序进行功能遍历的测试方法

【技术领域】
[0001] 本发明涉及一种对被测应用程序进行功能遍历的测试方法,属于测试【技术领域】。

【背景技术】
[0002] 测试工具Instrumentation是安卓系统的核心测试框架,在这个核心测试框架 下,测试应用程序可以精确控制被测应用程序。Instrumentation核心测试框架通过将测 试应用程序和主程序运行在同一个进程来实现对被测应用程序的控制,例如,使用测试工 具Instrumentation,可以在主程序启动之前,仓ij建模拟的系统对象,如Context ;控制应用 程序的多个生命周期;发送UI事件给应用程序;在执行期间检查程序状态。
[0003] 使用测试工具instrumentation对被测应用程序进行测试时要求测试应用程序 和被测应用程序的签名保持一致,由于应用开发商通常不提供自己应用程序的签名文件等 信息,所以一般的方法是将被测应用程序的apk文件(安装文件)进行解压缩,将apk文件 中的签名文件替换成与测试应用程序相同的签名文件后重新打包,经过这样预处理之后就 可以通过测试应用程序来对被测应用程序进行控制。
[0004] 现有的功能遍历技术是基于安卓系统提供的测试工具Instrumentation进行签 名测试来实现,主要步骤是在获取到被测应用程序的apk文件(Android Package,安卓安装 包)之后,使用上述的步骤对被测应用程序进行预处理,将被测应用程序的签名文件替换 成与测试客户端的测试应用程序相同的签名文件并重新打包,使测试应用程序获取对被测 应用程序进行操作的权限。
[0005] 因此,如果使用测试工具instrumentation基于签名测试的对被测应用程序进行 功能遍历的测试,需要首先对被测应用程序进行预处理获取到被测应用程序的apk文件, 对apk文件进行上述替换签名文件的预处理后才能进行测试。这种测试方法能够直接通 过安卓系统提供的API接口(Application Programming Interface,应用程序编程接口) 直接获取界面的信息并进行功能遍历,省去了对原始界面信息进行分析的操作,但是,一方 面,该方法要求每次功能遍历的测试需要获取被测应用程序的apk文件,只能测试能获取 到apk文件的被测应用程序,对于无法获取apk文件的被测应用程序,例如从PC端对手机 端执行adb install命令将应用程序安装在手机中,通过这种方式安装到手机中的应用程 序不能在手机中获得apk文件,则无法进行功能遍历测试。


【发明内容】

[0006] 本发明所要解决的技术问题是现有的功能遍历技术对于无法获取apk文件的被 测应用程序无法进行功能遍历测试的问题,从而提供一种对被测应用程序进行功能遍历的 测试方法。
[0007] 为解决上述技术问题,本发明是通过以下技术方案实现的: 一种对被测应用程序进行功能遍历的测试方法,包括以下步骤: S1 :测试客户端与被测设备端建立连接关系; 52 :所述测试客户端启动所述被测设备端的被测应用程序; 53 :所述测试客户端在执行过程中不断地获取所述被测设备端的所有界面上的所有控 件元素的位置信息,并将获取的所有所述控件元素存储到相应的控件元素队列中; 54 :逐个对所述控件元素队列中位于队首的控件元素进行点击出列操作,直到所述控 件元素队列中的所有所述控件元素都被点击出列; 55 :所述客户端启动所述手机端的新被测应用程序,跳转到步骤S3。
[0008] 所述的测试方法,所述步骤S3中,将所述被测设备端的每一个所述界面存储到界 面队列中,将每个所述界面中的所有控件元素存储到每个所述界面对应的界面控件元素队 列中。
[0009] 所述的测试方法,所述步骤S4中,进一步包括: 541 :查找所述界面队列中位于队首的界面; 542 :逐个对所述界面队列中位于队首的界面对应的所述界面控件元素队列的位于队 首的控件元素进行点击出列操作,直到所述界面控件元素队列中的所有所述控件元素都被 点击出列,所述界面控件元素队列中的所有所述控件元素都被点击出列后,所述界面队列 中位于队首的所述界面出列; S43:所述客户端结束掉前功能遍历的操作路径并关闭所述被测应用程序进程。
[0010] 所述的测试方法,还进一步包括在遍历被测应用程序时输出每一步操作结果的步 骤。
[0011] 所述的测试方法,被测设备端为安卓智能手机。
[0012] 所述的测试方法,所述步骤S1进一步包括如下步骤: 511 :启动手机端的viewserver ; 512 :pc端与所述手机端的viewserver建立socket连接。
[0013] 所述的测试方法,所述步骤S3中, 531 :所述pc端通过所述socket连接向所述手机端的viewserver发送dump命令; 532 :所述手机端以类似json的格式将所述手机界面信息以字符流的形式发送给所述 pc端; S33:所述pc端对获取的以字符流的形式存在的所述手机界面信息进行解析,得到所 述手机端的所述手机界面信息,所述手机界面信息包括所述控件元素的位置信息。
[0014] 所述的测试方法,所述PC端使用monkey对所述当前手机界面的所述控件元素进 行触发操作。
[0015] 本发明的上述技术方案相比现有技术具有以下优点: (1)本发明的一种对被测应用程序进行功能遍历的测试方法,包括以下步骤:S1 :测试 客户端与被测设备端建立连接关系;S2 :所述测试客户端启动所述被测设备端的被测应用 程序;S3 :所述测试客户端在执行过程中不断地获取所述被测设备端的所有界面上的所有 控件元素的位置信息,并将获取的所有所述控件元素存储到相应的控件元素队列中;S4 : 逐个对所述控件元素队列中位于队首的控件元素进行点击出列操作,直到所述控件元素队 列中的所有所述控件元素都被点击出列;S5 :所述客户端启动所述手机端的新被测应用程 序,跳转到步骤S3。该测试方法不要求对被测应用程序进行预处理操作,可以对无法获取 apk文件的被测应用程序进行功能遍历;由于不用对被测应用程序进行任何预处理操作, 最大限度地保证了不会对被测应用程序产生影响。
[0016] (2)本发明所述的对被测应用程序进行功能遍历的测试方法,所述步骤S3中将所 述被测设备端的每一个所述界面存储到界面队列中,将每个所述界面中的所有控件元素存 储到每个所述界面对应的界面控件元素队列中;每个界面中的所有控件元素构成界面控件 元素队列,对被测应用程序采用分界面、分队列的方法,对不需要点击操作的控件元素不进 行点击操作,加快遍历速度。
[0017] (3)本发明所述的对被测应用程序进行功能遍历的测试方法,在所述被测应用程 序进行功能遍历时输出每一步遍历操作,使测试人员可以通过查看输出结果检查对被测应 用程序的所有遍历操作并可以发现被测应用程序的漏洞进行后续处理。

【专利附图】

【附图说明】
[0018] 为了使本发明的内容更容易被清楚的理解,下面结合附图,对本发明作进一步详 细的说明,其中, 图1是本发明所述一种对被测应用程序进行功能遍历的测试方法一个实施例的流程 图; 图2是本发明所述一种对被测应用程序进行功能遍历的测试方法的另一个实施例的 流程图。

【具体实施方式】
[0019] 实施例1 : 本发明所述的一种对被测应用程序进行功能遍历的测试方法,如图1所示,其包括以 下步骤: 51 :测试客户端与被测设备端建立连接关系; 52 :所述测试客户端启动所述被测设备端的被测应用程序; S3:所述测试客户端在执行过程中不断地获取所述被测设备端的所有界面上的所有控 件元素的位置信息,并将获取的所有所述控件元素存储到控件元素队列中; S4:逐个对所述控件元素队列中位于队首的控件元素进行点击出列操作,直到所述控 件元素队列中的所有所述控件元素都被点击出列; S5 :所述客户端启动所述手机端的新被测应用程序,跳转到步骤S3。
[0020] 本实施例中,将所有界面上的控件元素统一存储在一个控件元素队列中,对所述 控件元素队列中位于队首的控件元素进行点击操作,位于队首的所述控件元素在点击操作 后出列,然后对下一个所述控件元素队列中位于队首的控件元素进行点击操作,下一个位 于队首的所述控件元素在点击操作后出列,如此继续点击所述控件元素队列中位于队首的 控件元素,直到所述控件元素队列中的所有所述控件元素都被点击出列,完成对一个被测 应用程序的功能遍历。这种测试方法不要求对被测应用程序进行预处理操作,可以对无法 获取apk文件的被测应用程序进行功能遍历。
[0021] 作为其他实施方式,所述步骤S3中,将所述被测设备端的每一个所述界面存储到 界面队列中,将每个所述界面中的所有控件元素存储到每个所述界面对应的界面控件元素 队列中;所述步骤S4中,进一步包括 : 541 :查找所述界面队列中位于队首的界面; 542 :逐个对所述界面队列中位于队首的界面对应的所述界面控件元素队列的位于队 首的控件元素进行点击出列操作,直到所述界面控件元素队列中的所有所述控件元素都被 点击出列,所述界面控件元素队列中的所有所述控件元素都被点击出列后,所述界面队列 中位于队首的所述界面出列; 543 :所述客户端结束掉前功能遍历的操作路径并关闭所述被测应用程序进程。
[0022] 这种测试方法将每个界面存储到所述界面队列中,将每个所述界面中的所有控件 元素存储到每个所述界面对应的界面控件元素队列中,对被测应用程序分界面进行控件点 击:查找所述界面队列中位于队首的界面和所述界面队列中位于队首的界面对应的所述界 面控件元素队列,对所述界面队列中位于队首的界面对应的所述界面控件元素队列中的所 有控件元素逐个进行点击出列操作,所述界面队列中位于队首的界面对应的所述界面控件 元素队列中的所有所述控件元素都被点击出列后,所述界面队列中位于队首的所述界面出 列,对下一个位于队首的所述界面对应的所述界面控件元素队列进行上述操作,直至所述 界面队列中的所有界面都出列,所述客户端结束掉前功能遍历的操作路径并关闭所述被测 应用程序进程。
[0023] 在实际测试过程中,被测应用程序会出现下述异常情况: (1)、查找所述界面队列中位于队首的界面a,界面a对应的界面控件元素队列中位于 队首的控件元素点击后出列,本应该继续点击界面a对应的界面控件元素队列中下一个位 于队首的控件元素,但所述被测应用程序出现异常导致跳转失败,结果从界面a跳转到界 面b,导致对界面b对应的界面控件元素队列中位于队首的控件元素进行点击操作。
[0024] (2)、在点击所述控件元素时检测到异常,这时,会结束被测应用进程,启动下一个 被测应用程序,对下一个被测应用程序进行功能遍历。
[0025] 参见图2所示,启动被测应用程序,由于该应用在功能遍历过程中会由于异常退 出,所以先查看所述被测应用程序是否为第一次进入该被测应用程序,如果是第一次进入 该被测应用程序,获取当前界面控件元素并将所述当前界面控件元素的编号存储到当前界 面控件元素队列中,从所述当前界面控件元素队列取出队首元素,点击队首元素对应的控 件元素,该队首元素对应的控件元素在点击后出列,如果没有异常,重新跳转到当前界面, 对下一个队首元素对应的控件元素进行点击;但跳转后的界面会由于跳转失败导致跳转不 到当前界面,所以,判断跳转后的当前界面是否访问过,如果跳转后的界面没有访问过,重 新获取新的当前界面控件元素并将新的所述当前界面控件元素的编号存储到新的当前界 面控件元素队列中,执行上述操作。如果有异常,会结束被测应用进程,启动下一个被测应 用程序,对下一个被测应用程序进行功能遍历。
[0026] 如果进入下一个被测应用程序后,发现下一个被测应用程序不是第一次进入应 用,寻找界面队列的队首元素,判断队首元素对应的界面是否访问过,如果该界面没有访问 过,获取队首元素对应的界面的控件元素并将队首元素对应的界面的所有控件元素的编号 存储到队首元素对应的界面的界面控件元素队列中,执行上述操作。
[0027] 本实施例中,被测设备端为安卓智能手机,对所述安卓智能手机的应用程序进行 功能遍历的测试方法,ViewServer是Android智能手机通过4939端口提供的服务,测试 客户端启动Android客户端的viewserver,通过命令adb shell service call window对所 述Android客户端的viewserver进行开启和关闭;在启动Android客户端的ViewServer 服务之后,测试客户端与所述Android客户端的ViewServer建立socket连接;在建 立起 socket 连接之后,通过命令 adb shell am start-n breakan. test/breakan. test. TestActivityidong启动被测应用程序,在测试客户端通过所述socket (通常也称作"套接 字",用于描述IP地址和端口,是一个通信链的句柄)连接向Android客户端发送dump命 令(将具备可读格式的数据从一个储存体复制到外部),Android客户端会以类似json的 格式将当前界面信息以字符流的形式返回给pc端,然后测试客户端对获取的界面信息进 行解析,获取要进行操作的界面元素的位置信息,使用monkey (monkey是安卓平台自动化 测试的一种手段,通过monkey模拟的操作来对设备上的程序进行压力测试,检测程序多久 的时间会发生异常)点击界面控件元素队列中位于队首的控件元素的位置达到操作手机 的目的。在通过monkey点击完界面上的一个控件元素之后,测试客户端会通过SPFA算法再 次向viewserver请求当前界面的信息,判断是否到达了新界面后,获取下一个要点击的控 件元素的位置信息并通过monkey进行点击,如此反复操作直到遍历到当前界面的所有控 件元素都被点击过,测试客户端会结束掉当前功能遍历的操作路径并结束被测应用程序进 程。然后测试客户端会重新启动被测应用并且沿着之前没有操作过的遍历路径进行遍历, 直到测试客户端发现被测应用程序没有需要被遍历的路径,结束本被测应用程序的功能遍 历。
[0028] 作为其他实施方式,测试客户端可以通过其他算法再次向viewserver请求当前 界面的信息,例如弗洛伊德算法。
[0029] 实施例2 : 在上述实施例1的基础上,所述测试方法还进一步包括在所述被测应用程序进行功能 遍历时输出每一步遍历操作的步骤。 本实施例中,该测试方法会在遍历被测应用程序的同时对每一步遍历操作进行截图并 在遍历操作的所述控件元素上用方框标识,然后在遍历操作结束生成的报告中用视频短片 的形式播放该遍历操作的所有截图,使测试人员可以通过观看视频的形式检查对应用的所 有遍历操作并发现被测应用的漏洞,进一步进行后续处理。 显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于 所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变 动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变 动仍处于本发明创造的保护范围之中。
【权利要求】
1. 一种对被测应用程序进行功能遍历的测试方法,其特征在于,包括以下步骤: 51 :测试客户端与被测设备端建立连接关系; 52 :所述测试客户端启动所述被测设备端的被测应用程序; 53 :所述测试客户端在执行过程中不断地获取所述被测设备端的所有界面上的所有控 件元素的位置信息,并将获取的所有所述控件元素存储到相应的控件元素队列中; 54 :逐个对所述控件元素队列中位于队首的控件元素进行点击出列操作,直到所述控 件元素队列中的所有所述控件元素都被点击出列; 55 :所述客户端启动所述手机端的新被测应用程序,跳转到步骤S3。
2. 根据权利要求1所述的测试方法,其特征在于,所述步骤S3中,将所述被测设备端的 每一个所述界面存储到界面队列中,将每个所述界面中的所有控件元素存储到每个所述界 面对应的界面控件元素队列中。
3. 根据权利要求2所述的测试方法,其特征在于,所述步骤S4中,进一步包括: 541 :查找所述界面队列中位于队首的界面; 542 :逐个对所述界面队列中位于队首的界面对应的所述界面控件元素队列的位于队 首的控件元素进行点击出列操作,直到所述界面控件元素队列中的所有所述控件元素都被 点击出列,所述界面控件元素队列中的所有所述控件元素都被点击出列后,所述界面队列 中位于队首的所述界面出列; 543 :所述客户端结束掉前功能遍历的操作路径并关闭所述被测应用程序进程。
4. 根据权利要求1-3任一所述的测试方法,其特征在于,还进一步包括在遍历被测应 用程序时输出每一步操作结果的步骤。
5. 根据权利要求1-4任一所述的测试方法,其特征在于,被测设备端为安卓智能手机。
6. 根据权利要求3-5任一所述的测试方法,其特征在于,所述步骤S1进一步包括如下 步骤: 511 :启动手机端的viewserver ; 512 :pc端与所述手机端的viewserver建立socket连接。
7. 根据权利要求6所述的测试方法,其特征在于,所述步骤S3中, 531 :所述pc端通过所述socket连接向所述手机端的viewserver发送dump命令; 532 :所述手机端以类似json的格式将所述手机界面信息以字符流的形式发送给所述 pc端; S33:所述pc端对获取的以字符流的形式存在的所述手机界面信息进行解析,得到所 述手机端的所述手机界面信息,所述手机界面信息包括所述控件元素的位置信息。
8. 根据权利要求3-7任一所述的测试方法,其特征在于,所述pc端使用monkey对所述 当前手机界面的所述控件元素进行触发操作。
【文档编号】G06F11/36GK104216828SQ201410242761
【公开日】2014年12月17日 申请日期:2014年6月3日 优先权日:2013年6月3日
【发明者】刘伟, 赵颂东 申请人:刘伟, 赵颂东
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1