一种测试方法及装置.pdf

上传人:1520****312 文档编号:1306064 上传时间:2018-04-14 格式:PDF 页数:19 大小:1.10MB
返回 下载 相关 举报
摘要
申请专利号:

CN201611191131.8

申请日:

2016.12.21

公开号:

CN106708737A

公开日:

2017.05.24

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):G06F 11/36申请日:20161221|||公开

IPC分类号:

G06F11/36; G06F9/48

主分类号:

G06F11/36

申请人:

腾讯科技(深圳)有限公司

发明人:

鲁可

地址:

518000 广东省深圳市南山区高新区科技中一路腾讯大厦35层

优先权:

专利代理机构:

广州三环专利代理有限公司 44202

代理人:

郝传鑫;贾允

PDF下载: PDF下载
内容摘要

本发明涉及移动测试技术领域,尤其涉及一种测试方法和装置。通过获取待执行任务,从待执行任务中确定目标任务,并延长目标任务的延迟执行时间,然后根据延长后的延迟执行时间将目标任务插入任务队列,从而推迟目标任务的执行。在目标任务执行前,如果对应的界面被销毁导致变量为空,则在工作线程执行目标任务时对应的应用就会发生崩溃。本发明通过在延迟执行时间的基础上进一步推迟目标任务的执行,能够提高复现手机应用界面销毁导致变量为空后再引用导致Crash的概率。

权利要求书

1.一种测试方法,其特征在于,包括:
确定目标任务,所述目标任务供被测应用调用;
延长所述目标任务的延迟执行时间;
根据延长后的延迟执行时间将所述目标任务插入任务队列;
当所述目标任务处于任务队列的队头时,提取出所述目标任务;
将所述目标任务分发至所述被测应用对应的工作线程,测试被测应用是否发生崩溃。
2.根据权利要求1所述的方法,其特征在于,所述确定目标任务包括:
获取工作线程发送的待执行任务和待执行任务的延迟执行时间;
确定所述待执行任务是否是通过post发送的封装消息,若是,则
确定所述待执行任务是否供被测应用调用,若是,则
判断所述待执行任务的延迟执行时间是否小于预设的时长阈值,若是,则将所述待执
行任务确定为目标任务。
3.根据权利要求2所述的方法,其特征在于,所述确定所述待执行任务是否是通过post
发送的封装消息,包括:
获取所述待执行任务的回调信息;
判断所述回调信息是否为空,若是,确定所述待执行任务不是通过post发送的封装消
息,若否,确定所述待执行任务是通过post发送的封装消息。
4.根据权利要求3所述的方法,其特征在于,所述确定确定所述待执行任务是否供被测
应用调用,包括:
获取调用堆栈;
判断调用堆栈是否包含被测应用信息,若是,确定所述待执行任务供被测应用调用,若
否,确定所述待执行任务不供被测应用调用。
5.根据权利要求1所述的方法,其特征在于,所述延长所述目标任务的延迟执行时间包
括:
将所述目标任务的延迟执行时间乘以设定倍数或者加上设定时长,计算得到延长后的
延迟执行时间;
用延长后的延迟执行时间替换所述延迟执行时间。
6.一种测试装置,其特征在于,包括:
确定单元,用于确定目标任务,所述目标任务供被测应用调用;
修改单元,用于延长所述目标任务的延迟执行时间;
插入单元,用于根据延长后的延迟执行时间将所述目标任务插入任务队列;
提取单元,用于当所述目标任务处于任务队列的队头时,提取出所述目标任务;
发送单元,用于将所述目标任务分发至所述被测应用对应的工作线程,测试被测应用
是否发生崩溃。
7.根据权利要求6所述的装置,其特征在于,所述确定单元包括:
获取子单元,用于获取工作线程发送的待执行任务和待执行任务的延迟执行时间;
第一确定子单元,用于确定所述待执行任务是否是通过post发送的封装消息;
第二确定子单元,用于在确定所述待执行任务是通过post发送的封装消息时,确定所
述待执行任务是否供被测应用调用;
第三确定子单元,用于在确定所述待执行任务是供被测应用调用时,判断所述延迟执
行时间是否小于预设的时长阈值,若是,则将所述待执行任务确定为目标任务。
8.根据权利要求7所述的装置,其特征在于,所述第一确定子单元包括:
第一获取模块,用于获取所述待执行任务的回调信息;
第一确定模块,用于判断所述回调信息是否为空,若是,确定所述待执行任务不是通过
post发送的封装消息,若否,确定所述待执行任务是通过post发送的封装消息。
9.根据权利要求8所述的装置,其特征在于,所述第二确定子单元包括:
第二获取模块,用于获取调用堆栈;
第二确定模块,用于判断调用堆栈是否包含被测应用信息,若是,确定所述待执行任务
供被测应用调用,若否,确定所述待执行任务不供被测应用调用。
10.根据权利要求6所述的装置,其特征在于,
所述修改单元,具体用于将所述目标任务的延迟执行时间乘以设定倍数或者加上设定
时长,计算得到延长后的延迟执行时间;用延长后的延迟执行时间替换所述延迟执行时间。

说明书

一种测试方法及装置

技术领域

本发明涉及移动测试技术领域,尤其涉及一种测试方法及装置。

背景技术

随着智能手机的发展,出现了多种支持智能手机的系统,比如Android(安卓)系
统。Android是一种以Linux为基础的开放源码操作系统,主要使用于手机等移动终端。
Android平台由操作系统、中间件、用户界面和应用软件组成。

随着Android系统的市场占有率的增加,越来越多的开发者基于Android系统开发
APP(Application,应用)。活动组件(Activity)是安卓(Android)组件中最基本也是最为常
见用的四大组件之一。

Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以显
示指定控件。在一个Android应用中,一个Activity通常就是一个单独的屏幕,它上面可以
显示一些控件也可以监听并处理用户的事件。在Android编程过程中,很多开发人员为了减
少内存泄露,会在activity onDestroy(界面销毁时调用的函数)中回收资源,较少变量的
引用,将一些成员变量置空,而通过handler post的消息,特别是通过postDelayed
(Runnable r,long delayMills)的线程需在用户设定的延迟时间后才开始执行,若线程执
行时界面销毁,引用的变量为空,就会导致应用崩溃(Crash)。目前还未出现对这种由于界
面销毁导致Crash的情况进行测试的先例。

发明内容

本发明的目的旨在至少在一定程度上解决相关技术中的技术问题之一。

为此,本发明的第一个目的在于提出一种测试方法。该方法通过延长任务的延迟
执行时间,来延迟工作线程执行所述任务,由于任务执行时间越靠后其对应的变量被置空
的可能性越大,从而能够提高复现手机应用界面销毁使得变量为空后再引用导致Crash的
概率。

通过延长任务的延迟执行时间,来提高发现崩溃的概率。因为任务执行时间越靠
后其对应的变量被置空的可能性越大。

本发明的第二个目的在于提出一种测试装置。

本发明第一方面提供的一种测试方法,包括:确定目标任务,所述目标任务供被测
应用调用;延长所述目标任务的延迟执行时间;根据延长后的延迟执行时间将所述目标任
务插入任务队列;当所述目标任务处于任务队列的队头时,提取出所述目标任务;将所述目
标任务分发至所述被测应用对应的工作线程,测试被测应用是否发生崩溃。

优选地,所述确定目标任务包括:获取工作线程发送的待执行任务和待执行任务
的延迟执行时间;确定所述待执行任务是否是通过post发送的封装消息,若是,则确定所述
待执行任务是否供被测应用调用,若是,则判断所述待执行任务的延迟执行时间是否小于
预设的时长阈值,若是,则将所述待执行任务确定为目标任务。

优选地,所述确定所述待执行任务是否是通过post发送的封装消息,包括:获取所
述待执行任务的回调信息;判断所述回调信息是否为空,若是,确定所述待执行任务不是通
过post发送的封装消息,若否,确定所述待执行任务是通过post发送的封装消息。

优选地,所述确定确定所述待执行任务是否供被测应用调用,包括:获取调用堆
栈;判断调用堆栈是否包含被测应用信息,若是,确定所述待执行任务供被测应用调用,若
否,确定所述待执行任务不供被测应用调用。

优选地,所述延长所述目标任务的延迟执行时间包括:将所述目标任务的延迟执
行时间乘以设定倍数或者加上设定时长,计算得到延长后的延迟执行时间;用延长后的延
迟执行时间替换所述延迟执行时间。

本发明第二方面提供的一种测试装置,包括:确定单元,用于确定目标任务,所述
目标任务供被测应用调用;修改单元,用于延长所述目标任务的延迟执行时间;插入单元,
用于根据延长后的延迟执行时间将所述目标任务插入任务队列;提取单元,用于当所述目
标任务处于任务队列的队头时,提取出所述目标任务;发送单元,用于将所述目标任务分发
至所述被测应用对应的工作线程,测试被测应用是否发生崩溃。

优选地,所述确定单元包括:获取子单元,用于获取工作线程发送的待执行任务和
待执行任务的延迟执行时间;第一确定子单元,用于确定所述待执行任务是否是通过post
发送的封装消息;第二确定子单元,用于在确定所述待执行任务是通过post发送的封装消
息时,确定所述待执行任务是否供被测应用调用;第三确定子单元,用于在确定所述待执行
任务是供被测应用调用时,判断所述延迟执行时间是否小于预设的时长阈值,若是,则将所
述待执行任务确定为目标任务。

优选地,所述第一确定子单元包括:第一获取模块,用于获取所述待执行任务的回
调信息;第一确定模块,用于判断所述回调信息是否为空,若是,确定所述待执行任务不是
通过post发送的封装消息,若否,确定所述待执行任务是通过post发送的封装消息。

优选地,所述第二确定子单元包括:第二获取模块,用于获取调用堆栈;第二确定
模块,用于判断调用堆栈是否包含被测应用信息,若是,确定所述待执行任务供被测应用调
用,若否,确定所述待执行任务不供被测应用调用。

优选地,所述修改单元,具体用于将所述目标任务的延迟执行时间乘以设定倍数
或者加上设定时长,计算得到延长后的延迟执行时间;用延长后的延迟执行时间替换所述
延迟执行时间。

本发明具有如下有益效果:

上述技术方案中,通过获取待执行任务,从待执行任务中确定目标任务,并延长目
标任务的延迟执行时间,然后根据延长后的延迟执行时间将目标任务插入任务队列,从而
推迟目标任务的执行。在目标任务执行前,如果对应的界面被销毁导致变量为空,则在工作
线程执行目标任务时对应的应用就会发生崩溃。本发明通过推迟目标任务的执行,能够提
高复现手机应用界面销毁导致变量为空后再引用导致Crash的概率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案和优点,下面将对实施
例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅
仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,
还可以根据这些附图获得其它附图。

图1是可用于实施本发明实施例的测试方法的计算机终端的硬件结构框图;

图2是本发明实施例1揭示的测试方法的流程图;

图3是本发明实施例2揭示的消息处理方法的流程图;

图4是本发明实施例2揭示的确定目标任务的方法流程图;

图5是本发明实施例3揭示的测试装置的示意图;

图6是本发明实施例4揭示的测试装置的示意图;

图7是根据本发明实施例的计算机终端的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的
附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是
本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人
员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范
围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第
二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用
的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或
描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆
盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于
清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品
或设备固有的其它步骤或单元。

实施例1

本实施例提供一种测试方法的实施例,需要说明的是,在附图的流程图示出的步
骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了
逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

本申请所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中
执行。以运行在计算机终端上为例,图1是可用于实施本发明的测试方法的计算机终端的硬
件结构框图。如图1所示,计算机终端100可以包括一个或多个(图中仅示出一个)处理器102
(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存
储数据的存储器104、以及用于通信功能的传输装置106。本领域普通技术人员可以理解,图
1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端100还可
包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的测试
方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,
从而执行各种功能应用以及数据处理,即实现上述的测试方法。存储器104可包括高速随机
存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失
性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储
器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互
联网、企业内部网、局域网、移动通信网及其组合。

传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括
计算机终端100的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络
适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连
从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简
称为RF)模块,其用于通过无线方式与互联网进行通讯。

在上述运行环境下,本申请提供了如图3所示的一种测试方法。该方法可以应用于
智能终端设备中,由智能终端设备中的处理器执行,智能终端设备可以是智能手机、平板电
脑等。智能终端设备中安装有至少一个应用程序,本发明实施例并不限定应用程序的种类,
可以为系统类应用程序,也可以为软件类应用程序。

图2是本发明实施例1揭示的测试方法的流程图。如图2所示,该方法的一种可选的
方案包括如下步骤:

步骤S201:确定目标任务,所述目标任务供被测应用调用;

步骤S202:延长所述目标任务的延迟执行时间;

步骤S203:根据延长后的延迟执行时间将所述目标任务插入任务队列;

步骤S204:当所述目标任务处于任务队列的队头时,提取出所述目标任务;

步骤S205:将所述目标任务分发至所述被测应用对应的工作线程,测试被测应用
是否发生崩溃。

优选地,所述步骤S201具体包括:获取待执行任务和待执行任务的延迟执行时间;
确定所述待执行任务是否是通过post发送的封装消息,若是,则确定所述待执行任务是否
供被测应用调用,若是,则判断所述待执行任务的延迟执行时间是否小于预设的时长阈值,
若是,则将所述待执行任务确定为目标任务。

本实施例中,通过获取待执行任务,从待执行任务中确定目标任务,并延长目标任
务的延迟执行时间,然后根据延长后的延迟执行时间将目标任务插入任务队列,从而推迟
目标任务的执行。在目标任务执行前,如果对应的界面被销毁导致变量为空,则在工作线程
执行目标任务时对应的应用就会发生崩溃。本发明通过推迟目标任务的执行,能够提高复
现手机应用界面销毁导致变量为空后再引用导致Crash的概率。

实施例2

本实施例涉及消息处理机制,下面首先就消息处理机制可能涉及的概念进行说
明:

1、MessageQueue

消息队列,存放消息的地方,按照FIFO规则执行,每一个线程只可以拥有一个
MessageQueue。在创建Looper对象会创建一个MessageQueue对象。

2、Message

消息对象,MessageQueue中存放的对象。一个MessageQueue中可以包含多个
Message对象。可以通过Message.obtain()或者Handler.obtain Message()获取Message
对象。但是这并不一定是直接创建一个新的实例,而是先从消息池中看有没有可用的
Message实例,存在则直接取出返回这个实例。如果消息池中没有可用的Message实例,则用
给定的参数创建一个Message对象。调用remove Messages()时,将Message从
MessageQueue中删除,同时放入到消息池中。

3、Looper

操作MessageQueue。一个Looper对应一个MessageQueue。通过调用
Looper.myLooper()可以获得当前线程的Looper对象。Looper从MessageQueue中取出
Message然后交由Handler的handle Message()进行处理。处理完成后,调用
Message.recycle()将其放入消息池中。

4、Handler

消息的处理者。handler负责将需要传递的信息封装成Message对象,然后调用
sendMessage()方法将消息放入MessageQueue中。当MessageQueue循环到该Message,调用
相应的handler对象的handle Message()方法对其进行处理。Handler都可以共享同一
Looper和MessageQueue。

消息处理机制流程如图3所示。在一个Activity中,系统会自动帮用户启动Looper
对象,Looper对象内部维护一个消息队列MessageQueue,调用loop方法后,Looper线程开始
工作,它不断从消息队列MessageQueue中取出队头的消息(也叫任务),分析取出的消息,通
过消息的参数判断该消息对应的Handler,通过Handler将消息发送给对应的worker
thread(工作线程)进行处理。

作为一种将上述消息处理机制处理方法应用于Android系统的实施例,在工作线
程执行完任务后,需要通知activity更新UI界面,一种常用的方法就是通过UI线程的
handler将Message、Runnable发送给UI线程,handler会将Message(Runnable也会封装成
Message)加入到UI线程的MessageQueue中,UI线程对应的Looper不断从MessageQueue中取
出Message,然后分发、再去执行。

在Android中handler用来进行进程间通信,Handler主要有send和post两种方法。
send方法是在工作线程中处理完操作后调用handler的sendMessage(message)把message
对象发送给主线程,在主线程中重写handlerMessage()方法,根据接收到的消息进行更新
UI的操作;而post方法传递的是一个runnable对象,更新UI的操作也是在这个runnable的
run方法中进行的,也就是说run方法中的代码是执行在主线程中的,虽然它是写在工作线
程中,主线程在接收到消息后自动执行runnable的run方法中的代码。其中,通过post方法
传递的Runnable也会被封装成Message对象,runnable赋值给Message对象的callback成
员,而send方法中Message的callback会为空。这两类方法最终都会调用
sendMessageAtTime(Message msg,long uptimeMillis),其中第二个参数uptimeMillis用
于将Message插入MessageQueue时会用到,入队列时将根据uptimeMillis大小排序,在队列
中寻找一个位置插入,即uptimeMillis越大的消息将越靠后处理。

根据Activity生命周期,UI界面销毁时会调用onDestroy(),为了减少占用内存,
很多开发者都会在onDestroy()里释放资源,将一些成员变量置空,如果一些工作线程处
理完逻辑后需要更新UI界面,但此时UI界面已销毁,工作线程引用到的变量已被置空,就会
导致空指针Crash。

针对上述现状,为了在产品开发阶段最大化发现这种由于UI界面销毁导致Crash
的问题,本实施例提供一种测试方法,可以提高复现界面销毁导致Crash的概率,帮助开发
任务定位问题。

在如实施例1的运行环境下,本申请提供了一种测试方法。该方法的一种可选的方
案包括如下步骤:

步骤一:确定目标任务,所述目标任务供被测应用调用。

图4是本发明实施例2揭示的确定目标任务的方法流程图。参见图4,确定目标任务
的一种可选方法包括如下步骤:

获取工作线程发送的待执行任务和待执行任务的延迟执行时间;

确定所述待执行任务是否是通过post发送的封装消息,若是,则

确定所述待执行任务是否供被测应用调用,若是,则

判断所述待执行任务的延迟执行时间是否小于预设的时长阈值,若是,则将所述
待执行任务确定为目标任务。

作为一种优选方式,所述确定所述待执行任务是否是通过post发送的封装消息,
包括:获取所述待执行任务的回调信息;判断所述回调信息是否为空,若是,确定所述待执
行任务不是通过post发送的封装消息,若否,确定所述待执行任务是通过post发送的封装
消息。

作为一种优选方式,所述确定确定所述待执行任务是否供被测应用调用,包括:获
取调用堆栈;判断调用堆栈是否包含被测应用信息,若是,确定所述待执行任务供被测应用
调用,若否,确定所述待执行任务不供被测应用调用。

具体来说,本步骤通过hook sendMessageAtTime方法获取两个参数Message(待执
行任务)和uptimeMillis(待执行任务的延迟执行时间),首先判断Message.callback是否
为空,若为空,说明是sendMessageXXX(Message)发过来的消息,不处理;不为空,说明是通
过postXXX(Runnable)发过来经过封装的消息;然后判断调用堆栈是否包括被测应用的信
息,若没有,说明是系统api调用postXXX(Runnable),不处理;否则是被测应用调用postXXX
(Runnable),然后判断第二个参数uptimeMillis,若大于某个设定值,说明开发者可能对这
个Runnable的反馈结果不太关注,不处理,若小于某个设定值,说明开发者希望这个
Runnable在短时间内得到处理,则可以确定postXXX(Runnable)是目标任务。

步骤二:延长所述目标任务的延迟执行时间。

在应用程序正常运行过程中,工作线程处理完任务后需要更新UI界面,而为了减
少内存占用,会调用函数onDestroy()销毁UI界面,如果在工作线程处理任务之前UI界面
已销毁,会因更新UI引用的变量为空导致Crash。为此,本实施例提出通过延迟工作线程处
理任务的时间,进而延迟UI界面更新,来提高发现这种Crash的概率。

作为一种优选方式,所述延长所述目标任务的延迟执行时间包括:将所述目标任
务的延迟执行时间乘以设定倍数,计算得到延长后的延迟执行时间;用延长后的延迟执行
时间替换所述延迟执行时间。

作为另一种优选方式,所述延长所述目标任务的延迟执行时间包括:将所述目标
任务的延迟执行时间加上设定时长,计算得到延长后的延迟执行时间;用延长后的延迟执
行时间替换所述延迟执行时间。

步骤三:根据延长后的延迟执行时间将所述目标任务插入任务队列。

经过步骤二中对目标任务延迟执行时间的修改,此步骤中将目标任务插入队列将
参考修改后的延迟执行时间,即:将修改后的延迟执行时间的长短与任务队列中各任务的
延迟执行时间的长短比较,按照延迟执行时间由小至大进行排序,按照目标任务的延迟执
行在任务队列中的排序序位,将目标任务插入任务队列。

步骤四:当所述目标任务处于任务队列的队头时,提取出所述目标任务。

步骤五:将所述目标任务分发至所述被测应用对应的工作线程,测试被测应用是
否发生崩溃。

UI主线程通过Looper循环查询任务队列,当发现任务队列中存在任务时,会将队
头任务从任务队列中取出。当目标任务处于任务队列的队头时,UI主线程提取出所述目标
任务,然后通过目标任务的参数判断该目标任务对应的Handler,将该目标任务通过指定的
Handler分发至被测应用对应的工作线程进行处理,若工作线程执行所述目标任务时,该目
标任务对应的变量已置空,则会导致空指针Crash,应用发生崩溃。本实施例通过在目标任
务延迟执行时间的基础上进一步延迟目标任务的执行,能够提高复现手机应用界面销毁导
致变量为空后再引用导致Crash的概率。

需要说明的是,对于前述的方法实施例,为了简单描述,故将其都表述为一系列的
动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依
据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,
说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必
须的。

实施例3

本实施例提供了一种实施上述测试方法的装置。图5所示的测试装置,可用于实施
实施例1所述的测试方法。如图5所示,该装置包括确定单元10、修改单元20、插入单元30、提
取单元40和发送单元50。其中:

确定单元10,用于确定目标任务,所述目标任务供被测应用调用;

修改单元20,用于延长所述目标任务的延迟执行时间;

插入单元30,用于根据延长后的延迟执行时间将所述目标任务插入任务队列;

提取单元40,用于当所述目标任务处于任务队列的队头时,提取出所述目标任务;

发送单元50,用于将所述目标任务分发至所述被测应用对应的工作线程,测试被
测应用是否发生崩溃。

该实施例的测试装置中,确定单元10用于执行本发明实施例1中的步骤S201,修改
单元20用于执行本发明实施例1中的步骤S202,插入单元30用于执行本发明实施例1中的步
骤S203,提取单元40用于执行本发明实施例1中的步骤S204,发送单元50用于执行本发明实
施例1中的步骤S205。

本实施例中,在将任务插入任务队列之前,先确定目标任务,并延长目标任务的延
迟执行时间,然后根据延长后的延迟执行时间将目标任务插入任务队列,从而推迟目标任
务的执行,能够提高复现手机应用界面销毁导致变量为空后再引用导致Crash的概率。

实施例4

本实施例还提供了一种实施上述测试方法的装置。图6所示的测试装置,可用于实
施实施例2所述的测试方法。如图6所示,该装置包括确定单元10、修改单元20、插入单元30、
提取单元40和发送单元50。其中:

确定单元10,用于确定目标任务,所述目标任务供被测应用调用;

修改单元20,用于延长所述目标任务的延迟执行时间;

插入单元30,用于根据延长后的延迟执行时间将所述目标任务插入任务队列;

提取单元40,用于当所述目标任务处于任务队列的队头时,提取出所述目标任务;

发送单元50,用于将所述目标任务分发至所述被测应用对应的工作线程,测试被
测应用是否发生崩溃。

可选地,所述确定单元包括获取子单元11、第一确定子单元12、第二确定子单元13
和第三确定子单元14。其中:

获取子单元11,用于获取工作线程发送的待执行任务和待执行任务的延迟执行时
间;

第一确定子单元12,用于确定所述待执行任务是否是通过post发送的封装消息;

第二确定子单元13,用于在确定所述待执行任务是通过post发送的封装消息时,
确定所述待执行任务是否供被测应用调用;

第三确定子单元14,用于在确定所述待执行任务是供被测应用调用时,判断所述
延迟执行时间是否小于预设的时长阈值,若是,则将所述待执行任务确定为目标任务。

可选地,所述第一确定子单元12包括第一获取模块121和第一确定模块122。其中:

第一获取模块121,用于获取所述待执行任务的回调信息;

第一确定模块122,用于判断所述回调信息是否为空,若是,确定所述待执行任务
不是通过post发送的封装消息,若否,确定所述待执行任务是通过post发送的封装消息。

所述第二确定子单元13包括第二获取模块131和第二确定模块132。其中:

第二获取模块131,用于获取调用堆栈;

第二确定模块132,用于判断调用堆栈是否包含被测应用信息,若是,确定所述待
执行任务供被测应用调用,若否,确定所述待执行任务不供被测应用调用。

作为一种可选的实施方式,所述修改单元20,具体用于将所述目标任务的延迟执
行时间乘以设定倍数或者加上设定时长,计算得到延长后的延迟执行时间;用延长后的延
迟执行时间替换所述延迟执行时间。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施
例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多
情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有
技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储
介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算
机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

实施例5

本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可
以用于保存上述实施例的一种测试方法所执行的程序代码。

可选地,在本实施例中,上述存储介质可以位于计算机网络的多个网络设备中的
至少一个网络设备。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:

第一步,确定目标任务,所述目标任务供被测应用调用;

第二步,延长所述目标任务的延迟执行时间;

第三步,根据延长后的延迟执行时间将所述目标任务插入任务队列;

第四步,当所述目标任务处于任务队列的队头时,提取出所述目标任务;

第五步,将所述目标任务分发至所述被测应用对应的工作线程,测试被测应用是
否发生崩溃。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:获取工作线程
发送的待执行任务和待执行任务的延迟执行时间;确定所述待执行任务是否是通过post发
送的封装消息,若是,则确定所述待执行任务是否供被测应用调用,若是,则判断所述待执
行任务的延迟执行时间是否小于预设的时长阈值,若是,则将所述待执行任务确定为目标
任务。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:获取所述待执
行任务的回调信息;判断所述回调信息是否为空,若是,确定所述待执行任务不是通过post
发送的封装消息,若否,确定所述待执行任务是通过post发送的封装消息。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:获取调用堆栈;
判断调用堆栈是否包含被测应用信息,若是,确定所述待执行任务供被测应用调用,若否,
确定所述待执行任务不供被测应用调用。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:将所述目标任
务的延迟执行时间乘以设定倍数或者加上设定时长,计算得到延长后的延迟执行时间;用
延长后的延迟执行时间替换所述延迟执行时间。

可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,
Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者
光盘等各种可以存储程序代码的介质。

实施例6

本发明的实施例还提供一种计算机终端,该计算机终端可以是计算机终端群中的
任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端
等终端设备。

可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中
的至少一个网络设备。

可选地,图7是根据本发明实施例的计算机终端的结构框图。如图7所示,该计算机
终端A可以包括:一个或多个(图中仅示出一个)处理器701、存储器703、以及传输装置705。

其中,存储器703可用于存储软件程序以及模块,如本发明实施例中的测试方法和
装置对应的程序指令/模块,处理器701通过运行存储在存储器703内的软件程序以及模块,
从而执行各种功能应用以及数据处理,即实现上述的测试。存储器703可包括高速随机存储
器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性
固态存储器。在一些实例中,存储器703可进一步包括相对于处理器701远程设置的存储器,
这些远程存储器可以通过网络连接至计算机终端A。上述网络的实例包括但不限于互联网、
企业内部网、局域网、移动通信网及其组合。

上述的传输装置705用于经由一个网络接收或者发送数据。上述的网络具体实例
可包括有线网络及无线网络。在一个实例中,传输装置705包括一个网络适配器,其可通过
网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传
输装置705为射频模块,其用于通过无线方式与互联网进行通讯。

其中,具体地,存储器703用于存储预设动作条件和预设权限用户的信息、以及应
用程序。

处理器701可以通过传输装置调用存储器703存储的信息及应用程序,以执行下述
步骤:

第一步,确定目标任务,所述目标任务供被测应用调用;

第二步,延长所述目标任务的延迟执行时间;

第三步,根据延长后的延迟执行时间将所述目标任务插入任务队列;

第四步,当所述目标任务处于任务队列的队头时,提取出所述目标任务;

第五步,将所述目标任务分发至所述被测应用对应的工作线程,测试被测应用是
否发生崩溃。

本实施例中的具体示例可以参考上述实施例1和实施例2中所描述的示例,在此不
再赘述。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品
销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技
术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软
件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一
台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所
述方法的全部或部分步骤。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有
详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方
式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一
种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者
可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之
间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连
接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显
示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目
的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以
是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单
元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

一种测试方法及装置.pdf_第1页
第1页 / 共19页
一种测试方法及装置.pdf_第2页
第2页 / 共19页
一种测试方法及装置.pdf_第3页
第3页 / 共19页
点击查看更多>>
资源描述

《一种测试方法及装置.pdf》由会员分享,可在线阅读,更多相关《一种测试方法及装置.pdf(19页珍藏版)》请在专利查询网上搜索。

本发明涉及移动测试技术领域,尤其涉及一种测试方法和装置。通过获取待执行任务,从待执行任务中确定目标任务,并延长目标任务的延迟执行时间,然后根据延长后的延迟执行时间将目标任务插入任务队列,从而推迟目标任务的执行。在目标任务执行前,如果对应的界面被销毁导致变量为空,则在工作线程执行目标任务时对应的应用就会发生崩溃。本发明通过在延迟执行时间的基础上进一步推迟目标任务的执行,能够提高复现手机应用界面销毁导。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1