终端老化测试方法、装置、设备及存储介质与流程

文档序号:28961636发布日期:2022-02-19 13:18阅读:233来源:国知局
终端老化测试方法、装置、设备及存储介质与流程

1.本发明一般涉及终端技术领域,具体涉及一种终端老化测试方法、装置、设备及存储介质。


背景技术:

2.随着科技的进步和计算机技术的不断发展,智能手机等终端设备已经得到了大规模的普及应用,为了保证出厂的终端设备具备系统稳定性,使得各大厂商更好的将终端设备投入使用,在移动终端的研发过程中,对终端设备进行老化测试显得尤为重要。
3.目前,现有的终端老化测试是采用谷歌提供的命令行工具monkey测试,通过运行在终端设备中的测试程序以生成随机的伪输入事件来测试应用程序或终端设备的兼容性和稳定性,该伪操作事件例如可以为点击操作、触摸操作或者滑动操作等。
4.然而,上述老化测试方法仅仅是通过输入一定数量的伪输入事件来切换点击的应用和页面,其测试范围十分有限,不能全面有效地对所有的应用程序进行测试,导致经过monkey测试后的版本仍然存在大量隐藏的问题,从而降低了终端的生产出厂效率。


技术实现要素:

5.鉴基于此,有必要针对上述技术问题,提供一种能够全面且有效地对所有应用界面进行测试的终端老化测试方法、装置、设备及存储介质。
6.第一方面,本技术实施例提供了一种终端老化测试方法,该方法包括:
7.获取测试脚本;
8.运行测试脚本,以获取待测试设备中所有应用的应用程序包;
9.对每个应用程序包进行解析,生成待测试任务栈列表,待测试任务栈列表包括所述待测试设备中的至少一个应用,每个应用包括至少一个应用界面;
10.对待测试任务栈列表中的每个应用界面进行测试,得到测试结果并显示。
11.在一个实施例中,对每个应用程序包进行解析,生成待测试任务栈列表,包括:
12.响应于接收到的触发解析指令,获取每个应用程序包中的清单文件;
13.对清单文件进行解析,获取应用程序包中每个应用界面对应的包名和类名;
14.基于每个应用界面的包名和类名,确定待测试任务栈列表。
15.在一个实施例中,对待测试任务栈列表中的每个应用界面进行测试,包括:
16.以预设的第一时间间隔从待测试任务栈列表中获取待测试应用界面;
17.按照预先配置的伪随机事件操作参数,对待测试应用界面执行测试操作,直至待测试任务栈列表中的所有应用界面测试完成。
18.在一个实施例中,对待测试应用界面执行测试操作,包括:
19.获取待测试应用界面的包名和类名;
20.基于待测试应用界面的包名和类名,生成触发界面启动指令;
21.响应于触发界面启动指令,生成待测试应用界面对应的伪随机事件,以使得在待
测试应用界面执行伪随机事件。
22.在一个实施例中,方法还包括:
23.在测试启动时开始计时,实时获取当前时长;
24.若检测到当前时长达到预设测试时长时,确定所有应用界面测试完成,预设测试时长大于或等于测试待测试任务栈列表中的的所有应用界面所用的时长。
25.在一个实施例中,对待测试任务栈列表中的的每个应用界面进行测试,包括:
26.响应于接收到的触发获取指令,以预设的第二时间间隔获取当前运行应用的包名、类名和进程号;
27.基于当前运行应用的包名、类名和进程号,获取当前运行应用的内存占用信息;
28.将内存占用信息与预设阈值进行比对,得到比对结果;
29.若比对结果指示内存占用信息大于预设阈值时,确定当前运行应用发生内存泄漏。
30.在一个实施例中,在确定当前运行应用发生内存泄漏后,方法还包括:
31.获取当前运行应用的内存占用文件,存储至内存泄漏应用日志文件;
32.基于内存泄漏应用日志文件中的包名和进程号,生成历史内存记录;
33.对历史内存记录进行分析,生成内存曲线。
34.第二方面,本技术实施例提供了一种终端老化测试装置,该装置包括:
35.第一获取模块,用于获取测试脚本;
36.第二获取模块,用于运行测试脚本,以获取待测试设备中所有应用的应用程序包;
37.解析模块,用于对每个应用程序包进行解析,生成待测试任务栈列表,待测试任务栈列表包括所述待测试设备中的至少一个应用,每个应用包括至少一个应用界面;
38.测试模块,用于对待测试任务栈列表中的每个应用界面进行测试,得到测试结果并显示。
39.第三方面,本技术实施例提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现本技术任意实施例所提供的终端老化测试方法的步骤。
40.第四方面,本技术实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本技术任意实施例所提供的终端老化测试方法的步骤。
41.本技术实施例提供的终端老化测试方法、装置、设备及存储介质,通过获取测试脚本,并运行测试脚本,以获取待测试设备中所有应用的应用程序包,然后对每个应用程序包进行解析,生成待测试任务栈列表,该待测试任务栈列表中包括待测试设备中的至少一个应用,每个应用包括至少一个应用界面,并对待测试任务栈列表中的每个应用界面进行测试,得到测试结果并显示。该方法能够获取待测试设备中所有应用的应用程序包,从而自动生成待测试任务栈列表,进而遍历每个应用的每个界面,全面且有效地对实现对所有应用界面的测试,极大地提高了终端设备的生产出厂效率,增加了终端设备的生产产能。
附图说明
42.通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本技术的其它
特征、目的和优点将会变得更明显:
43.图1为本技术一个实施例中终端老化测试方法的应用场景图;
44.图2为本技术一个实施例提供的终端老化测试方法的流程示意图;
45.图3为本技术一个实施例提供的终端老化测试的界面示意图;
46.图4为本技术另一个实施例提供的对每个应用界面进行测试的流程示意图;
47.图5为本技术实施例提供的对当前运行应用进行内存泄漏检测方法的流程示意图;
48.图6为本技术实施例提供的终端老化测试装置的结构示意图;
49.图7为本技术另一实施例提供的终端老化测试装置的结构示意图;
50.图8为本技术实施例提供的一种计算机设备的结构示意图。
具体实施方式
51.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图和实施例,对本技术作进一步的详细说明。应当理解的是,此处所描述的具体实施例仅仅用于解释本技术,并不用于限定本技术。另外还需要说明的是,为了便于描述,附图中仅示出了与发明相关的部分。
52.需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本技术。为了便于理解,下面对本技术实施例涉及的一些技术术语进行解释:
53.android应用程序包:(android application package,简称apk)是android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件。一个android应用程序的代码要想在android设备上运行,必须先进行编译,然后被打包成为一个被android系统所能识别的文件才可以被运行,而中各种被android系统识别并运行的文件格式便是“apk”。
54.manifest文件:每个apk都有一个android manifest.xml的清单文件,用于描述该应用程序的名字、版本号、所需权限、注册的服务、链接的其它应用程序等。
55.monkey测试:是谷歌提供的测试稳定性的命令行工具,用于测试应用程序的稳定性,以及应用程序和终端设备的兼容性和稳定性;通过运行在终端设备中的测试程序以生成随机的伪输入事件,如点击操作、触摸操作或者滑动等操作,以发现系统中的bug。
56.可以理解,随着终端设备的智能化程度增加,其在人们的日程生活中的应用越来越普及。终端设备作为一种智能化的设备,为保障用户体验,需要在终端设备出厂投入使用之前,对安装在终端设备中的应用进行老化测试,以及时发现其中的问题,只有将老化测试的得分被控制在某一个很小的范围内,才能达到终端设备发货的评审标准。
57.目前,现有的终端设备老化测试方法是采用谷歌提供的命令行工具monkey测试,通过运行在终端设备中的测试程序以生成随机的伪输入事件来测试应用程序或终端设备的兼容性和稳定性,该伪操作事件例如可以为点击操作、触摸操作或者滑动操作等。然而该方法仅仅是通过输入一定数量的伪输入事件来切换点击的应用和页面,其测试范围十分有限,不能全面有效地对所有的应用程序进行测试,导致经过monkey测试后的版本仍然存在大量隐藏的问题,从而降低了终端的生产出厂效率。
58.基于上述缺陷,本技术提供了一种终端老化测试方法,与现有技术相比,该方法能够获取系统中所有应用的应用程序包,从而自动生成待测试任务栈列表,进而遍历每个应用的每个界面,全面且有效地对实现对所有应用界面的测试,极大地提高了终端设备的生产出厂效率,增加了终端设备的生产产能。
59.图1是本技术实施例提供的终端老化测试方法的实施环境结构图。如图1所示,该实施环境结构包括:待测试设备100和测试终端200。
60.上述待测试设备100可以独立实现对应用程序的测试,也可以与计算测试终端200配合实现对待测试设备中应用程序的测试。
61.可选的,上述待测试设备100可以是安装有操作系统的移动终端设备或固定终端设备,该移动终端设备可以是智能手机、平板电脑、掌上游戏机、游戏控制台、数字广播接收器、笔记本电脑、pda(个人数字助理)、pmp(便携式多媒体播放器)、导航装置等,该固定终端设备可以是台式计算机、智能家电等设备,智能家电如智能电视等。本技术实施例中对操作系统的类型不做限定,例如可以是包括安卓(android)操作系统、窗口(windows)操作系统以及苹果(ios)操作系统等。其中,上述终端设备已安装应用程序,该应用程序可以是购物应用(application,app)、游戏app、打车app或者是计算机app等。
62.上述测试终端200可以是笔记本电脑、台式计算机等,用于通过加载运行测试脚本实现对待测试设备中应用程序的测试。
63.待测试设备100与测试终端200之间可以通过有线或无线网络建立通信连接。可选的,上述的无线网络或有线网络使用标准通信技术和/或协议。网络通常为因特网、但也可以是任何网络,包括但不限于局域网(local area network,lan)、城域网(metropolitan area network,man)、广域网(wide area network,wan)、移动、有线或者无线网络、专用网络或者虚拟专用网络的任何组合。
64.为了便于理解和说明,下面通过图2至图8详细阐述本技术实施例提供的终端老化测试方法、装置、设备及存储介质。
65.图2所示为本技术实施例提供的终端老化测试方法的流程示意图,该方法应用于测试终端,如图2所示,该方法包括:
66.s101、获取测试脚本。
67.需要说明的是,在对待测试设备进行老化测试处理之前,可以是程序测试人员根据测试逻辑预先编译好测试脚本。该测试脚本可以是编译好的机器可识别的二进制文件。其中,该测试脚本中配置有对测试终端设备中应用进行老化测试的运行逻辑。当待测试设备中配置有android操作系统时,该测试脚本例如可以是monkey测试脚本。
68.可选的,上述测试脚本可以是从待测试设备中直接获取,也可以是通过外接设备导入获取。
69.s102、运行测试脚本,以获取待测试设备中所有应用的应用程序包。
70.需要说明的是,待测试设备的系统中可以预先安装有多个应用,每个应用有对应的应用程序包,每个应用的应用程序包具有对应的包名,用于唯一表示该应用程序包的身份标识,该应用程序包可以预先存储在待测试设备中的系统目录中。
71.具体地,当测试人员需要对待测试设备中的应用进行老化测试时,可以先建立待测试设备与测试终端之间的通信连接,使得测试终端获取到测试脚本,在获取到测试脚本
后,控制运行该测试脚本,对相关测试信息进行设置,以显示对应的界面示意图,该界面上包括进行老化测试的相关测试信息。其中,相关测试信息可以包括机型、imei号、测试时长、测试类型、事件间隔、测试时长、日志种类等。其中,本实施例中,老化测试类型可以包括整机测试、依次测试、单包测试、多包测试中的一种或多种,日志种类包括但不限于logcat日志、kernel日志、radio日志中的一种或多种,图3为示例的包括部分相关测试信息的界面示意图,该图示中的测试类型包括整机测试和单包测试。
72.其中,上述机型为待测试设备对应的机型,上述imei(international mobile equipment identity number)号为国际移动设备标识码,为待测试设备对应的设备标识,用于唯一表示该待测试设备的身份标识,属于电子串号,例如待测试设备为手机时,该imei号为手机序列号。上述测试时长是指对待测试设备在预设的时间段内执行老化测试,当时间超过该预设时长,则测试终止,该测试时长可以是测试人员根据终端设备的实际需求自定义设置的,该测试时长可以大于或等于测试所有应用界面所用的时长,例如可以是100小时。上述事件间隔可以是对应用界面执行两次伪随机事件之间的间隔时间,该事件间隔可以是测试人员根据实际测试需求自定义设置,例如可以为500ms。
73.测试终端在对相关测试信息配置完后,可以通过用户在测试终端上输入对应的运行指令,该运行指令例如可以是adb命令,使得测试终端响应于用户输入的运行指令,以获取待测试设备中所有应用的应用程序包,该应用程序包可以是apk。其中,一个apk文件内包含被编译的代码文件(.dex文件),文件资源(resources),原生资源文件(assets),证书(certificates)和清单文件(manifest file)。
74.示例性地,待测试设备指定了应用对应的应用程序包且存储在该目录system/app;system/myperload_app中,可以通过在测试终端中运行指令以获取所有应用的应用程序包,该指令例如可以是:adb pull system/app/d:/testapp/;adb pull system/myperload_app/d:/testapp/,从而将所有应用app的应用程序包全部导入至测试终端中的d:/testapp/目录。
75.s103、对每个应用程序包进行解析,生成待测试任务栈列表,待测试任务栈列表包括至少一个应用,每个应用包括至少一个应用界面。
76.其中,该待测试设备中例如安装有android系统中,在android系统中,每个应用都有自己的activity任务栈,该activity任务栈为对应的应用界面。
77.具体地,测试终端在获取到待测试设备中所有应用的应用程序包后,用户可以在测试终端上输入对应的触发解析指令,该触发解析指令可以是adb命令,从而使得测试终端接收到该触发解析指令,并响应于该触发解析指令,获取每个应用程序包中的清单文件manifest。其中,每个应用程序包中对应有一个清单文件manifest,该请单文件中可以包括应用的应用程序包名、应用的组件、应用为访问系统或其他应用的受保护部分所需的权限、应用需要的硬件和软件功能等。其中,应用的组件可以包括所有activity任务栈、服务、广播接收器和内容提供程序。该activity任务栈对应有类名,用于作为应用界面的唯一界面标识。每个清单文件manifest可以包括至少一个应用界面。
78.测试终端在获取到每个应用程序包中的清单文件manifest后,然后对清单文件manifest进行解析,获取清单文件manifest中的activity任务栈,进而获取到应用程序包中每个应用界面对应的包名和类名,然后基于每个应用界面的包名和类名,生成待测试
activity任务栈列表。该待测试任务栈列表中包括至少一个应用,每个应用包括至少一个应用界面。
79.示例性地,例如获取到的应用程序包为存储在测试终端本地d盘中的aaa应用程序包,以d:/testapp/aaa.apk为例,然后在测试终端通过用户输入的adb命令解析每个应用的manifest文件,该adb命令可以是aapt dump badging d:/testapp/aaa.apk,从而使得测试终端响应于该指令,解析aaa.apk的manifest文件,然后从manifest文件中查找activity,得到manifest中声明的应用程序包的包名和activity对应的类名,并根据manifest中声明的包名和activity对应的类名,组合成一个待测试的activity任务栈,记录到待测试的activity任务栈列表中,从而生成待测试任务栈列表。
80.本实施例中通过获取待测试设备中每个应用程序包中的清单文件,保证了应用中的每个应用界面均被包含在待测试列表中,从而能够全面地对所有的应用界面进行测试,提高了应用的测试覆盖率。
81.s104、对待测试任务栈列表中的的每个应用界面进行测试,得到测试结果并显示。
82.具体地,测试终端在对每个应用程序包进行解析,生成待测试任务栈列表后,可以配置monkey测试中的伪随机事件操作参数,该操作参数可以包括:针对每个应用界面的执行伪随机事件数量、伪随机事件类型、执行伪随机事件的间隔、执行伪随机事件的总数、执行测试时忽略无响应、忽略crash、忽略安全异常等。
83.示例性地,在配置monkey测试中的伪随机事件操作参数时,可以输入对应的monkey命令:adb z-shell monkey
‑‑
throttle 300
‑‑
ignore-crashes
‑‑
ignore-timeouts
‑‑
ignore-security-exceptions
84.‑‑
ignore-native-crashes
‑‑
monitor-native-crashes-v-v-v 50000》monkeylog.txt。其中,该monkey命令中声明的是:两个伪随机事件之间的时间间隔是300ms,忽略crash,忽略无响应,忽略安全异常,测试次数为50000次,测试的log写入到monkeylog.txt。
85.可选的,上述伪随机事件类型可以为点击操作、触摸操作或滑动操作等,本技术实施例对此不做任何限定。
86.本步骤中由于预先配置了在伪随机事件操作参数,能够使得在执行测试应用的过程中,当遇到无响应、crash、安全异常等问题时,老化测试不会停止,而是把发生异常的log日志及时间点进行实时记录,便于供研发人员分析。
87.在对待测试任务栈列表中的每个应用界面进行测试时,可以依次对待测试任务栈列表中的每个应用界面进行测试,也可以从待测试任务栈列表中随机选择待测试的应用界面进行测试。
88.可选的,作为一种可实现方式,图4为本技术实施例提供的对待测试任务栈列表中的每个应用界面进行测试方法的流程示意图,如图4所示,该方法包括:
89.s201、以预设的第一时间间隔从待测试任务栈列表中获取待测试应用界面。
90.s202、按照预先配置的伪随机事件操作参数,对待测试应用界面执行测试操作,直至待测试任务栈列表中的所有应用界面测试完成。
91.具体地,测试终端在对每个应用界面进行monkey测试时,可以是以预设的第一时间间隔从待测试任务栈列表中获取待测试应用界面,该预设的第一时间间隔可以是测试人
员根据实际需求自定义设置,例如可以是30s,即每隔30s从待测试任务栈列表中获取下一个待测试应用界面,然后按照预先配置的伪随机事件操作参数,对待测试应用界面执行测试操作,直至待测试任务栈列表中的所有应用界面测试完成。
92.本实施例中由于以预设的第一时间间隔从待测试的任务栈列表中获取待测试的应用界面,从而能够实时切换对下一个应用界面的测试,避免一直对某个应用界面进行测试,使得其他应用界面测试不到的情况发生,保证更加全面地对每个应用界面进行测试。
93.其中,测试终端在对待测试应用界面执行指定测试操作时,可以先获取待测试应用界面的包名和类名,然后基于待测试应用界面的包名和类名,生成触发界面启动指令,其中,该触发界面启动指令可以是adb指令,可以通过monkey测试的测试脚本和待测试应用界面的包名和类名进行拼接处理得到,并响应于触发界面启动指令,能够拉起对应的待测试应用界面,并生成待测试应用界面对应的伪随机事件,然后按照预先配置的伪随机事件操作参数,以在该待测试应用界面执行伪随机事件,从而生成对应的测试结果,并将该测试结果进行显示。
94.其中,该测试结果可以是几个应用发生异常、发生异常的应用的应用程序包对应的包名、发生异常的类型、发生异常的时间点、发生了多少次异常等。该发生异常的类型可以是应用无响应、应用crash、终端设备发生重启等。
95.需要说明的是,在对该待测试应用界面执行伪随机事件的过程中,可以是通过在待测试应用界面上模拟用户的点击操作、触摸操作或滑动操作等操作行为,以对该应用界面进行稳定性测试。
96.本实施例中通过生成触发界面启动指令,能够实时拉起待测试的应用界面,从而能够对该待测试应用界面执行伪随机事件,以实现对该待测试应用界面的测试,进而保证更加全面且有效地对应用的每个应用界面进行测试。
97.示例性地,例如测试终端从待测试任务栈列表中获取的待测试应用为aaa,对应的应用程序包为aaa.apk为例,假设应用程序包对应的包名是com.android.aabb,应用界面activity界面的类名是aaaa,则根据该类名和包名生成触发界面启动指令,该触发界面启动指令为adb指令,用于拉起对应的应用界面,例如adb指令为:adb shell am start

n com.android.aabb/.aaaa),然后拉起对应的待测试应用界面,生成待测试应用界面对应的伪随机事件,并在该待测试应用界面执行点击、触摸、滑动等类型的伪随机事件,从而实现了对当前的待测试应用页面的测试操作。然后当间隔了第一时间间隔后,从待测试任务栈列表中获取下一应用界面,并获取该下一应用界面的包名和类名,然后基于下一应用界面的包名和类名,生成该下一应用界面对应的触发界面启动指令,然后响应于触发界面启动指令,拉起对应的下一应用界面,生成该下一应用界面对应的伪随机事件,并在该下一应用界面执行点击、触摸、滑动等伪随机事件,从而实现对该下一应用界面的测试,依次对待测试任务栈列表中的每个应用界面执行上述操作,直至待测试任务栈列表中的所有应用界面测试完成,从而得到测试结果,并将测试结果进行显示。
98.进一步地,对待测试任务栈列表中的每个应用界面进行测试的过程中,可以在老化测试启动时开始计时,可以实时获取当前时长,由于用户在选择老化测试开始前,配置了对应的测试时长等参数,从而当检测到当前时长达到预设测试时长时,确定所有应用界面测试完成,可以通过adb命令,将测试的进程去掉,从而结束测试操作。其中,该预设测试时
长大于或等于测试待测试任务栈列表中的的所有应用界面所用的时长,例如可以为100小时。
99.本技术实施例提供的终端老化测试方法,通过获取测试脚本,并运行测试脚本,获取待测试设备中所有应用的应用程序包,然后对每个应用程序包进行解析,生成待测试任务栈列表,该待测试任务栈列表中包括待测试设备中的至少一个应用,每个应用包括至少一个应用界面,并对待测试任务栈列表中的每个应用界面进行测试,得到测试结果并显示。该方法能够获取待测试设备中所有应用的应用程序包,从而自动生成待测试任务栈列表,进而遍历每个应用的每个界面,全面且有效地对实现对所有应用界面的测试,极大地提高了终端设备的生产出厂效率,增加了终端设备的生产产能。
100.进一步地,在上述实施例的基础上,图5为本技术实施例提供的检测当前运行应用是否发生泄漏方法的流程示意图,如图5所示,该方法包括:
101.s301、响应于接收到的触发获取指令,以预设的第二时间间隔获取当前运行应用的包名、类名和进程号。
102.s302、基于当前运行应用的包名、类名和进程号,获取当前运行应用的内存占用信息。
103.s303、将内存占用信息与预设阈值进行比对,得到比对结果。
104.s304、若比对结果指示内存占用信息大于预设阈值时,确定当前运行应用发生内存泄漏。
105.需要说明的是,终端设备中的应用在运行过程中会不停的分配内存,但是直到应用程序结束的时候才释放内存。为了防止终端设备中系统因为减少可用内存的数量而降低终端设备的性能,需要检测应用是否发生内存泄漏。
106.其中,内存泄漏是指程序中已动态分配的堆内存由于某种原因程序未被释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
107.具体地,测试终端在对每个应用进行测试的过程中,通过运行测试脚本,接收到用户输入的触发获取指令,该触发获取指令可以是adb命令,响应于接收到的触发获取指令,以预设的第二时间间隔获取当前运行应用的包名、类名和进程号,其中,预设的第二时间间隔可以是用户根据实际需求自定义设置的,例如可以是5分钟。
108.可以理解的是,进程号pid是进程的身份标识,程序运行时系统会自动分配给进程一个独一无二的pid。进程号可以基于当前运行的包名和类名组成。
109.在获取当前运行应用的包名、类名和进程号之后,然后基于当前运行应用的包名、类名和进程号,获取当前运行应用的内存占用信息,并记录至对应包名的文件中,该内存占用信息可以包括该当前运行应用占用内存的空间大小,然后将内存占用信息与预设阈值进行比对,得到比对结果,若比对结果指示内存占用信息大于预设阈值时,确定当前运行应用发生内存泄漏;若比对结果指示内存占用信息不大于预设阈值时,确定当前运行应用不发生内存泄漏。其中,该预设阈值可以是用户根据实际内存分配需求自定义设置的,例如可以是800m。
110.当检测到当前运行应用发生了内存泄漏,则通过adb命令,获取当前运行应用的hprof内存占用文件,并将其存储至内存泄漏应用日志文件中,基于内存泄漏应用日志文件中的包名和进程号,生成历史内存记录,并对历史内存记录进行分析,生成内存曲线。其中,
该存泄漏应用日志文件中可以包括机型、imei号以及monkey测试等信息。
111.示例性地,以应用为aaa、对应的应用程序包为aaa.apk为例,假设其对应的包名是com.android.aabb,通过触发获取内存占用信息的adb指令,该指令可以为:adb shell dumpsys meminfo com.android.aabb》com.android.aabb.txt),并将该内存占用信息记录到对应包名的文件中。然后将该内存占用信息与预设阈值进行比对,该预设阈值例如为800m,当内存占用信息大于预设阈值800m时,确定当前运行应用发生内存泄漏。
112.以应用为aaa、对应的应用程序包为aaa.apk为例,当检测到该应用发生泄漏时,可以通过adb命令,获取当前运行应用的进程号,并进而获取到对应的内存占用文件,假设其对应的包名是com.android.aabb,则该adb指令为:adb shell ps|grep com.android.aabb得到进程号pid,然后再根据adb shell am dump pid》aaa.hprof就得到了它的hprof文件,并打包至log压缩包中,然后基于发生内存泄漏的应用的包名和进程号,生成该进程的历史内存记录,从而对历史内存记录进行分析,进行描绘以生成内存曲线,该内存曲线可以作为参考数据,供研发人员进行分析。
113.本实施例提供的检测应用是否发生内存泄漏的方法,通过响应于接收到的触发获取指令,以预设的第二时间间隔获取当前运行应用的包名、类名和进程号,并基于当前运行应用的包名、类名和进程号,获取当前运行应用的内存占用信息,以判断当前运行应用是否发生内存泄漏。该方法能够在测试过程中定期查询当前正在运行的应用的内存信息,实时监控当前系统有没有发生内存泄漏,从而能够及时发现系统及应用的内存泄漏的问题,且对发生内存泄漏的应用的历史内存记录生成对应的内存曲线,能够以第一时间将发生泄漏的应用对应的日志信息抓取出来为研发人员提供了参考数据,以供研发人员进行分析。
114.应该理解的是,虽然图2-5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
115.另一方面,图6为本技术实施例提供的一种终端老化装置的结构示意图。该装置可以为终端设备内的装置,如图6所示,该装置600包括:
116.第一获取模块610,用于获取测试脚本;
117.第二获取模块620,用于运行测试脚本,以获取待测试设备中所有应用的应用程序包;
118.解析模块630,用于对每个应用程序包进行解析,生成待测试任务栈列表,待测试任务栈列表包括待测试设备中的至少一个应用,每个应用包括至少一个应用界面;
119.测试模块640,用于对待测试任务栈列表中的每个应用界面进行测试,得到测试结果并显示。
120.可选的,上述解析模块630,包括:
121.第一获取单元631,用于响应于接收到的触发解析指令,获取每个应用程序包中的清单文件;
122.第二获取单元632,用于对清单文件进行解析,获取应用程序包中每个应用界面对应的包名和类名;
123.确定单元633,用于基于每个应用界面的包名和类名,确定待测试任务栈列表。
124.可选地,上述测试模块640,包括:
125.第三获取单元641,以预设的第一时间间隔从待测试任务栈列表中获取待测试应用界面;
126.测试单元642,用于按照预先配置的伪随机事件操作参数,对待测试应用界面执行测试操作,直至待测试任务栈列表中的所有应用界面测试完成。
127.可选地,上述测试单元642,具体用于:
128.获取待测试应用界面的包名和类名;
129.基于待测试应用界面的包名和类名,生成触发界面启动指令;
130.响应于触发界面启动指令,生成待测试应用界面对应的伪随机事件,以使得在待测试应用界面执行伪随机事件。
131.可选地,上述装置还用于:
132.在测试启动时开始计时,实时获取当前时长;
133.若检测到当前时长达到预设测试时长时,确定所有应用界面测试完成,预设测试时长大于或等于测试待测试任务栈列表中的的所有应用界面所用的时长。
134.可选地,请参见图7所示,上述装置,还包括:
135.第三获取模块650,用于响应于接收到的触发获取指令,以预设的第二时间间隔获取当前运行应用的包名、类名和进程号;
136.第四获取模块660,用于基于当前运行应用的包名、类名和进程号,获取当前运行应用的内存占用信息;
137.比对模块670,用于将内存占用信息与预设阈值进行比对,得到比对结果;
138.确定模块680,用于若比对结果指示内存占用信息大于预设阈值时,确定当前运行应用发生内存泄漏。
139.可选地,上述装置,还用于:
140.获取当前运行应用的内存占用文件,存储至内存泄漏应用日志文件;
141.基于内存泄漏应用日志文件中的包名和进程号,生成历史内存记录;
142.对历史内存记录进行分析,生成内存曲线。
143.本技术实施例提供的终端老化测试装置,通过第一获取模块获取测试脚本,并通过第二获取模块控制运行测试脚本,获取待测试设备中所有应用的应用程序包,然后通过解析模块对每个应用程序包进行解析,生成待测试任务栈列表,该待测试任务栈列表中包括待测试设备中的至少一个应用,每个应用包括至少一个应用界面,并通过测试模块对待测试任务栈列表中的每个应用界面进行测试,得到测试结果并显示。该装置能够获取待测试设备中所有应用的应用程序包,从而自动生成待测试任务栈列表,进而遍历每个应用的每个界面,全面且有效地对实现对所有应用界面的测试,极大地提高了终端设备的生产出厂效率,增加了终端设备的生产产能。
144.关于终端老化测试装置的具体限定可以参见上文中对于终端老化测试方法的限定,在此不再赘述。上述终端老化测试装置中的各个模块可全部或部分通过软件、硬件及其
组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
145.在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过wifi、运营商网络、近场通信(nfc)或其他技术实现。该计算机程序被处理器执行时以实现一种终端老化测试方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
146.本领域技术人员可以理解,图8中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
147.在一个实施例中,本技术提供的终端老化测试装置可以实现为一种计算机程序的形式,计算机程序可在如图8所示的计算机设备上运行。计算机设备的存储器中可存储组成该终端老化测试装置的各个程序模块,比如,图6所示的第一获取模块、第二获取模块、解析模块和测试模块。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本技术各个实施例的终端老化测试方法中的步骤。
148.例如,图8所示的计算机设备可以通过如图6所示的终端老化测试装置中的第一获取模块执行步骤:获取测试脚本。计算机设备可通过第二获取模块执行步骤:控制运行所述测试脚本,获取系统中所有应用的应用程序包。计算机设备可通过解析模块执行步骤:对每个所述应用程序包进行解析,生成待测试任务栈列表,所述待测试任务栈列表包括至少一个应用,每个所述应用包括至少一个应用界面。计算机设备可通过测试模块执行步骤:对所述待测试任务栈列表中的的每个应用界面进行测试,得到测试结果并显示。
149.在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
150.获取测试脚本;
151.运行所述测试脚本,以获取待测试设备中所有应用的应用程序包;
152.对每个所述应用程序包进行解析,生成待测试任务栈列表,所述待测试任务栈列表包括待测试设备中的至少一个应用,每个所述应用包括至少一个应用界面;
153.对所述待测试任务栈列表中的每个应用界面进行测试,得到测试结果并显示。
154.在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
155.s101、获取测试脚本;
156.s102、运行所述测试脚本,以获取待测试设备中所有应用的应用程序包;
157.s103、对每个所述应用程序包进行解析,生成待测试任务栈列表,所述待测试任务
栈列表包括待测试设备中的至少一个应用,每个所述应用包括至少一个应用界面;
158.s104、对所述待测试任务栈列表中的每个应用界面进行测试,得到测试结果并显示。
159.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
160.响应于接收到的触发解析指令,获取每个应用程序包中的清单文件;
161.对清单文件进行解析,获取应用程序包中每个应用界面对应的包名和类名;
162.基于每个应用界面的包名和类名,确定待测试任务栈列表。
163.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:.
164.以预设的第一时间间隔从待测试任务栈列表中获取待测试应用界面;
165.按照预先配置的伪随机事件操作参数,对待测试应用界面执行指定测试操作,直至待测试任务栈列表中的应用界面测试完成。
166.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:.
167.获取待测试应用界面的包名和类名;
168.基于待测试应用界面的包名和类名,生成触发界面启动指令;
169.响应于触发界面启动指令,生成待测试应用界面对应的伪随机事件,以使得在待测试应用界面执行伪随机事件。
170.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
171.在测试启动时开始计时,实时获取当前时长;
172.若检测到当前时长达到预设测试时长时,确定所有应用界面测试完成,预设测试时长大于或等于测试待测试任务栈列表中的的所有应用界面所用的时长。
173.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
174.响应于接收到的触发获取指令,以预设的第二时间间隔获取当前运行应用的包名、类名和进程号;
175.基于当前运行应用的包名、类名和进程号,获取当前运行应用的内存占用信息;
176.将内存占用信息与预设阈值进行比对,得到比对结果;
177.若比对结果指示内存占用信息大于预设阈值时,确定当前运行应用发生内存泄漏。
178.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
179.获取当前运行应用的内存占用文件,存储至内存泄漏应用日志文件;
180.基于内存泄漏应用日志文件中的包号和进程号,生成历史内存记录;
181.对历史内存记录进行分析,生成内存曲线。
182.上述计算机可读存储介质中,计算机程序通过获取测试脚本,并运行测试脚本,获取待测试设备中所有应用的应用程序包,然后对每个应用程序包进行解析,生成待测试任务栈列表,该待测试任务栈列表中包括待测试设备中的至少一个应用,每个应用包括至少一个应用界面,并对待测试任务栈列表中的每个应用界面进行测试,得到测试结果并显示,能够获取待测试设备中所有应用的应用程序包,从而自动生成待测试任务栈列表,进而遍历每个应用的每个界面,全面且有效地对实现对所有应用界面的测试,极大地提高了终端设备的生产出厂效率,增加了终端设备的生产产能。
183.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以
通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-only memory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,比如静态随机存取存储器(static random access memory,sram)和动态随机存取存储器(dynamic random access memory,dram)等。
184.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
185.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1