一种静态库测试方法及装置转让专利

申请号 : CN201410404700.7

文献号 : CN105335286B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘晶匡波丁世远

申请人 : 阿里巴巴集团控股有限公司

摘要 :

本申请公开了一种静态库测试方法及装置,其通过将待测试的静态库编译为具有预设接口的动态库,获取具有与所述预设接口一一对应的调用接口的框架文件,执行所述框架文件,以通过调用接口实现对预设接口的调用,使得动态库中相应的代码或数据被执行,由于框架文件的实际执行结果可以反映待测试的静态库的实际执行结果,故通过分析框架文件的实际执行结果即可得到静态库的性能信息。由于实现动态库调用的预设接口是统一的,使得对应的框架文件中的调用接口也是固定的,所以框架文件可以被任一待测试的静态库所复用,不需要针对每个静态库设置对应的框架文件,可以降低测试过程的复杂度,提高测试效率。

权利要求 :

1.一种静态库测试方法,其特征在于,包括:

将待测试的静态库编译为具有预设接口的动态库;

获取具有与所述预设接口对应的调用接口的框架文件;

执行所述框架文件,以通过所述调用接口和对应的预设接口调用所述动态库;以及根据所述框架文件的实际执行结果分析所述静态库的性能。

2.根据权利要求1所述的静态库测试方法,其特征在于,所述预设接口包括:用于实现资源初始化的主线程初始化函数、用于实现资源释放的主线程销毁函数、用于实现资源创建的子线程初始化函数、用于实现资源销毁的子线程销毁函数、子线程运行函数和结果输出函数。

3.根据权利要求2所述的静态库测试方法,其特征在于,执行所述框架文件,以通过所述调用接口和对应的预设接口调用所述动态库,包括:依次调用并执行所述主线程初始化函数和子线程初始化函数;

获取有效输入值;

调用并执行所述子线程运行函数,得到与所述有效输入值对应的子线程运行结果;

调用并执行所述结果输出函数,以将所述子线程运行结果编辑为符合预设格式的实际执行结果,并输出所述实际执行结果;以及依次调用并执行所述子线程销毁函数和主线程销毁函数。

4.根据权利要求3所述的静态库测试方法,其特征在于,所述获取有效输入值,包括:判断是否接收到输入值;

如果接收到输入值,则判断接收到的输入值是否满足预设测试条件;

如果所述接收到的输入值满足预设测试条件,则判定所述接收到的输入值为有效输入值;以及如果所述接收到的输入值不满足预设测试条件,或者没有接收到输入值,则直接执行所述依次调用并执行所述子线程销毁函数和主线程销毁函数的步骤。

5.根据权利要求3所述的静态库测试方法,其特征在于,所述根据所述框架文件的实际执行结果分析所述静态库的性能,包括:将所述实际执行结果与所述有效输入值对应的预设输出值进行比较;

如果所述实际执行结果与所述预设输出值之间的误差在预设范围内,则判定所述静态库的相关性能正常,否则判定所述静态库的相关性能异常。

6.一种静态库测试装置,其特征在于,包括:

编译单元,用于将待测试的静态库编译为具有预设接口的动态库;

获取单元,用于获取具有与所述预设接口对应的调用接口的框架文件;

执行单元,用于执行所述框架文件,以通过所述调用接口和对应的预设接口调用所述动态库;以及分析单元,用于根据所述框架文件的实际执行结果分析所述静态库的性能。

7.根据权利要求6所述的静态库测试装置,其特征在于,所述预设接口包括:用于实现资源初始化的主线程初始化函数、用于实现资源释放的主线程销毁函数、用于实现资源创建的子线程初始化函数、用于实现资源销毁的子线程销毁函数、子线程运行函数和结果输出函数。

8.根据权利要求7所述的静态库测试装置,其特征在于,所述执行单元包括:第一执行子单元、第二执行子单元、第三执行子单元、第四执行子单元、第五执行子单元、第六执行子单元和接收子单元;

所述第一执行子单元,用于调用并执行所述主线程初始化函数,并触发所述第二执行子单元;

所述第二执行子单元,用于调用并执行所述子线程初始化函数,并触发所述接收子单元;

所述接收子单元,用于获取有效输入值,并在获取到有效输入值后,触发所述第三执行子单元;

所述第三执行子单元,用于调用并执行所述子线程运行函数,得到与所述有效输入值对应的子线程运行结果,并触发所述第四执行子单元;

所述第四执行子单元,用于调用并执行所述结果输出函数,以将所述子线程运行结果编辑为符合预设格式的实际执行结果,并输出所述实际执行结果,并触发所述第五执行子单元;

所述第五执行子单元,用于调用并执行所述子线程销毁函数,并触发所述第六执行子单元;以及所述第六执行子单元,用于调用并执行所述主线程销毁函数。

9.根据权利要求8所述的静态库测试装置,其特征在于,所述接收子单元包括:第一判断单元,用于判断是否接收到输入值;

第二判断单元,用于在接收到输入值时,判断接收到的输入值是否满足预设测试条件,如果所述接收到的输入值满足预设测试条件,则判定所述接收到的输入值为有效输入值,并触发所述第三执行子单元;以及跳转触发单元,用于在所述接收到的输入值不满足预设测试条件,或者没有接收到输入值时,触发所述第五执行子单元。

10.根据权利要求8所述的静态库测试装置,其特征在于,所述分析单元包括:比较单元,用于将所述实际执行结果与所述有效输入值对应的预设输出值进行比较,如果所述实际执行结果与所述预设输出值之间的误差在预设范围内,则判定所述静态库的相关性能正常,否则判定所述静态库的相关性能异常。

说明书 :

一种静态库测试方法及装置

技术领域

[0001] 本发明涉及计算机技术领域,特别是涉及一种静态库测试方法及装置。

背景技术

[0002] 编程过程中,同一段代码或数据可能会应用于不同的程序中,或者在同一程序中被多次调用;为提高编程效率,通常将这些被反复应用的代码及数据编译为公共的函数库,方便程序调用。上述函数库包括静态库和动态库两种。
[0003] 为了保证代码的正确性,需要对函数库进行测试。对于静态库,由于其文件只是一些目标程序的组合,无法直接运行,因此常用的静态库测试方法为:编写一段代码调用静态库,生成可执行文件,运行该可执行文件,通过分析运行结果来判断静态库的相关性能是否正常。
[0004] 通过上述方法对静态库测试,需要针对每个静态库编写一段完整的测试代码,并生成相应的可执行文件,以实现对该静态库的调用,且静态库升级后,即使静态库本身的变化很少,原可执行文件也不再适用,还需要编写新的测试代码、调用升级后的静态库并生成新的可执行文件,才能实现对升级后的静态库的测试。可见,上述静态库测试方法中用于测试的可执行文件不可复用,进而导致测试过程繁琐、测试效率低。

发明内容

[0005] 本申请实施例中提供了一种静态库测试方法及装置,以解决现有静态库测试方法中用于测试的可执行文件不可复用、测试过程繁琐、效率低的问题。
[0006] 为了解决上述技术问题,本申请公开了如下技术方案:
[0007] 本申请第一方面,公开了一种静态库测试方法;所述静态库测试方法包括:
[0008] 将待测试的静态库编译为具有预设接口的动态库;
[0009] 获取具有与所述预设接口对应的调用接口的框架文件;
[0010] 执行所述框架文件,以通过所述调用接口和对应的预设接口调用所述动态库;以及
[0011] 根据所述框架文件的实际执行结果分析所述静态库的性能。
[0012] 结合第一方面,在第一方面第一种可能的实现方式中,所述预设接口包括:
[0013] 用于实现资源初始化的主线程初始化函数、用于实现资源释放的主线程销毁函数、用于实现资源创建的子线程初始化函数、用于实现资源销毁的子线程销毁函数、子线程运行函数和结果输出函数。
[0014] 结合第一方面第一种可能的实现方式,在第一方面第二种可能的实现方式中,执行所述框架文件,以通过所述调用接口和对应的预设接口调用所述动态库,包括:
[0015] 依次调用并执行所述主线程初始化函数和子线程初始化函数;
[0016] 获取有效输入值;
[0017] 调用并执行所述子线程运行函数,得到与所述有效输入值对应的子线程运行结果;
[0018] 调用并执行所述结果输出函数,以将所述子线程运行结果编辑为符合预设格式的实际执行结果,并输出所述实际执行结果;以及
[0019] 依次调用并执行所述子线程销毁函数和主线程销毁函数。
[0020] 结合第一方面第二种可能的实现方式,在第一方面第三种可能的实现方式中,所述获取有效输入值,包括:
[0021] 判断是否接收到输入值;如果接收到输入值,则判断接收到的输入值是否满足预设测试条件;
[0022] 如果所述接收到的输入值满足预设测试条件,则判定所述接收到的输入值为有效输入值;以及如果所述接收到的输入值不满足预设测试条件,或者没有接收到输入值,则直接执行所述依次调用所述子线程销毁函数和主线程销毁函数的步骤。
[0023] 结合第一方面第二种可能的实现方式,在第一方面第四种可能的实现方式中,所述根据所述框架文件的实际执行结果分析所述静态库的性能,包括:
[0024] 将所述实际执行结果与所述有效输入值对应的预设输出值进行比较;
[0025] 如果所述实际执行结果与所述预设输出值之间的误差在预设范围内,则判定所述静态库的相关性能正常,否则判定所述静态库的相关性能异常。
[0026] 本申请第二方面,公开了一种静态库测试装置;所述静态库测试装置包括:
[0027] 编译单元,用于将待测试的静态库编译为具有预设接口的动态库;
[0028] 获取单元,用于获取具有与所述预设接口对应的调用接口的框架文件;
[0029] 执行单元,用于执行所述框架文件,以通过所述调用接口和对应的预设接口调用所述动态库;以及
[0030] 分析单元,用于根据所述框架文件的实际执行结果分析所述静态库的性能。
[0031] 结合第二方面,在第二方面第一种可能的实现方式中,所述预设接口包括:用于实现资源初始化的主线程初始化函数、用于实现资源释放的主线程销毁函数、用于实现资源创建的子线程初始化函数、用于实现资源销毁的子线程销毁函数、子线程运行函数和结果输出函数。
[0032] 结合第二方面第一种可能的实现方式,在第二方面第二种可能的实现方式中,所述执行单元包括:第一执行子单元、第二执行子单元、第三执行子单元、第四执行子单元、第五执行子单元、第六执行子单元和接收子单元;
[0033] 所述第一执行子单元,用于调用并执行所述主线程初始化函数,并触发所述第二执行子单元;所述第二执行子单元,用于调用并执行所述子线程初始化函数,并触发所述接收子单元;所述接收子单元,用于获取有效输入值,并在获取到有效输入值后,触发所述第三执行子单元;所述第三执行子单元,用于调用并执行所述子线程运行函数,得到与所述有效输入值对应的子线程运行结果,并触发所述第四执行子单元;所述第四执行子单元,用于调用并执行所述结果输出函数,以将所述子线程运行结果编辑为符合预设格式的实际执行结果,并输出所述实际执行结果,并触发所述第五执行子单元;所述第五执行子单元,用于调用并执行所述子线程销毁函数,并触发所述第六执行子单元;以及所述第六执行子单元,用于调用并执行所述主线程销毁函数。
[0034] 结合第二方面第二种可能的实现方式,在第二方面第三种可能的实现方式中,所述接收子单元包括:
[0035] 第一判断单元,用于判断是否接收到输入值;
[0036] 第二判断单元,用于在接收到输入值时,判断接收到的输入值是否满足预设测试条件,如果所述接收到的输入值满足预设测试条件,则判定所述接收到的输入值为有效输入值,并触发所述第三执行子单元;以及
[0037] 跳转触发单元,用于在所述接收到的输入值不满足预设测试条件,或者没有接收到输入值时,触发所述第五执行子单元。
[0038] 结合第二方面第二种可能的实现方式,在第二方面第四种可能的实现方式中,所述分析单元包括:比较单元,用于将所述实际执行结果与所述有效输入值对应的预设输出值进行比较,如果所述实际执行结果与所述预设输出值之间的误差在预设范围内,则判定所述静态库的相关性能正常,否则判定所述静态库的相关性能异常。
[0039] 由以上技术方案可见,本申请实施例通过将待测试的静态库编译为具有预设接口的动态库,同时设计具有与所述预设接口一一对应的调用接口的框架文件,进而在执行所述框架文件的过程中,通过调用接口实现对预设接口的调用,使得动态库中相应的代码或数据被执行,当框架文件执行完毕时,预设接口也被调用完毕,从而实现了对该动态库的完整调用,也即实现了对相应的静态库的完整调用;因此,框架文件的实际执行结果即反映了待测试的静态库的实际执行结果,通过分析框架文件的实际执行结果即可得到静态库的性能信息。本申请实施例中,由于实现动态库调用的预设接口是统一的,使得对应的框架文件中的调用接口也是固定的,所以框架文件可以被任一待测试的静态库所复用,不需要针对每个静态库设置对应的框架文件,从而可以降低测试过程的复杂度,提高测试效率。

附图说明

[0040] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0041] 图1为本申请实施例提供的一种静态库测试方法的流程图;
[0042] 图2为本申请实施例提供的另一种静态库测试方法的流程图;
[0043] 图3为本申请实施例提供的一种静态库测试装置的结构框图;
[0044] 图4为本申请实施例提供的另一种静态库测试装置的结构框图;以及[0045] 图5为本申请实施例提供的又一种静态库测试装置的结构框图。

具体实施方式

[0046] 为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
[0047] 图1为本申请实施例提供的一种静态库测试方法的流程图。
[0048] 参见图1,该静态库测试方法,包括以下步骤:
[0049] S11、将待测试的静态库编译为具有预设接口的动态库。
[0050] 本申请实施例提供的静态库测试方法,不直接调用待测试的静态库,而是将其编译为对应的动态库,其中,该动态库对外提供统一的预设接口,即任一静态库编译得到的动态库的对外接口均为上述预设接口,通过调用该预设接口可以实现对该动态库的调用,也即实现对相应的静态库的调用。
[0051] 上述将静态库编译为动态库,可以通过设置相应的编译参数实现,其具体实现方式为本领域技术人员所公知,此处不作赘述。
[0052] S12、获取具有与所述预设接口对应的调用接口的框架文件。
[0053] 上述框架文件为一种可执行文件,其设有调用接口,该调用接口与上述预设接口一一对应。
[0054] S13、执行所述框架文件,以通过所述调用接口和对应的预设接口调用所述动态库。
[0055] 框架文件执行过程中,按照调用接口的执行顺序,依次调用动态库中对应的预设接口,框架文件执行完毕,动态库中的代码或数据也被调用并运行完毕。
[0056] 通过执行该框架文件,可以实现对预设接口的依次调用,也即实现对上述由静态库编译得到的动态库的完整调用。由于由不同静态库编译得到的动态库的对外接口是相同的,均为上述预设接口,因此框架文件的调用接口也是确定的,不需要根据待测试的静态库的不同而改变,即该框架文件可以被任一个待测试的静态库所复用。
[0057] S14、根据所述框架文件的实际执行结果分析所述静态库的性能。
[0058] 由以上技术方案可知,本申请实施例提供的静态库测试方法,首先将待测试的静态库编译为具有预设接口的动态库,然后执行预设的框架文件,通过框架文件的调用接口依次调用动态库中对应的预设接口,使得动态库中相应的代码或数据被执行,当框架文件执行完毕时,预设接口也被调用完毕,从而实现了对该动态库的完整调用,也即实现了对相应的静态库的完整调用;因此,框架文件的实际执行结果可以反映待测试的静态库的实际执行结果,通过分析框架文件的实际执行结果即可得到静态库的性能信息。本申请实施例中,由静态库编译得到的动态库的对外接口是统一的,使得预设的框架文件可以被任一待测试的静态库所复用,不需要针对每个静态库设计对应的框架文件,可以降低测试过程的复杂度,实现对多个静态库的自动测试,提高测试效率。
[0059] 另外,现有静态库测试方法,待测试的静态库在编译测试代码的链接阶段就被调用,复制到目标代码中,再生成可执行文件;而本申请实施例不直接调用待测试的静态库,而是将其编译为动态库,从而框架文件中不需要包含该动态库中的原代码或数据,只需在执行框架文件的过程中,逐个调用动态库的预设接口,即可实现对动态库中对应的代码或数据的完整调用。因此,相对于现有静态库测试方法中得到的测试文件,本申请实施例的框架文件所占用的内存空间更小,可以被任一静态库所复用。
[0060] 通过上述实施例,可以轻松实现对静态库的多种性能的测试,如多线程一致性、32位与64位一致性、回归测试等,可以大幅度提高测试效率。
[0061] 图2为本申请实施例提供的另一种静态库测试方法的流程图。
[0062] 参见图2,该静态库测试方法,包括以下步骤:
[0063] S21、将待测试的静态库编译为具有预设接口的动态库。
[0064] 所述预设接口包括以下六种:用于实现资源初始化的主线程初始化函数、用于实现资源释放的主线程销毁函数、用于实现资源创建的子线程初始化函数、用于实现资源销毁的子线程销毁函数、子线程运行函数和结果输出函数。
[0065] S22、获取具有与所述预设接口对应的调用接口的框架文件。
[0066] 相应于上述六种预设接口,框架文件中的调用接口可以包括:用于调用上述主线程初始化函数的第一调用接口,用于调用上述子线程初始化函数的第二调用接口,用于调用上述子线程运行函数的第三调用接口,用于调用上述结果输出函数的第四调用接口,用于调用上述子线程销毁函数的第五调用接口,用于调用上述主线程销毁函数的第六调用接口。
[0067] S23、先后利用上述第一调用接口和第二调用接口调用并执行所述主线程初始化函数和子线程初始化函数;
[0068] 执行主线程初始化函数,以在主线程中实现资源初始化;执行子线程初始化函数,以在子线程中实现资源创建,为子线程的运行做准备。
[0069] S24、获取有效输入值;
[0070] S25、在获取到有效输入值后,利用上述第三调用接口调用所述子线程运行函数,执行所述子线程运行函数,得到与所述有效输入值对应的子线程运行结果;
[0071] S26、利用上述第四调用接口调用所述结果输出函数,执行所述结果输出函数,以将所述子线程运行结果编辑为符合预设格式的实际执行结果,并输出所述实际执行结果;
[0072] S27、先后利用上述第五调用接口和第六调用接口调用并执行所述子线程销毁函数和主线程销毁函数。
[0073] 执行子线程销毁函数,以在子线程结束前销毁子线程初始化阶段创建的资源;执行主线程销毁函数,以在主线程结束前释放主线程初始化阶段占用的资源,完成一次对上述动态库的调用。
[0074] S28、根据所述实际执行结果分析所述静态库的性能。
[0075] 对于任一有效输入值,均存在一个与之对应的预设输出值,该预设输出值为待测试的静态库的相关性能正常的情况下,输入上述有效输入值后应当得到的输出值。
[0076] 因此,本申请实施例中,根据所述实际执行结果分析所述静态库的性能,可以包括:将上述实际执行结果与有效输入值对应的预设输出值进行比较,如果二者相同或误差在预设范围内,则可以判定待测试的静态库的相关性能正常,反之,如果实际执行结果与该预设输出值之间的误差超出预设范围,则判定待测试的静态库的相关性能异常。
[0077] 由以上技术方案可知,本申请实施例提供的静态库测试方法,不需要针对每个待测试的静态库编写对应的测试代码,只需将其编译为具有上述主线程初始化函数等六个预设接口的动态库,通过执行框架文件依次调用该预设接口,实现对该动态库的调用,也即实现对待测试的静态库的调用,进而通过分析框架文件的实际执行结果就可以得到静态库测试结果。因此,相对于现有静态库测试方法,本申请实施例可以降低测试过程的复杂度,提高测试效率。
[0078] 在本申请一个可行的实施例中,上述实施例中的获取有效输入值(步骤S24),可以包括:
[0079] 判断是否接收到输入值,如果接收到输入值,则判断接收到的输入值是否满足预设测试条件,如果满足预设测试条件,则判定所述接收到的输入值为有效输入值;否则,如果所述接收到的输入值不满足预设测试条件,或者没有接收到输入值,则直接上述执行步骤S27,即依次调用所述子线程销毁函数和主线程销毁函数。
[0080] 实际应用中,可能需要子线程运行函数的输入值满足一定条件,例如必须为包含5个字符的字符串;如果输入值不满足该条件,可能导致子线程无法运行,或运行错误,影响对静态库的性能分析。因此,本申请实施例通过上述方法对输入值进行过滤,只有满足预设测试条件的输入值才可以作为有效输入值输入子线程运行函数,从而可以保证最终得到的实际执行结果中不存在干扰数据,提高测试效率。
[0081] 图3为本申请实施例提供的一种静态库测试装置的结构框图。
[0082] 参照图3,该静态库测试装置300包括:编译单元310、获取单元320、执行单元330和分析单元340。
[0083] 其中,该编译单元310被配置为,将待测试的静态库编译为具有预设接口的动态库;
[0084] 获取单元320被配置为,获取具有与所述预设接口对应的调用接口的框架文件;
[0085] 执行单元330被配置为,执行所述框架文件,以通过所述调用接口和对应的预设接口调用所述动态库;
[0086] 分析单元340被配置为,根据所述框架文件的实际执行结果分析所述静态库的性能。
[0087] 由以上技术方案可知,本申请实施例提供的静态库测试方法,通过将待测试的静态库编译为具有预设接口的动态库,同时设计具有与所述预设接口一一对应的调用接口的框架文件,进而在执行所述框架文件的过程中,通过调用接口实现对预设接口的调用并得到相应的实际执行结果,通过分析该实际执行结果即可得到静态库的性能信息。本申请实施例中,由静态库编译得到的动态库的对外接口是统一的,使得框架文件可以被任一待测试的静态库所复用,不需要针对每个静态库编写对应的测试代码,可以降低测试过程的复杂度,提高测试效率。
[0088] 图4为本申请实施例提供的一种静态库测试装置的结构框图。
[0089] 参照图4,该静态库测试装置400包括:编译单元410、获取单元420、执行单元430和分析单元440。其中,执行单元430包括:第一执行子单元431、第二执行子单元432、第三执行子单元433、第四执行子单元434、第五执行子单元435、第六执行子单元436和接收子单元437。
[0090] 该编译单元410被配置为,将待测试的静态库编译为具有预设接口的动态库;
[0091] 获取单元420被配置为,获取具有与所述预设接口对应的调用接口的框架文件;
[0092] 该第一执行子单元431被配置为,调用并执行所述主线程初始化函数,并触发所述第二执行子单元;
[0093] 该第二执行子单元432被配置为,调用并执行所述子线程初始化函数,并触发接收子单元437;
[0094] 接收子单元437被配置为,获取有效输入值,并在获取到有效输入值后,触发第三执行子单元433;
[0095] 第三执行子单元433被配置为,调用并执行所述子线程运行函数,得到与所述有效输入值对应的子线程运行结果,并触发第四执行子单元434;
[0096] 第四执行子单元434被配置为,调用并执行所述结果输出函数,以将所述子线程运行结果编辑为符合预设格式的实际执行结果,并输出所述实际执行结果,并触发第五执行子单元435;
[0097] 第五执行子单元435被配置为,调用并执行所述子线程销毁函数,并触发第六执行子单元436;
[0098] 第六执行子单元436被配置为,调用并执行所述主线程销毁函数。
[0099] 分析单元440被配置为,根据所述实际执行结果分析所述静态库的性能。
[0100] 由以上技术方案可知,本申请实施例提供的静态库测试方法,不需要针对每个待测试的静态库编写对应的测试代码,只需将其编译为具有上述主线程初始化函数等六个预设接口的动态库,通过执行框架文件依次调用该预设接口,实现对该动态库的调用,也即实现对待测试的静态库的调用,进而通过分析框架文件的实际执行结果就可以得到静态库测试结果。因此,相对于现有静态库测试方法,本申请实施例可以降低测试过程的复杂度,提高测试效率。
[0101] 在本申请一个可行的实施例中,上述分析单元440可以包括:比较单元。该比较单元被配置为:将所述实际执行结果与所述有效输入值对应的预设输出值进行比较,如果所述实际执行结果与所述预设输出值之间的误差在预设范围内,则判定所述静态库的相关性能正常,否则判定所述静态库的相关性能异常。
[0102] 在本申请一个可行的实施例中,上述接收子单元437可以包括:第一判断单元、第二判断单元和跳转触发单元。
[0103] 其中,第一判断单元被配置为,判断是否接收到输入值;
[0104] 第二判断单元,用于在接收到输入值时,判断接收到的输入值是否满足预设测试条件,如果所述接收到的输入值满足预设测试条件,则判定所述接收到的输入值为有效输入值,并触发上述第三执行子单元433;
[0105] 跳转单元,用于在所述接收到的输入值不满足预设测试条件,或者没有接收到输入值时,触发上述第五执行子单元435。
[0106] 通过上述接收子单元对输入值进行接收并筛选,只有满足预设测试条件的输入值才可以作为有效输入值输入子线程运行函数,从而可以保证最终得到的实际执行结果中不存在干扰数据,提高测试效率。
[0107] 关于上述实施例中的装置,其中各个单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0108] 图5为本申请实施例提供的又一种静态库测试装置的结构框图。
[0109] 参照图5,该静态库测试装置500包括处理器510、存储器520、输入输出接口530和电源组件540。其中,存储器520中存储有处理器510可执行的指令,处理器510执行该指令使得静态库测试装置500实现以下功能:
[0110] 将待测试的静态库编译为具有预设接口的动态库;
[0111] 获取具有与所述预设接口对应的调用接口的框架文件;
[0112] 执行所述框架文件,以通过所述调用接口和对应的预设接口调用所述动态库;
[0113] 根据所述框架文件的实际执行结果分析所述静态库的性能。
[0114] 在本申请一个可行的实施例中,所述预设接口包括:用于实现资源初始化的主线程初始化函数、用于实现资源释放的主线程销毁函数、用于实现资源创建的子线程初始化函数、用于实现资源销毁的子线程销毁函数、子线程运行函数和结果输出函数。
[0115] 在本申请另一个可行的实施例中,执行所述框架文件,以通过所述调用接口和对应的预设接口调用所述动态库,包括:
[0116] 依次调用并执行所述主线程初始化函数和子线程初始化函数;
[0117] 获取有效输入值;
[0118] 调用并执行所述子线程运行函数,得到与所述有效输入值对应的子线程运行结果;
[0119] 调用并执行所述结果输出函数,以将所述子线程运行结果编辑为符合预设格式的实际执行结果,并输出所述实际执行结果;
[0120] 依次调用并执行所述子线程销毁函数和主线程销毁函数。
[0121] 在本申请又一个可行的实施例中,所述获取有效输入值,包括:
[0122] 判断是否接收到输入值;
[0123] 如果接收到输入值,则判断接收到的输入值是否满足预设测试条件;
[0124] 如果所述接收到的输入值满足预设测试条件,则判定所述接收到的输入值为有效输入值;
[0125] 如果所述接收到的输入值不满足预设测试条件,或者没有接收到输入值,则直接执行所述依次调用所述子线程销毁函数和主线程销毁函数的步骤。
[0126] 在本申请又一个可行的实施例中,所述根据所述框架文件的实际执行结果分析所述静态库的性能,包括:
[0127] 将所述实际执行结果与所述有效输入值对应的预设输出值进行比较;如果所述实际执行结果与所述预设输出值之间的误差在预设范围内,则判定所述静态库的相关性能正常,否则判定所述静态库的相关性能异常。
[0128] 需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0129] 以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。