CN106708737A - 一种测试方法及装置 - Google Patents

一种测试方法及装置 Download PDF

Info

Publication number
CN106708737A
CN106708737A CN201611191131.8A CN201611191131A CN106708737A CN 106708737 A CN106708737 A CN 106708737A CN 201611191131 A CN201611191131 A CN 201611191131A CN 106708737 A CN106708737 A CN 106708737A
Authority
CN
China
Prior art keywords
task
delay
pending
goal
tested application
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201611191131.8A
Other languages
English (en)
Other versions
CN106708737B (zh
Inventor
鲁可
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201611191131.8A priority Critical patent/CN106708737B/zh
Publication of CN106708737A publication Critical patent/CN106708737A/zh
Application granted granted Critical
Publication of CN106708737B publication Critical patent/CN106708737B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system

Abstract

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

Description

一种测试方法及装置
技术领域
本发明涉及移动测试技术领域,尤其涉及一种测试方法及装置。
背景技术
随着智能手机的发展,出现了多种支持智能手机的系统,比如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将消息发送给对应的workerthread(工作线程)进行处理。
作为一种将上述消息处理机制处理方法应用于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中所描述的示例,在此不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

Claims (10)

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所述的装置,其特征在于,
所述修改单元,具体用于将所述目标任务的延迟执行时间乘以设定倍数或者加上设定时长,计算得到延长后的延迟执行时间;用延长后的延迟执行时间替换所述延迟执行时间。
CN201611191131.8A 2016-12-21 2016-12-21 一种测试方法及装置 Active CN106708737B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611191131.8A CN106708737B (zh) 2016-12-21 2016-12-21 一种测试方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611191131.8A CN106708737B (zh) 2016-12-21 2016-12-21 一种测试方法及装置

Publications (2)

Publication Number Publication Date
CN106708737A true CN106708737A (zh) 2017-05-24
CN106708737B CN106708737B (zh) 2020-06-26

Family

ID=58939370

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611191131.8A Active CN106708737B (zh) 2016-12-21 2016-12-21 一种测试方法及装置

Country Status (1)

Country Link
CN (1) CN106708737B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107741891A (zh) * 2017-10-17 2018-02-27 网易(杭州)网络有限公司 对象的析构方法、介质、装置和计算设备
CN111625336A (zh) * 2020-05-22 2020-09-04 金蝶软件(中国)有限公司 线程数据处理方法及其装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103927240A (zh) * 2014-05-06 2014-07-16 成都西加云杉科技有限公司 应对软件崩溃的信息转储方法和装置
CN104050075A (zh) * 2013-03-11 2014-09-17 百度国际科技(深圳)有限公司 Andriod应用程序的测试方法和装置
CN104461876A (zh) * 2014-11-26 2015-03-25 北京航空航天大学 一种基于运行快照序列的并行程序重现调试方法
US20150121337A1 (en) * 2013-10-31 2015-04-30 Red Hat, Inc. Regular expression support in instrumentation languages using kernel-mode executable code
CN105745645A (zh) * 2013-11-01 2016-07-06 柯宝科技公司 确定网页处理状态
CN106095682A (zh) * 2016-06-15 2016-11-09 浪潮软件集团有限公司 一种模拟复杂网络的安卓应用稳定性测试方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104050075A (zh) * 2013-03-11 2014-09-17 百度国际科技(深圳)有限公司 Andriod应用程序的测试方法和装置
US20150121337A1 (en) * 2013-10-31 2015-04-30 Red Hat, Inc. Regular expression support in instrumentation languages using kernel-mode executable code
CN105745645A (zh) * 2013-11-01 2016-07-06 柯宝科技公司 确定网页处理状态
CN103927240A (zh) * 2014-05-06 2014-07-16 成都西加云杉科技有限公司 应对软件崩溃的信息转储方法和装置
CN104461876A (zh) * 2014-11-26 2015-03-25 北京航空航天大学 一种基于运行快照序列的并行程序重现调试方法
CN106095682A (zh) * 2016-06-15 2016-11-09 浪潮软件集团有限公司 一种模拟复杂网络的安卓应用稳定性测试方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
ANKUR DAVE等: "CloudClustering Toward an iterative data processing pattern on the cloud", 《2011 IEEE INTERNATIONAL PARALLEL & DISTRIBUTED PROCESSING SYMPOSIUM》 *
姜雨蒙等: "一种Android运行时异常复现方法", 《计算机与数字工程》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107741891A (zh) * 2017-10-17 2018-02-27 网易(杭州)网络有限公司 对象的析构方法、介质、装置和计算设备
CN111625336A (zh) * 2020-05-22 2020-09-04 金蝶软件(中国)有限公司 线程数据处理方法及其装置
CN111625336B (zh) * 2020-05-22 2024-03-19 金蝶软件(中国)有限公司 线程数据处理方法及其装置

Also Published As

Publication number Publication date
CN106708737B (zh) 2020-06-26

Similar Documents

Publication Publication Date Title
CN108108297B (zh) 自动化测试的方法和装置
CN110704186A (zh) 基于混合分布架构的计算资源分配方法、装置和存储介质
CN107158705A (zh) 服务的更新方法和装置
CN107656864A (zh) 一种基于概率模型的移动应用自动化测试方法
CN106775981B (zh) 一种进程处理方法、装置及计算机可读介质
CN111258680B (zh) 资源加载方法和装置、存储介质及电子装置
CN103176892A (zh) 一种页面监控方法及系统
CN106874089A (zh) 一种应用程序自启动的处理方法、装置及移动终端
CN107992315A (zh) 一种应用程序自动升级方法及存储介质
CN106155746B (zh) 一种安装文件处理方法及装置、服务器
CN106528293A (zh) 一种访问数据库的方法及装置
CN106708737A (zh) 一种测试方法及装置
CN112988185A (zh) 云应用更新方法、装置、系统、电子设备及存储介质
CN106843977A (zh) 一种应用程序自启动的处理方法、装置及移动终端
CN103559063A (zh) 应用程序的更新方法、系统及应用程序系统和参数据配置系统
CN111367506A (zh) 数据生成方法、装置、存储介质及电子装置
CN106484545A (zh) 调用子程序的方法及装置
CN106126320A (zh) 一种终端性能优化的方法、装置以及终端
CN105554090A (zh) 指引处理方法、系统及游戏系统
CN113031991A (zh) 一种嵌入式系统的远程自适应升级方法及其装置
CN111831452A (zh) 任务执行方法、装置、存储介质及电子装置
CN106599156B (zh) 一种基于struts2拦截器的动态拦截器管理方法
CN105487847B (zh) 一种功能发布方法和设备
CN105760209A (zh) 移除虚拟机的方法、装置与自动弹性群组
CN113595797A (zh) 告警信息的处理方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant