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

文档序号:9844012阅读:149来源:国知局
一种基于异步线程的测试方法和装置的制造方法
【技术领域】
[0001] 本申请涉及测试技术领域,特别是涉及一种基于异步线程的测试方法和一种基于 异步线程的测试装置。
【背景技术】
[0002] 程序测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚 至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行 分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。
[0003] Java(-种可以撰写跨平台应用软件的面向对象的程序设计语言)的多线程/异 步线程是在系统实现过程中使用的非常多的一种实现手段,常用的servlet (服务端程序) 或者C/S(Client/Server或客户/服务器模式)结构的窗体工作于与后台处理是多线程 的,以减少用户在前台等待的时间;再比如为了提高系统或应用程序的性能,可以采用多线 程提高系统或应用程序的并发处理能力等。
[0004] 这种异步多线程的实现方式给系统实现和性能提升上面带来了很大的好处,但是 也给系统的测试上面增加了难度。
[0005] 目前涉及到异步线程的测试,尤其是UI (User Interface,用户界面)自动化和接 口测试,都是调用某接口测试脚本,而该接口内部使用了异步线程的实现方式,脚本功能是 否正确需要对接口内部的处理结果进行校验。
[0006] 但因为处理逻辑是异步线程执行的,如果在异步线程处理结束之前,调用的接口 就返回结果,这个时候就去校验结果,会因为内部异步线程还没有处理结果使得校验结果 出错。所以现在一般在调用接口之后使用sle印(η)函数等待时间n,待内部异步线程处理 结束后,再进行结果校验。
[0007] 由于异步线程需要耗费多长时间不固定,受环境等因为影响较大,所以等待的时 间n,一般都是基于经验值,设置为所有环境下该异步线程执行需要的最大时间,用以提高 测试用例的成功率。
[0008] 但正是由于等待的时间η是基于经验值,并不能保证在等待了时间η后,对应的异 步线程一定执行结束了,测试用例的成功率低。
[0009] 并且,在大部分场景下可能不需要等待时间η那么久,就造成了虽然异步线程已 经处理结束了,但是系统还在等待,造成测试耗时过长,降低了测试执行效率,尤其在自动 化执行过程中,当涉及的测试用例数量比较多的时候,尤其明显。
[0010] 如果这里不采用等待时间η的方式,一般就需要手工断点(debug模式),等异步 线程执行完再执行测试脚本校验逻辑。这种方式只能进行手工测试覆盖,成本很高,效率很 低。
[0011] 因此,目前需要本领域技术人员迫切解决的一个技术问题就是:如何提出一种基 于异步线程的测试机制,用以提高测试用例的成功率,减少测试耗时,提高测试效率。

【发明内容】

[0012] 本申请实施例所要解决的技术问题是提供一种基于异步线程的测试方法,用以提 高测试用例的成功率,减少测试耗时,提高测试效率。
[0013] 相应的,本申请实施例还提供了一种基于异步线程的测试装置,用以保证上述方 法的实现及应用。
[0014] 为了解决上述问题,本申请实施例公开了一种基于异步线程的测试方法,包括:
[0015] 检测目标线程的第一数量;所述目标线程为线程池类中执行测试对象的异步线 程;
[0016] 调用所述目标线程执行所述测试对象;
[0017] 检测所述目标线程的第二数量;
[0018] 当所述第一数量与所述第二数量相等时,对所述目标线程执行测试对象获得的执 行结果进行校验。
[0019] 优选地,所述线程池类具有获取活跃线程数量的方法;所述检测目标线程的第一 数量的步骤包括:
[0020] 调用所述获取活跃线程数量的方法,获得目标线程的第一数量。
[0021] 优选地,所述调用所述目标线程执行所述测试对象的步骤包括:
[0022] 传入执行所述测试对象所需的参数;
[0023] 在所述目标线程中按照所述参数执行所述测试对象。
[0024] 优选地,所述检测所述目标线程的第二数量的步骤包括:
[0025] 调用所述获取活跃线程数量的方法,获得所述目标线程的第二数量。
[0026] 优选地,还包括:
[0027] 当所述第一数量与所述第二数量相异时,返回执行所述检测所述目标线程的第二 数量的步骤。
[0028] 优选地,所述线程池类包括ThreadPoolExecutor,所述获取活跃线程数量的方法 包括 getActiveCount。
[0029] 本申请实施例还公开了一种基于异步线程的测试装置,包括:
[0030] 第一检测模块,用于检测目标线程的第一数量;所述目标线程为线程池类中执行 测试对象的异步线程;
[0031] 测试模块,用于调用所述目标线程执行所述测试对象;
[0032] 第二检测模块,用于检测所述目标线程的第二数量;
[0033] 校验模块,用于在所述第一数量与所述第二数量相等时,对所述目标线程执行测 试对象获得的执行结果进行校验。
[0034] 优选地,所述线程池类具有获取活跃线程数量的方法;所述第一检测模块包括:
[0035] 第一调用子模块,用于调用所述获取活跃线程数量的方法,获得目标线程的第一 数量。
[0036] 优选地,所述测试模块包括:
[0037] 传入子模块,用于传入执行所述测试对象所需的参数;
[0038] 执行子模块,用于在所述目标线程中按照所述参数执行所述测试对象。
[0039] 优选地,所述第二检测模块包括:
[0040] 第二调用子模块,用于调用所述获取活跃线程数量的方法,获得所述目标线程的 第二数量。
[0041] 优选地,还包括:
[0042] 循环模块,用于在所述第一数量与所述第二数量相异时,返回调用第二检测模块。
[0043] 优选地,所述线程池类包括ThreadPoolExecutor,所述获取活跃线程数量的方法 包括 getActiveCount。
[0044] 与【背景技术】相比,本申请实施例包括以下优点:
[0045] 本申请实施例在执行测试对象之前,检测目标线程的第一数量,在执行测试对象 之后,检测目标线程的第二数量,在第一数量与第二数量相等时,对目标线程执行测试对象 获得的执行结果进行校验,准确地判断目标线程是否执行结束,在目标线程结束后进行结 果校验,一方面不会浪费多余的时间进行等待,减少测试耗时,另一方面避免因为目标线程 还没执行完就校验结果导致测试校验失败,提高了测试用例的成功率,进而提高了测试效 率。
【附图说明】
[0046] 图1是一种基于sleep函数进行结果校验的示例图;
[0047] 图2是本申请的一种基于异步线程的测试方法实施例的步骤流程图;
[0048] 图3是本申请的一种获取活跃线程数量的方法的执行示例图;
[0049] 图4是本申请的一种测试方法的示例图;
[0050] 图5是本申请的一种基于异步线程的测试装置实施例的结构框图。
【具体实施方式】
[0051] 为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实 施方式对本申请作进一步详细的说明。
[0052] 对于多线程并发时,多个线程同时请求同一个资源,必然会导致资源的数据存在 安全性,当多个线程要操作的数据是单点时,那么这些线程就不能并发执行,而需要等待串 行执行,被称之为同步线程;但当这些多线程操作的资源数据不是单点,各自分离,或者多 个线程之间要操作的内容没有依赖性,相互独立,就不需要串行等待了,而可以并发执行, 以此来加快执行效率,这类被称之为异步线程。
[0053] 在程序、系统设计实现时,经常会用到这个异步线程技术。比如,在一次程序处理 里面,线程A需要执行三个任务,因为线程A是单例,那么一般的处理方式是,先处理任务1, 再处理任务2,最后处理任务3。但在处理完任务1后,发现任务2和任务3之间并没有依 赖关系,也就是说执行没有先后顺序,可以并行处理。这个时候可以获取另一个线程B,让线 程B去执行任务2,然后线程A并发执行任务3,可以极大的提高处理效率。
[0054] 在异步线程并发处理时,有个缺点,就是从线程A中不知道线程B什么时候执行结 束。
[0055] 因此,如图1所示,现在一般在使用测试脚本调用接口之后,使用sle印(η)函数等 待时间η,再进行结果校验。导致即使在被测对象调用结束后,无法判断当前内部处理是否 已经全部结束,如果这时候去校验结果数据,不管是否正确都无法确定该结果是不是本次 处理产生的。
[0056] 但是这样测试用例成功率低,并且测试耗时过长,降低了测试效率。
[0057] 基于此,提出了本申请实施例的核心构思之一,通过异步线程的属性得知内部异 步线程是否已经执行完成,在等待异步线程执行完成后再进行结果校验,确保本次校验的 结果数据是内部异步线程执行完产生的。
[0058] 参照图2,
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1