应用程序稳定性测试方法及可读存储介质
文献发布时间:2023-06-19 16:04:54
技术领域
本发明实施例涉及应用程序稳定性测试方法、可读存储介质及计算机程序产品。
背景技术
APP(应用程序)稳定性测试是指在APP长时间持续运行时,测试系统版本是否稳定、是否能持续地为用户提供服务。
目前,APP稳定性测试工具首选Monkey,Monkey是向系统发送随机的用户事件流(如按键输入、触摸屏输入和手势输入等),实现对APP进行稳定性测试。
在APP稳定性测试时,需要读取APP的页面,以实现对APP运行过程中的版本页面覆盖率等的计算,其中,版本页面覆盖率=本次测试任务中遍历的当前版本APP的页面数/APP的页面总数。但是,对于采用动态插件(如:Replugin插件)架构的APP,由于显示的页面都是按照一定规则动态改变的字符串,甚至APP每次启动后页面都会动态计算,从而导致无法获取到真实的页面内容,进而导致计算出的版本页面覆盖率不准确,图1为现有技术采集到的APP的页面示例图,可以看出:该页面中的页面名称都是乱码。另外,现有的测试方法中,在获取APP的页面总数时,若一个页面分裂成多个页面显示,则会将其按照多个页面计算,则就会导致最终计算出的版本页面覆盖率比实际的版本页面覆盖率要小。
发明内容
本发明实施例提出APP稳定性测试方法、可读存储介质及计算机程序产品,以在进行应用程序稳定性测试时获得应用程序的真实页面信息。
本发明实施例的技术方案是这样实现的:
一种应用程序稳定性测试方法,该方法包括:
检测到满足一应用程序的稳定性测试任务的触发条件,通过所述测试任务的主进程进入主函数并读取所述测试任务的运行配置;
根据所述运行配置中定义的各测试设备标识,启动各测试设备上的所述应用程序;
检测到各测试设备上的所述应用程序已启动,启动各测试设备的用户接口UI进程;
检测到各测试设备的UI进程已启动,启动各测试设备的所述应用程序的稳定性测试进程;
检测到各测试设备的所述应用程序的稳定性测试进程已启动,启动各测试设备的心跳采集页面子线程,并驱动各心跳采集页面子线程在每个心跳周期到来时采集所述应用程序的页面上下文信息并从所述页面上下文信息中解析出所述应用程序的当前运行页面的信息。
所述运行配置进一步包括:所述应用程序的名称和版本号;
所述根据所述运行配置中定义的各测试设备标识,启动各测试设备上的所述应用程序,包括:
根据所述运行配置中定义的各测试设备标识、所述应用程序的名称和版本号,启动各测试设备上的对应版本的所述应用程序;
所述应用程序的当前运行页面的信息包括:所述应用程序的当前运行页面的名称;
所述驱动各心跳采集页面子线程从所述页面上下文信息中解析出所述应用程序的当前运行页面的信息之后,进一步包括:
驱动各心跳采集页面子线程将解析出的所述应用程序的当前运行页面的信息保存到数据库中;
且,检测到本次稳定性测试任务结束,从数据库中获取本次稳定性测试任务中各测试设备的心跳采集页面子线程采集的所述应用程序的所有运行页面的名称,在其中去掉重复的运行页面的名称,将剩余的运行页面的名称总数作为本次测试任务中遍历的所述应用程序的当前版本的页面数,获取在之前所有测试任务中遍历的所述应用程序的当前版本的页面数,将本次测试任务中遍历的所述应用程序的当前版本的页面数加上在之前所有测试任务中遍历的所述应用程序的当前版本的页面数,得到已完成的所有测试任务遍历的所述应用程序的当前版本的页面数,将已完成的所有测试任务遍历的所述应用程序的当前版本的页面数除以所述应用程序的页面总数的比值,将该比值作为所述应用程序的当前版本的页面覆盖率。
所述应用程序的页面总数由用户预先配置。
所述通过所述测试任务的主进程进入主函数并读取所述测试任务的运行配置之后,进一步包括:
将所述运行配置中的一个或多个页面加载策略存储到数据库中;
所述启动各测试设备的心跳采集页面子线程的同时,进一步包括:
启动各测试设备的页面加载子线程,驱动所述页面加载子线程从数据库中依次读取页面加载策略并根据读取的页面加载策略加载所述应用程序的页面。
所述驱动所述页面加载子线程从数据库中依次读取页面加载策略,包括:
驱动所述页面加载子线程按照已执行次数越少,优先级越高的原则,按照优先级的从高到低,依次从数据库存储的页面加载策略中读取一个页面加载策略;
且在执行完任一页面加载策略后,将该策略的执行次数加1。
所述页面加载策略的内容包括:一个或多个页面的入口路由。
所述在每个心跳周期到来时采集所述应用程序的页面上下文信息,包括:
在每个心跳周期到来时读取内存栈中的页面上下文信息,并将读取的页面上下文信息以列表形式存储到内存中;
所述从所述页面上下文信息中解析出所述应用程序的当前运行页面的信息,包括:
从内存的页面上下文信息列表中解析出倒数第一条数据,从该倒数第一条数据中解析出所述应用程序的当前运行页面的信息。
一种应用程序稳定性测试装置,该装置包括:处理器和存储器,其中:
存储器存储有程序,所述程序配置为在被所述处理器执行时使得所述处理器执行如上任一项所述的应用程序稳定性测试方法的步骤。
一种非瞬时计算机可读存储介质,所述非瞬时计算机可读存储介质存储指令,所述指令在由处理器执行时使得所述处理器执行如上任一项所述的应用程序稳定性测试方法的步骤。
一种计算机程序产品,包括计算机程序或指令,该计算机程序或指令被处理器执行时实现如上任一项所述的应用程序稳定性测试方法的步骤。
本发明实施例中,通过驱动心跳采集页面子线程在每个心跳周期到来时采集应用程序的页面上下文信息并从页面上下文信息中解析出应用程序的当前运行页面的信息,从而能够在进行应用程序稳定性测试时获得应用程序的真实页面信息。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术采集到的APP的页面示例图;
图2为本发明一实施例提供的应用程序稳定性测试方法流程图;
图3为本发明实施例提供的一种电子设备的示例性结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其他步骤或单元。
下面以具体实施例对本发明的技术方案进行详细说明。下面几个具体实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
本发明实施例提出一种应用程序的稳定性测试方法,该方法中,检测到满足一应用程序的稳定性测试任务的触发条件,通过该测试任务的主进程进入主函数并读取该测试任务的运行配置;根据该运行配置中定义的各测试设备标识,启动各测试设备上的该应用程序;检测到各测试设备上的该应用程序已启动,启动各测试设备的UI进程;检测到各测试设备的UI进程已启动,启动各测试设备的该应用程序的稳定性测试进程;检测到各测试设备的该应用程序的稳定性测试进程已启动,启动各测试设备的心跳采集页面子线程,并驱动各心跳采集页面子线程在每个心跳周期到来时采集该应用程序的页面上下文信息并从该页面上下文信息中解析出该应用程序的当前运行页面的信息。本发明实施例能够在进行应用程序稳定性测试时获得应用程序的真实页面信息。
图2为本发明一实施例提供的应用程序稳定性测试方法流程图,其具体步骤如下:
步骤201:检测到满足一应用程序的稳定性测试任务的触发条件,通过该测试任务的主进程进入主函数并读取该测试任务的运行配置。
这里,满足一应用程序的稳定性测试任务的触发条件可以是:检测到该应用程序的稳定性测试任务的测试周期到来,或者,检测到该应用程序的稳定性测试任务的预设测试时间点到来,或者,接收到用户输入的针对该应用程序的稳定性测试命令。
该测试任务的运行配置包括:该应用程序的名称、版本号等,还可包括:页面加载策略等。
本发明实施例中的应用程序可为采用动态插件(如replugin插件)的安卓(Android)应用程序。
步骤202:根据运行配置中定义的各测试设备标识,启动各测试设备上的该应用程序。
步骤203:检测到各测试设备上的该应用程序已启动,启动各测试设备的UI(UserInterface,用户接口)进程。
步骤204:检测到各测试设备的UI进程已启动,启动各测试设备的该应用程序的稳定性测试进程。
步骤205:检测到各测试设备的该应用程序的稳定性测试进程已启动,启动各测试设备的心跳采集页面子线程,并驱动各心跳采集页面子线程在每个心跳周期到来时采集该应用程序的页面(activity)上下文信息并从该页面上下文信息中解析出该应用程序的当前运行页面的信息。
本发明实施例中的稳定性测试进程可采用Monkey进程。
心跳周期的间隔可预先设定,如100ms(毫秒)、200ms等。
上述实施例中,通过驱动心跳采集页面子线程在每个心跳周期到来时采集应用程序的页面上下文信息并从页面上下文信息中解析出应用程序的当前运行页面的信息,从而能够在进行应用程序稳定性测试时获得应用程序的真实页面信息。
步骤201中的运行配置进一步包括:该应用程序的名称和版本号;
步骤202中,根据该运行配置中定义的各测试设备标识,启动各测试设备上的该应用程序,包括:
根据运行配置中定义的各测试设备标识、该应用程序的名称和版本号,启动各测试设备上的对应版本的该应用程序;
步骤205中,该应用程序的当前运行页面的信息包括:该应用程序的当前运行页面的名称;
步骤205中,驱动各心跳采集页面子线程从该页面上下文信息中解析出该应用程序的当前运行页面的信息之后,进一步包括:驱动各心跳采集页面子线程将解析出的该应用程序的当前运行页面的信息保存到数据库中;
且,检测到本次稳定性测试任务结束,从数据库中获取本次稳定性测试任务中各测试设备的心跳采集页面子线程采集的该应用程序的所有运行页面的名称,在其中去掉重复的运行页面的名称,将剩余的运行页面的名称总数作为本次测试任务中遍历的该应用程序的当前版本的页面数,获取在之前所有测试任务中遍历的该应用程序的当前版本的页面数,将本次测试任务中遍历的该应用程序的当前版本的页面数加上在之前所有测试任务中遍历的该应用程序的当前版本的页面数,得到已完成的所有测试任务遍历的该应用程序的当前版本的页面数,将已完成的所有测试任务遍历的该应用程序的当前版本的页面数除以该应用程序的页面总数的比值,将该比值作为该应用程序的当前版本的页面覆盖率。
其中,驱动各心跳采集页面子线程将解析出的该应用程序的当前运行页面的信息保存到数据库中具体为:驱动各心跳采集页面子线程将解析出的该应用程序的当前运行页面的信息和该应用程序的名称关联后保存到数据库中。
其中,该应用程序的页面总数由用户预先配置,以保证应用程序的页面总数的准确性,进一步保证应用程序的当前版本的页面覆盖率的计算准确度。
上述实施例中,由于采集到了应用程序的真实页面的名称,因此提高了应用程序的当前版本的页面覆盖率的计算准确度。
在计算出本次测试任务中的该应用程序的当前版本的页面覆盖率后,可保存本次测试任务中的该应用程序的当前版本的页面覆盖率并通知给用户。
在实际应用中,在本次测试任务结束时,还可计算该应用程序的当次覆盖率=本次测试任务中遍历的该应用程序的当前版本的页面数/该应用程序的页面总数。
一可选实施例中,步骤201中,通过该测试任务的主进程进入主函数并读取该测试任务的运行配置之后,进一步包括:将运行配置中的一个或多个页面加载策略存储到数据库中;
且,步骤205中,启动各测试设备的心跳采集页面子线程的同时,进一步包括:启动各测试设备的页面加载子线程,驱动各页面加载子线程从数据库中依次读取页面加载策略并根据读取的页面加载策略加载该应用程序的页面。
一可选实施例中,驱动各页面加载子线程从数据库中依次读取页面加载策略,包括:驱动各页面加载子线程按照已执行次数越少,优先级越高的原则,按照优先级的从高到低,依次从数据库存储的页面加载策略中读取一个页面加载策略;且,在执行完任一页面加载策略后,将该策略的执行次数加1。
一可选实施例中,页面加载策略的内容包括:一个或多个页面的入口路由。
由于在应用程序的正常运行过程中加载某些页面的概率较低,为了提高测试的全面性和准确性,会定义页面加载策略,以在策略中定义这些页面的入口路由,从而使得在测试过程中这些页面能够被加载。在执行策略时,同样为了进一步提高测试的全面性和准确性,要先执行已执行次数最小的策略,以尽可能使得每个页面都能被加载到。
一可选实施例中,步骤205中,在每个心跳周期到来时采集该应用程序的页面上下文信息,包括:在每个心跳周期到来时读取内存栈中的页面上下文信息,并将读取的页面上下文信息以列表形式存储到内存中;
且,步骤205中,从页面上下文信息中解析出该应用程序的当前运行页面的信息,包括:从内存的页面上下文信息列表中解析出倒数第一条数据,从该倒数第一条数据中解析出该应用程序的当前运行页面的信息。
另外,在本次测试任务结束时,可将本次测试任务中的参数如:崩溃次数、当次覆盖率、当前版本的页面覆盖率(简称版本覆盖率)、运行时间、遍历的页面总数、遍历/执行的策略(schema)数等显示给用户。
本发明实施例还提供一种应用程序稳定性测试装置,该装置包括:处理器和存储器,其中:存储器存储有计算机程序或指令,计算机程序或指令配置为在被处理器执行时使得处理器执行如上任一实施例所述的应用程序稳定性测试方法的步骤。
本发明实施例还提供一种计算机程序产品,包括计算机程序或指令,该计算机程序或指令被处理器执行时实现如上任一实施例所述的应用程序稳定性测试方法的步骤。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储指令,所述指令在由处理器执行时可执行如上所述应用程序稳定性测试方法中的步骤。实际应用中,所述的计算机可读介质可以是上述实施例各设备/装置/系统所包含的,也可以是单独存在,而未装配入该设备/装置/系统中。其中,在计算机可读存储介质中存储指令,其存储的指令在由处理器执行时可执行如上应用程序稳定性测试方法中的步骤。
根据本发明公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件,或者上述的任意合适的组合,但不用于限制本本发明保护的范围。在本发明公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
如图3所示,本发明实施例还提供一种电子设备。如图3所示,其示出了本发明实施例所涉及的电子设备的结构示意图,具体来讲:
该电子设备可以包括一个或一个以上处理核心的处理器31、一个或一个以上计算机可读存储介质的存储器32以及存储在存储器上并可在处理器上运行的计算机程序。在执行所述存储器32的程序时,可以实现上述应用程序稳定性测试方法。
具体的,实际应用中,该电子设备还可以包括电源33、输入输出单元34等部件。本领域技术人员可以理解,图3中示出的电子设备的结构并不构成对该电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器31是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器32内的软件程序和/或模块,以及调用存储在存储器32内的数据,执行服务器的各种功能和处理数据,从而对该电子设备进行整体监控。
存储器32可用于存储软件程序以及模块,即上述计算机可读存储介质。处理器31通过运行存储在存储器32的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器32可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据服务器的使用所创建的数据等。此外,存储器32可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器32还可以包括存储器控制器,以提供处理器31对存储器32的访问。
该电子设备还包括给各个部件供电的电源33,可以通过电源管理系统与处理器31逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源33还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该电子设备还可包括输入输出单元34,该输入单元输出34可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。该输入单元输出34还可以用于显示由用户输入的信息或提供给用户的信息以及各种图像用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。
本发明附图中的流程图和框图,示出了按照本发明公开的各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或者代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应该注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同附图中所标准的顺序发生。例如,两个连接地表示的方框实际上可以基本并行地执行,它们有时也可以按照相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或者流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本发明中。特别地,在不脱离本发明精神和教导的情况下,本发明的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,所有这些组合和/或结合均落入本发明公开的范围。
本文中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思路,并不用于限制本发明。对于本领域的技术人员来说,可以依据本发明的思路、精神和原则,在具体实施方式及应用范围上进行改变,其所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
- 应用程序稳定性测试方法及可读存储介质
- 一种应用程序测试方法、电子设备及计算机可读存储介质