一种基于异步线程的测试方法和装置的制造方法_2

文档序号:9844012阅读:来源:国知局
示出了本申请的一种基于异步线程的测试方法实施例的步骤流程图,具 体可以包括如下步骤:
[0059] 步骤101,检测目标线程的第一数量;
[0060] 需要说明的是,本申请实施例可以应用于Java语言的环境中,Java可以提供一个 线程池类,线程池类可以是指一个线程的容器,在这个容器中管理额定数量的线程。例如, 该线程池类可以包括ThreadPoolExecutor等等。
[0061] 在线程池中的每个线程可以被用来初始化执行各个异步操作,因此,线程池中的 线程可以称为异步线程。
[0062] 在本申请实施例中,所述目标线程可以为线程池类中执行测试对象的异步线程。
[0063] 所述线程池类可以具有获取活跃线程数量的方法,例如,所述获取活跃线程数量 的方法可以包括getActiveCount等等,该获取活跃线程数量的方法可以返回主动执行任 务的近似线程数,即返回当前活跃有效(active)的线程数量。
[0064] 如图3所示,调用同步接口,在状态301中,当前已有活跃线程为η个;触发了一次 异步线程就会增加一个活跃(active)线程数量,在状态302中,活跃线程数为η+1 ;当前已 当该异步线程内的内容执行完成后,当前异步线程生命周期终结,就会变成非活跃线程,活 跃线程数量减一,在状态303中,活跃线程数为η。
[0065] 测试对象可以为进行测试的对象,具体可以包括Java程序等等。
[0066] 在本申请的一种优选实施例中,步骤101可以包括如下子步骤:
[0067] 子步骤S11,调用所述获取活跃线程数量的方法,获得目标线程的第一数量。
[0068] 本申请实施例中,调用所述获取活跃线程数量的方法返回的线程数量可以是被指 定去处理特定任务(例如执行测试对象)的线程的数量。
[0069] 而这类处理特定任务的线程一般会被标示上特殊的属性,比如线程名,定义特殊 的线程变量。
[0070] 通常所有的线程都是在线程池类里的,使用线程的时候可以给使用中的线程标示 上特殊的属性,这样就可以知道整个线程池类中哪些线程是正在执行特定任务的线程。
[0071] -个线程如果被激活执行某程序,则可以认为是活跃的,执行结束后就会被释放 回线程池类中。
[0072] 本申请实施例中获得的不是所有活跃线程数,而是执行特定任务的活跃线程数, Java中提供了获取活跃线程数量的方法(例如getActionCount)来返回当前属性的活跃线 程数,通过调用Java中提供的获取活跃线程数量的方法(例如getActionCount)则可以获 得执行特定任务的活跃线程数。
[0073] 例如,所有执行任务C的线程名为taskCexecutor,执行任务D的线程名为 taskDexecutor,那么调用taskCexecutor. getActiveCount,返回的就是所有正在执行任务 C的线程数量,调用taskDexecutor. getActiveCount,返回的就是所有正在执行任务D的线 程数量。
[0074] 在实际应用中,可以在调用目标线程执行测试对象前,调用获取活跃线程数量的 方法,获得目标线程的第一数量,由于目标线程还未执行测试对象,因此,第一数量一般为 0〇
[0075] 步骤102,调用所述目标线程执行所述测试对象;
[0076] 在具体实现中,可以对测试对象中的全部或部分功能进行测试,以确保该测试对 象在正式运行前能按预定的方式正确地运行。
[0077] 在本申请的一种优选实施例中,步骤102可以包括如下子步骤:
[0078] 子步骤S21,传入执行所述测试对象所需的参数;
[0079] 子步骤S22,在所述目标线程中按照所述参数执行所述测试对象。
[0080] 在本申请实施例中,可以通过测试脚本实现测试对象的执行。
[0081] 具体而言,测试脚本可以指测试代码,通过运行测试代码来调用应用或者系统的 接口方法,提供是触发执行测试对象的执行入口。
[0082] 举例,一个系统通过webservice服务的方式对外提供服务,而测试脚本的逻辑可 以是通过调用这个webservice服务,传入参数,让测试对象按照内部的逻辑执行处理,而 目标线程可以是测试对象内部相关逻辑的实现方式。
[0083] 步骤103,检测所述目标线程的第二数量;
[0084] 在实际应用中,可以在调用目标线程执行测试对象后,调用获取活跃线程数量的 方法,获得目标线程的第二数量。
[0085] 在本申请的一种优选实施例中,步骤103可以包括如下子步骤:
[0086] 子步骤S31,调用所述获取活跃线程数量的方法,获得所述目标线程的第二数量。
[0087] 本申请实施例中通过调用Java中提供的获取活跃线程数量的方法(例如 getActionCount)则可以获得执行特定任务(例如执行测试对象)的活跃线程数,以监控内 部的目标线程是否已经执行完成。
[0088] 步骤104,当所述第一数量与所述第二数量相等时,对所述目标线程执行测试对象 获得的执行结果进行校验。
[0089] 在执行测试对象之前,假设特定的活跃线程数(即第一数量)是n,调用测试对象 后,因为测试对象内部处理需要开启新的线程处理相关逻辑,所以特定的活跃线程数(即 第二数量)会变成n+m(m为测试对象内部处理相关逻辑需要开启的线程数,m>0),这样当 测试对象内部相关逻辑被处理完成后,这些开启的线程就会被释放掉,特定的活跃线程数 (即第二数量)又会变成开始之前的η。
[0090] 所以,当第一数量与第二数量相等时,则可以表示内部的目标线程执行完成,内部 处理结束了,可以对输出结果进行校验了。
[0091] 在具体实现中,可以采用测试脚本校验输出值验证应用或者系统逻辑是否正确。
[0092] 在本申请的一种优选实施例中,所述的方法还可以包括如下步骤:
[0093] 步骤105,当所述第一数量与所述第二数量相异时,返回执行步骤103。
[0094] 在本申请实施例中,当第一数量与第二数量相异(即不相等)时,则可以表示内部 的目标线程未执行完成,内部未处理结束了,需要继续等待目标线程执行完成再进行结果 校验。
[0095] 本申请实施例在执行测试对象之前,检测目标线程的第一数量,在执行测试对象 之后,检测目标线程的第二数量,在第一数量与第二数量相等时,对目标线程执行测试对象 获得的执行结果进行校验,准确地判断目标线程是否执行结束,在目标线程结束后进行结 果校验,一方面不会浪费多余的时间进行等待,减少测试耗时,另一方面避免因为目标线程 还没执行完就校验结果导致测试校验失败,提高了测试用例的成功率,进而提高了测试效 率。
[0096] 为使本领域技术人员更好地理解本申请实施例,在本申请实施例中,将存钱逻辑 作为测试对象的一种示例进行说明。
[0097] 一段存钱逻辑代码示例如下:
[0098]
[0099]
[0100] 这个测试对象的功能是将钱存进账户,其中存钱的具体执行是通过异步线程 saveMoneyProcessor去执行的,什么时候存钱结束无法从接口方法得知。
[0101] 传统基于sleep ()函数的测试方式如下:
[0102]
[0103] 从上面示例可以看出,由于不明确存钱的异步线程什么时候执行完,所以必须等 待,而这个时间又不确定,一般只能依靠经验值选择一个比较大的时间,造成效率上的低下 和测试通过率不高。
[0104] 如图4所示,应用本申请实施例的方式如下:
[0105]
[0106] 当判断目标线程结束后,可以判断钱已经存入了账户,保证了测试用例的陈功率, 以及,可以立即执行校验,不会有任何的多余等待时间,减少了测试耗时,进而提高了测试 效率。
[0107] 需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组 合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依 据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该 知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施 例所必须的。
[0108] 参照图5,示出了本申请一种基于异步线程的测试装置实施例的结构框图,具体可 以包括如下模块:
[0109] 第一检测模块501,用于检测目标线程的第一数量;所述目标线程为线程池类中 执行测试对象的异步线程;
[0110] 测试模块502,用于调用所述目标线程执行所述测试对象;
[0111] 第二检测模块503,用于检测所述目标线程的第二数量;
[0112] 校验模块504,用于在所述第一数量与所述第二数量相等时,对所述目标线程执行 测试对象获得的执行结果进行校验。
[0113] 在本申请的一种优选实施例中,所述线程池类可以具有获取活跃线程数量的方 法;所述第一检测模块501可以包括如下子模块:
[0114] 第一调用子模块,用于调用所述获取
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1