本发明涉及信息技术领域,具体涉及一种性能测试方法、装置及存储介质。
背景技术:
随着中台建设的风靡,中台建设伴随的组件化开发工作也越来越多。在组件的性能测试中,传统应用中常见的性能测试软件如jmeter、loadrunner对于轻量的技术组件来说显得太重,性能测试过程中占用了服务器不少资源,影响了测试效果。
java微基准测试套件(javamicrobenchmarkharness,jmh),是java开发过程中使用较多的基准测试套件,可以进行方法级别的压测,并提供执行预热等功能。如何有效利用jmh进行组件的性能测试成为一个问题。
技术实现要素:
本发明提供了一种性能测试方法、装置及存储介质,可以有效利用jmh进行组件的性能测试。
本发明实施例提供了一种性能测试方法,包括:根据待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成jmh基准测试代码;根据所述jmh基准测试代码对所述待测技术组件进行性能测试。
可选的,所述jvm隐式优化陷阱包括以下至少之一:无用代码消除、常量折叠和常数传播、循环展开、方法内敛、分支预测、伪共享。
可选的,在根据所述jmh基准测试代码对所述待测技术组件进行性能测试之前,还包括:对所述jmh基准测试代码进行扫描;判断所述jmh基准测试代码是否对所述jvm隐式优化陷阱进行了规避。
可选的,所述根据待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成jmh基准测试代码,包括:获取所述待测技术组件的功能;针对每一个所述功能,根据预先获取的jvm隐式优化陷阱以及所述功能,生成对应的jmh基准测试代码。
可选的,在根据所述jmh基准测试代码对所述待测技术组件进行性能测试之前,还包括:按照预先设置的格式要求生成代码规范文件、代码正例和代码反例;根据所述代码规范文件、所述代码正例和所述代码反例对所述jmh基准测试代码进行检测。
可选的,所述根据待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成jmh基准测试代码,包括:根据多个待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成多个jmh基准测试代码;在根据所述jmh基准测试代码对所述待测技术组件进行性能测试之后,还包括:将得到的多个所述待测技术组件的性能测试结果进行整合,生成完整的性能测试结果。
可选的,所述根据所述jmh基准测试代码对所述待测技术组件进行性能测试,包括:批量执行多个所述jmh基准测试代码以实现对多个所述待测技术组件的性能测试。
可选的,在根据所述jmh基准测试代码对进行性能测试之后,还包括:对得到的所述待测技术组件的性能测试结果进行展示。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例中的任意一种方法。
本发明实施例还提供了一种电子装置,包括存储器和处理器,所述处理器通过执行所述存储器中的程序实现本发明实施例中的任意一种方法。
通过本发明实施例提供的性能测试方法,可以有效利用jmh进行组件的性能测试。
附图说明
图1是本发明实施例提供的一种性能测试方法的流程图;
图2是根据本发明实施例的一种性能测试装置的框架图;
图3是根据本发明实施例的另一种性能测试方法的流程图。
具体实施方法
为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
另外,在本发明实施例中,“可选的”或者“示例性的”等词用于表示作例子、例证或说明。本发明实施例中被描述为“可选的”或者“示例性的”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“可选的”或者“示例性的”等词旨在以具体方式呈现相关概念。
本发明实施例提供了一种性能测试方法。图1是本发明实施例提供的一种性能测试方法的流程图,如图1所示,该方法可以包括如下步骤:
s102,根据待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成jmh基准测试代码;
s104,根据该jmh基准测试代码对该待测技术组件进行性能测试。
可选的,该jvm隐式优化陷阱包括以下至少之一:无用代码消除、常量折叠和常数传播、循环展开、方法内敛、分支预测、伪共享。
jmh与java虚拟机(javavirtualmachine,jvm)是强关联的,代码编写的形式上也需要注意避开jvm底层的优化策略,如谨慎使用循环、注意函数返回值的定义等。因此,为了保证测试结果的可靠性,可以根据待测技术组件的代码情况,按需制定jmh基准测试代码,并规避jvm隐式优化陷阱,可以结合jmh使用经验,配置代码。
可选的,在根据该jmh基准测试代码对该待测技术组件进行性能测试之前,还包括:对该jmh基准测试代码进行扫描;判断该jmh基准测试代码是否对该jvm隐式优化陷阱进行了规避。
此外,在进行性能测试前,还可以对待测技术组件的jmh基准测试代码进行扫描,以确保规避已知的jvm隐式优化陷阱。
可选的,该根据待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成jmh基准测试代码规范,包括:获取该待测技术组件的功能;针对每一个该功能,根据预先获取的jvm隐式优化陷阱以及该功能,生成对应的jmh基准测试代码规范。
不同的待测技术组件有不同的功能结构,测试的对象和范围也会不同。以rpc通讯组件为例:此类组件的通用功能有客户端stub、服务端stub、序列化、反序列化、动态代理、获取网络连接、数据发送(同步、异步等)、接口实现类定位及执行,也有rpc通讯组件将服务注册、服务发现、服务降级等都作为rpc组件的一部分。对rpc通讯组件的测试方案主要围绕rpc组件的功能结构制定,形成rpc通讯组件的执行链条,链条的每一个环节对应一个或一组基准测试。
除了按功能节点切分,不同的测试节点也可以制定不同的测试案例,如不同的请求报文、调用不同的服务、不同的序列化方式,jmh层面还有不同的预热次数、不同的并行线程数。
可选的,在根据该jmh基准测试代码规范对该待测技术组件进行性能测试之前,还包括:按照预先设置的格式要求制定代码规范文件以及代码正例和代码反例;根据该代码规范文件、该代码正例和该代码反例对该jmh基准测试代码规范进行检测。
代码规范是代码质量管控的一个重要手段,主要用于规范代码开发过程中的格式、推荐用法、注释内容等,提高代码的可读性和移交效率。jmh的执行是和jvm紧密关联的,利用代码规范检查工具(如pmd静态代码分析框架),将jmh需要避开或者注意的代码编写方式作为代码规范进行管理,进行性能测试之前先进行jmh代码规范筛查,比如,规避jvm隐式优化陷阱。具体的,可以基于静态代码分析框架,并按照代码分析框架的格式要求将制定好的代码规范及对应的正例和反例,整理成指定的规则文件和对应的错误提示,供代码分析框架检查时使用,从而可以保证测试结果的可靠性。
可选的,该根据待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成jmh基准测试代码,包括:根据多个待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成多个jmh基准测试代码;在根据该jmh基准测试代码对该待测技术组件进行性能测试之后,还包括:将得到的多个该待测技术组件的性能测试结果进行整合,生成完整的性能测试结果。
基于jmh,结合操作系统脚本,将待测技术组件的各环节基准测试的结果进行整合,从各个环节的基准性能到组件级别的接口调用,获得较完整的技术组件级别的性能测试结果。
可选的,该根据该jmh基准测试代码规范对该待测技术组件进行性能测试,包括:批量执行多个该jmh基准测试代码规范以实现对多个该待测技术组件的性能测试。
为了获取不同节点的测试结果并整合得到技术组件的完整测试结果,需要批量执行jmh测试。通过java命令可以对不同测试节点对应的程序进行批量打包,然后按测试链条的顺序进行批量执行。可选的,为了获取执行结果,每一个测试节点都要输出jmh测试结果。
可选的,在根据该jmh基准测试代码对进行性能测试之后,还包括:对得到的该待测技术组件的性能测试结果进行展示。
jmh支持json格式输出测试结果,可以按需选择不同的可视化工具对测试结果进行分析和展示。
本发明实施例还提供了一种性能测试装置。图2是根据本发明实施例的一种性能测试装置的框架图,如图2所示,装置包括第一生成模块22和测试模块24,其中,该第一生成模块22,用于根据待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成jmh基准测试代码;该测试模块24,用于根据该jmh基准测试代码对该待测技术组件进行性能测试。
可选的,该jvm隐式优化陷阱包括以下至少之一:无用代码消除、常量折叠和常数传播、循环展开、方法内敛、分支预测、伪共享。
可选的,该装置还包括扫描模块和判断模块,其中,该扫描模块,用于对该jmh基准测试代码进行扫描;该判断模块,用于判断该jmh基准测试代码是否对该jvm隐式优化陷阱进行了规避。
可选的,该第一生成模块22包括获取子模块和生成子模块,其中,该获取子模块,用于获取该待测技术组件的功能;该生成子模块,用于针对每一个该功能,根据预先获取的jvm隐式优化陷阱以及该功能,生成对应的jmh基准测试代码。
可选的,该装置还包括第二生成模块和检测模块,其中,该第二生成模块,用于按照预先设置的格式要求生成代码规范文件、代码正例和代码反例;该检测模块,用于根据该代码规范文件、该代码正例和该代码反例对该jmh基准测试代码进行检测。
可选的,该第一生成模块22,具体用于根据多个待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成多个jmh基准测试代码;该装置还包括整合模块,用于将得到的多个该待测技术组件的性能测试结果进行整合,生成完整的性能测试结果。
可选的,该测试模块24,具体用于批量执行多个该jmh基准测试代码以实现对多个该待测技术组件的性能测试。
可选的,该装置还包括展示模块,其中,该展示模块,用于对得到的该待测技术组件的性能测试结果进行展示。
以下结合具体场景对本发明实施例进行说明。本实施例旨在对轻量技术组件(如rpc通讯组件)进行完整且可靠的性能测试。
1、可扩展jmh基准测试的代码规范及对应的规范检查工具:
步骤s21,本实施例中技术组件性能测试结果是由多个基准测试结果整合得到的,为了保证测试结果的可靠性,需要根据待测技术组件的代码情况,先按需制定jmh基准测试代码规范,规避jvm隐式优化陷阱,可以结合jmh使用经验,配置代码规范。目前常见的jvm隐式优化陷阱有:1)无用代码消除(deadcodeelimination);2)常量折叠(constantfolding)和常数传播(constantpropagation);3)循环展开(loopunwinding);4)方法内敛(methodinline);5)分支预测(branchprediction);6)伪共享(falsesharing)。
步骤s22,基于可用的静态代码分析框架(一种代码规范检查工具),按照代码分析框架的格式要求将制定好的代码规范及对应的正例和反例,整理成指定的规则文件和对应的错误提示,供静态代码分析框架检查代码时使用。
步骤s23,进行性能测试前,都要对技术组件的源码(jmh基准测试代码)进行规范扫描,以保证规避已知的jvm隐式优化陷阱。
2、执行技术组件性能测试方案:
步骤s24,不同的技术组件有不同的功能结构,测试的对象和范围也会不同。以rpc通讯组件为例:此类组件的通用功能有客户端stub、服务端stub、序列化、反序列化、动态代理、获取网络连接、数据发送(同步、异步等)、接口实现类定位及执行,也有rpc组件将服务注册、服务发现、服务降级等都作为rpc组件的一部分。对rpc通讯组件的测试方案就需要围绕rpc组件的实际结构制定,形成rpc组件的执行链条,链条的每一个环节对应一个或一组(不同实现性能对比)基准测试。
除了按功能节点切分,不同的测试节点也可以制定不同额测试案例,如不同的请求报文、调用不同的服务、不同的序列化方式,jmh层面还有不同的预热次数、不同的并行线程数。
3、编写测试脚本,对测试节点批量打包和执行:
步骤s25,为了获取不同节点的测试结果并整合得到技术组件的完整测试结果,需要批量执行jmh测试。通过java命令可以对不同测试节点对应的程序进行批量打包,然后按测试链条的顺序进行批量执行。为了获取执行结果,每一个测试节点都要输出jmh测试结果。
步骤s26,对于得到的性能测试结果,jmh支持json格式输出测试结果,可以利用可视化工具对测试结果进行分析和展示。
图3是根据本发明实施例的另一种性能测试方法的流程图,如图3所示,该方法包括如下步骤:
制定jmh基准测试规范;
基于静态代码分析框架组装代码规范检查工具;
执行性能测试代码规范扫描;
依据性能测试代码规范扫描结果,执行性能测试代码整改;
梳理jmh基准测试节点;
编写轻量技术组件级性能测试方案;
批量打包轻量技术组件级性能测试代码;
执行轻量技术组件级性能测试并输出测试结果。
本发明实施例还提供了一种电子装置,该电子装置包括处理器和存储器;电子装置中处理器的数量可以是一个或多个,存储器作为一种计算机可读存储介质,可用于存储计算机可执行程序。处理器通过运行存储在存储器中的软件程序、指令,从而执行电子装置的各种功能应用以及数据处理,即实现上述任一实施例中的方法。
本申请实施例还提供一种包含计算机可执行指令的存储介质,计算机可执行指令在由计算机处理器执行时实现上述任一实施例中的方法。
可选的,处理器通过执行指令实现一种性能测试方法,该方法包括:
s1,根据待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成jmh基准测试代码;
s2,根据该jmh基准测试代码对该待测技术组件进行性能测试。
以上仅为本申请的示例性实施例而已,并非用于限定本申请的保护范围。
一般来说,本申请的多种实施例可以在硬件或专用电路、软件、逻辑或其任何组合中实现。例如,一些方面可以被实现在硬件中,而其它方面可以被实现在可以被控制器、微处理器或其它计算装置执行的固件或软件中,尽管本申请不限于此。
本申请的实施例可以通过移动装置的数据处理器执行计算机程序指令来实现,例如在处理器实体中,或者通过硬件,或者通过软件和硬件的组合。计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码。
本申请附图中的任何逻辑流程的框图可以表示程序步骤,或者可以表示相互连接的逻辑电路、模块和功能,或者可以表示程序步骤与逻辑电路、模块和功能的组合。计算机程序可以存储在存储器上。存储器可以具有任何适合于本地技术环境的类型并且可以使用任何适合的数据存储技术实现,例如但不限于只读存储器(rom)、随机访问存储器(ram)、光存储器装置和系统(数码多功能光碟dvd或cd光盘)等。计算机可读介质可以包括非瞬时性存储介质。数据处理器可以是任何适合于本地技术环境的类型,例如但不限于通用计算机、专用计算机、微处理器、数字信号处理器(dsp)、专用集成电路(asic)、可编程逻辑器件(fgpa)以及基于多核处理器架构的处理器。
通过示范性和非限制性的示例,上文已提供了对本申请的示范实施例的详细描述。但结合附图和权利要求来考虑,对以上实施例的多种修改和调整对本领域技术人员来说是显而易见的,但不偏离本发明的范围。因此,本发明的恰当范围将根据权利要求确定。
1.一种性能测试方法,其特征在于,包括:
根据待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成jmh基准测试代码;
根据所述jmh基准测试代码对所述待测技术组件进行性能测试。
2.如权利要求1所述的方法,其特征在于,所述jvm隐式优化陷阱包括以下至少之一:无用代码消除、常量折叠和常数传播、循环展开、方法内敛、分支预测、伪共享。
3.如权利要求1所述的方法,其特征在于,在根据所述jmh基准测试代码对所述待测技术组件进行性能测试之前,还包括:
对所述jmh基准测试代码进行扫描;
判断所述jmh基准测试代码是否对所述jvm隐式优化陷阱进行了规避。
4.如权利要求1-3中任一项所述的方法,其特征在于,所述根据待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成jmh基准测试代码,包括:
获取所述待测技术组件的功能;
针对每一个所述功能,根据预先获取的jvm隐式优化陷阱以及所述功能,生成对应的jmh基准测试代码。
5.如权利要求1-3中任一项所述的方法,其特征在于,在根据所述jmh基准测试代码对所述待测技术组件进行性能测试之前,还包括:
按照预先设置的格式要求生成代码规范文件、代码正例和代码反例;
根据所述代码规范文件、所述代码正例和所述代码反例对所述jmh基准测试代码进行检测。
6.如权利要求1-3中任一项所述的方法,其特征在于,所述根据待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成jmh基准测试代码,包括:根据多个待测技术组件的情况以及预先获取的jvm隐式优化陷阱,生成多个jmh基准测试代码;
在根据所述jmh基准测试代码对所述待测技术组件进行性能测试之后,还包括:将得到的多个所述待测技术组件的性能测试结果进行整合,生成完整的性能测试结果。
7.如权利要求6所述的方法,其特征在于,所述根据所述jmh基准测试代码对所述待测技术组件进行性能测试,包括:
批量执行多个所述jmh基准测试代码以实现对多个所述待测技术组件的性能测试。
8.如权利要求1-3中任一项所述的方法,其特征在于,在根据所述jmh基准测试代码对进行性能测试之后,还包括:
对得到的所述待测技术组件的性能测试结果进行展示。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-8中任一项所述的方法。
10.一种电子装置,包括存储器和处理器,其特征在于,所述处理器通过执行所述存储器中的计算机程序实现如权利要求1-8中任一项所述的方法。
技术总结