一种性能测试方法和装置与流程

文档序号:26493562发布日期:2021-09-03 21:09阅读:54来源:国知局
一种性能测试方法和装置与流程

1.本发明涉及计算机技术领域,尤其涉及一种性能测试的方法。


背景技术:

2.在现有的性能测试方法中,如果需要测试接口的性能,开发人员需要编译源代码并将所生成的可执行文件部署到性能测试环境中,以完成性能测试;或者开发人员需要在源代码中标记需要测试的接口,然后并将源代码部署到性能测试环境,由测试环境对源代码进行编译和运行,以完成性能测试。
3.在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
4.为了运行性能测试,需要在性能测试环境中处理开发人员提供的可执行文件,而部署性能测试环境往往需要耗费巨大的人力和时间成本,这对于性能测试用例只涉及源代码中的一个或者几个接口的场景来说,既增加了性能测试的时间,也浪费了性能测试环境的资源,进而增加了项目的成本。
5.另一种运行性能测试的方式,由于需要开发人员定位具体的测试接口,额外增加了开发人员的工作量。


技术实现要素:

6.有鉴于此,本发明实施例提供一种性能测试方法,以减少开发人员为性能测试定位代码而产生的工作量,进而减少测试时间,并减少对相关模块进行性能测试的干扰,有助于更准确地定位问题,提高测试效率。
7.为实现上述目的,根据本发明实施例的一个方面,提供了一种性能测试的方法。其特征在于,包括:获取第一源代码包和属于所述第一源代码包一部分的、与待测试模块相关的待测试源代码,确定所述待测试源代码对所述第一源代码包的依赖关系;根据所述依赖关系,从所述第一源代码包中获取与所述待测试源代码相关联的文件,基于所述文件和所述待测试源代码,形成第二源代码包;运行所述第二源代码包,以获得所述待测试模块的性能数据。
8.可选地,所述性能测试的方法,其特征在于,在所述第二源代码包中添加用于性能分析的代码,形成第三源代码包;运行所述第三源代码包,以获得所述待测试模块的性能数据。
9.可选地,所述性能测试的方法,其特征在于,在运行所述第三源代码包时,所述性能分析的代码自动跟踪并记录所述待测试源代码的运行过程,以获得所述待测试模块的性能数据。
10.可选地,所述性能测试的方法,其特征在于,在所述第三源代码中添加用于虚拟第三方组件的代码,形成第四源代码包;运行所述第四源代码包,以获得所述待测试源代码应用所述第三方组件的性能数据。
11.可选地,所述性能测试的方法,其特征在于,所述第四源代码包中的用于虚拟所述
第三方组件的代码是根据所述第三方组件的传入参数和返回数据而生成的。
12.可选地,所述性能测试的方法,其特征在于,所述第四源代码包中的用于虚拟所述第三方组件的代码还用于转换所述待测试模块对于所述第三方组件的传入参数的类型,和/或所述第三方组件对于待测试模块的返回数据的类型。
13.可选地,所述性能测试的方法,其特征在于,所述性能数据指示了所述待测试模块中耗时超过阈值时长或者中央处理单元占用率超过阈值占有率的模块,并指示所述模块相关的调用关系。
14.为实现上述目的,根据本发明实施例的第二方面,提供了一种性能测试的装置,其特征在于,包括:源代码获取模块、性能分析模块;其中,所述源代码获取模块用于获取第一源代码包和属于所述第一源代码包一部分的、与待测试模块相关的待测试源代码,确定所述待测试源代码对所述第一源代码包的依赖关系;根据所述依赖关系,从所述第一源代码包中获取与所述待测试代码相关联的文件,基于所述文件和所述待测试源代码,形成第二源代码包;所述性能分析模块,用于运行所述第二源代码包,以获得所述待测试模块的性能数据。
15.可选地,所述性能测试的装置,其特征在于,所述源代码获取模块还用于在所述第二源代码包中添加用于性能分析的代码,形成第三源代码包;所述性能分析模块还用于运行所述第三源代码包,以获得所述待测试模块的性能数据。
16.可选地,所述性能测试的装置,其特征在于,在运行所述第三源代码包时,所述性能分析的代码自动跟踪并记录所述待测试源代码的运行过程,以获得所述待测试模块的性能数据。
17.可选地,所述性能测试的装置,其特征在于,在所述第三源代码中添加用于虚拟第三方组件的代码,形成第四源代码包;运行所述第四源代码包,以获得所述待测试源代码应用所述第三方组件的性能数据。
18.可选地,所述性能测试的装置,其特征在于,所述第四源代码包中的用于虚拟所述第三方组件的代码是根据所述第三方组件的传入参数和返回数据而生成的。
19.可选地,所述性能测试的装置,其特征在于,所述第四源代码包中的用于虚拟所述第三方组件的代码还用于转换所述待测试模块对于所述第三方组件的传入参数的类型,和/或所述第三方组件对于对于待测试模块的返回数据的类型。
20.可选地,所述性能测试的装置,其特征在于,所述性能数据指示了所述待测试模块中耗时超过阈值时长或者中央处理单元占用率超过阈值占有率的模块,并指示所述模块相关的调用关系。
21.为实现上述目的,根据本发明实施例的第三方面,提供了一种性能测试的电子设备,其特征在于,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述性能测试的方法中任一所述的方法。
22.为实现上述目的,根据本发明实施例的第四方面,提供了一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如上述性能测试的方法中任一所述的方法。
23.上述发明中的一个实施例具有如下优点或有益效果:从用于完整软件实现的第一
源代码中摘取与待测试模块相关的待测试源代码,并根据依赖关系分析从第一源代码包中获取与待测试代码相关联的文件,基于所述文件和所述待测试源代码,形成用于性能测试的第二源代码包,因此减少了开发人员为性能测试定位代码而产生的工作量,进而减少了测试时间,并减少对相关模块进行性能测试的干扰,有助于更准确地定位问题,提高测试效率。
24.上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
25.附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
26.图1是根据本发明第一实施例的性能测试的方法的主要流程的示意图;
27.图1a、图1b是根据本发明第一实施例的示例代码示意图;
28.图2是根据本发明第二实施例的性能测试的方法的主要流程的示意图;
29.图3是根据本发明第三实施例的性能测试的方法的主要流程的示意图;
30.图3a-图3d是根据本发明第三实施例的示例代码以及界面的示意图;
31.图4是根据本发明实施例的性能测试的装置的主要模块示意图;
32.图5是本发明实施例可以应用于其中的示例性系统架构图;
33.图6是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
34.以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
35.图1是根据本发明实施例一的性能测试方法,图1a-1b是示例代码示意图。以下将结合图1a和1b来解释图1所示的性能测试方法。
36.如图1所示,步骤s101,获取第一源代码包和属于第一源代码包一部分的、与待测试模块相关的待测试源代码,确定待测试源代码对第一源代码包的依赖关系。
37.步骤s102,根据所述依赖关系,从第一源代码包中获取与待测试代码相关联的文件,基于所述文件和所述待测试源代码,形成第二源代码包。
38.现以如图1a和图1b所示的java代码举例说明上述操作流程。如图1a所示,第一源代码包包含如下九个文件:testa、testb、testc、testaservice、testbservice、testcservice、testaserviceimpl、testbserviceimpl、testcserviceimpl,其中,testa是与待测试模块相关的待测试源代码。
39.进一步,图1b示出了待测试源代码testa的片段testa()方法的依赖关系,即该方法分别引用了两个接口类testaservice、testbservice的对象testaservice和testbserivce。值得注意的是,本文所述的依赖包括但不限于调用、引用、继承、实现或者程序语言中其他对对象、方法、接口等的使用手段。
40.经过分析第一源代码包中待测试源代码的依赖关系,得知testa()方法中引用了两个接口类testaservice、testbservice的对象,testaserviceimpl、testbserviceimpl分别为接口类testaservice、testbservice对应的实现类;而testa并未引用接口类testcservice的对象,所以第二源代码,包括testa、testaservice、testbservice、testaserviceimpl、testbserviceimpl五个文件,并不需要包括其不相关的testcservice和该类对应的实现类testcserviceimpl。
41.步骤s103,运行所述第二源代码包,以获得所述待测试模块的性能数据。
42.依然以图1a和图1b为例,运行所述第二源代码包获得testa()的性能数据。
43.可选地,在所述步骤s101,可以通过浏览器的页面上传第一源代码包。在所述步骤s103,也可以通过浏览器的页面来展示性能测试数据。
44.在一个实施例中,所述性能数据指示了所述待测试模块中耗时超过阈值时长或者中央处理单元占用率超过阈值占有率的模块,并指示所述模块相关的调用关系。这样,将给予开发人员提示,使其关注耗时较长、cpu占用率较高的代码,并获悉与这些代码相关的其他代码。
45.图2是根据本发明实施例二的性能测试方法。
46.如图2所示,步骤s201-步骤s202关于第一源代码包与待测源代码的处理流程与s101-s102描述一致,在此不再赘述。
47.步骤s203,在第二源代码包中添加用于性能分析的代码,形成第三源代码包。
48.其中,所添加的用于性能分析的代码可被认为是对性能测试的监控入口。也即,可以根据监控需要,例如,关于待测试模块对中央处理器的占用率、待测试模块从运行开始到结束的所耗时长等,来添加用于性能分析的代码。
49.步骤s204,运行第三源代码包,获得被测试模块性能的数据。
50.具体地,在运行所述第三源代码包时,所述性能分析的代码自动跟踪并记录所述待测试源代码的运行过程,以获得所述待测试模块的性能数据。
51.在所述步骤s204中,也可以通过浏览器的页面来展示性能测试数据。
52.在一个实施例中,所述性能数据指示了所述待测试模块中耗时超过阈值时长或者中央处理单元占用率超过阈值占有率的模块,并指示所述模块相关的调用关系。这样,将给予开发人员提示,使其关注耗时较长、cpu占用率较高的代码,并获悉与这些代码相关的其他代码。
53.图3是根据本发明实施例三的性能测试方法,图3a-图3d是其示例代码示意图。以下将主要结合图3a-图3d来解释图3所示的性能测试方法。
54.如图3所示,步骤s301-s303关于第一源代码包与待测源代码的处理以及性能测试代码的添加流程与s201-s203描述一致,在此不再赘述。
55.步骤s304,在第三源代码包中自动添加用于虚拟第三方组件的代码,形成第四源代码包.
56.通常,作为完整软件实现的第一源代码包的执行需要依赖第三方组件(例如,中间件)的支持,但是在对某一模块进行性能测试时,如果额外部署第三方组件,也将导致测试工作量的增加。因而,在一个优选实施例中,可以在第三方源代码包中添加用于虚拟(也称为模拟)第三方组件的代码,以供待测试模块调用。在本实施例中,根据待测试模块的代码
所指示的与第三方组件的依赖关系,在代码中添加用于虚拟第三方组件的代码。在本文中,也以mock组件或虚拟对象来指代虚拟第三方组件的代码。
57.现以图3a-图3d所示的java代码举例说明该实施例流程,依然以图1a和图1b为例,图1a示出了第一源代码包中包含的文件;进一步地,图1b示出了待测试模块的源代码中包含的文件。其中testa是与待测试模块相关的待测试源代码,testa()是待性能测试的代码片段;经过分析第一源代码包中待测试源代码的依赖关系,得知testa()方法调用了testaservice对象中的testaservice()方法和testbservice对象中的testbservice()方法。
58.进一步地,图3a示,出了作为接口类testbservice的实现类testbservice所实现的testbservice()方法需要用到外围接口的com.xx.xx.cli.cluster.set()方法(以下简称为set()方法)的返回值,此处所述的外围接口是指第三方组件的接口方法。也即,可以认为,set()方法代表了第三方组件。
59.进一步的,如图3b所示,根据已分析的第一源代码包中待测试源代码的依赖关系,把引用到的外围接口set()方法展现给开发人员,并展示了set()方法返回值(返回数据)的类型;利用如图3b所示的界面开发人员设置返回值并生成新的第四源代码包。
60.进一步地,如图3c所示,第四源代码包中包含了针对set()方法的mock组件,即包含了自动生成的setmock文件,其中,setmock文件实现了性能测试所需的set()方法并自动生成了返回值。也即,在这个示例中,setmock文件指示了用于虚拟第三方组件的代码。而且,用于虚拟第三方组件的代码是根据所述第三方组件的输入参数和返回数据而生成的。
61.可选的,setmock文件中的代码也可以转换对于第三方组件的传入参数的类型。比如待测试模块对于set()方法的传入参数是json格式的数据,而set()方法可接受的输入参数格式是数组类型,则在所生成的第四源代码包中,setmock文件实现了将json类型的传入参数自动转换成数组类型的参数。也即,所述第四源代码包中的用于虚拟第三方组件的代码还用于转换所述待测试模块对于所述第三方组件的传入参数的类型。
62.可选的,setmock文件中的代码也可以转换对于第三方组件的返回数据的类型。如图3b所示,set()方法的返回值rstexist(参见图3a)为布尔类型(即,true或者false)的数据,而如果应用set()方法的待测试模块所要求的数据类型是int类型,则在所生成的第四源代码包中,setmock文件实现了将布尔类型的返回数据自动转换成int类型的数据,以供待测试模块使用。也即,所述第四源代码包中的用于虚拟第三方组件的代码还用于转换所述第三方组件对于所述待测试模块的返回数据的类型。
63.在一个优选实施例中,setmock()文件的结尾处也可以设置睡眠时间,以更真实地模拟调用第三方组件的响应时间。
64.进一步地,相比于图1b所示的第一实施例,如图3d所示,第四源代码最终包括如下文件:testa、testaservice、testbservice、testaserviceimpl、testbserviceimpl和setmock。更具体地,由于实现类testbserviceimpl调用了测试所需的第三方组件的set()方法,因此第四源代码包最终包含了用于虚拟第三方组件的setmock文件。
65.步骤s305,运行第四源代码包,以获得所述待测试源代码应用所述第三方组件的性能数据。在本实施例中,运行第四源代码包,获得待测试模块的testa()方法应用set()方法的性能数据。
66.在一个实施例中,所述性能数据指示了所述待测试模块中耗时超过阈值时长或者中央处理单元占用率超过阈值占有率的模块,并指示所述模块相关的调用关系。这样,将给予开发人员提示,使其关注耗时较长、cpu占用率较高的代码,并获悉与这些代码相关的其他代码。
67.可选地,在所述步骤s305中,也可以通过浏览器的页面来展示性能测试数据。
68.如图4所示,本发明实施例提供了一种性能测试的装置400,包括:源代码分析模块401、性能分析模块402;其中,
69.所述源代码分析模块401,用于获取第一源代码包和属于所述第一源代码包一部分的、与待测试模块相关的待测试源代码,确定所述待测试源代码对所述第一源代码包的依赖关系;根据所述依赖关系,从所述第一源代码包中获取与所述待测试代码相关联的文件,基于所述文件和所述待测试源代码,形成第二源代码包。所述性能分析模块402,用于运行所述第二源代码包,以获得所述待测试模块的性能数据。
70.可选地,所述源代码分析模块401,还用于在所述第二源代码包中添加用于性能分析的代码,形成第三源代码包。
71.可选地,所述性能分析模块402还用于运行所述第三源代码包,以获得所述待测试模块的性能数据。其中,在运行所述第三源代码包时,所述性能分析的代码自动跟踪并记录所述待测试源代码的运行过程,以获得所述待测试模块的性能数据。
72.可选地,所述源代码分析模块401,还用于在所述第三源代码中添加用于虚拟第三方组件的代码,形成第四源代码包;
73.可选地,所述性能分析模块402,还用于运行所述第四源代码包,以获得所述待测试源代码应用所述第三方组件的性能数据;所述第四源代码包中的用于虚拟所述第三方组件的代码是根据所述第三方组件的传入参数和返回数据而生成的;所述第四源代码包中的用于虚拟所述第三方组件的代码还用于转换所述待测试模块对于所述第三方组件的传入参数的类型,和/或所述第三方组件对于待测试模块的返回数据的类型。
74.可选地,所述性能分析模块402,指示的所述性能数据指示了所述待测试模块中耗时超过阈值时长或者中央处理单元占用率超过阈值占有率的模块,并指示所述模块相关的调用关系。
75.本发明实施例还提供了一种性能测试的服务器,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一实施例提供的方法。
76.本发明实施例还提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一实施例提供的方法。
77.图5示出了可以应用本发明实施例的性能测试的方法或性能测试的装置的示例性系统架构500。
78.如图5所示,系统架构500可以包括终端设备501、502、503,网络504和服务器505。网络504用以在终端设备501、502、503和服务器505之间提供通信链路的介质。网络504可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
79.用户可以使用终端设备501、502、503通过网络504与服务器505交互,以接收或发送消息等。终端设备501、502、503上可以安装有各种客户端应用,例如购物类应用、网页浏
览器应用、搜索类应用、即时通信工具、邮箱客户端和社交平台软件等。
80.终端设备501、502、503可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
81.服务器505可以是提供各种服务的服务器,例如实现性能测试的服务器。例如,服务器505可以对从终端设备接收到的性能测试请求以及性能测试所需源代码包进行分析等处理,实现如上述实施例所述的性能测试方法,并将性能测试结果反馈给终端设备。
82.需要说明的是,本发明实施例所提供的性能测试方法一般由服务器505执行,相应地,性能测试的装置一般设置于服务器505中。
83.应该理解,图5中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
84.下面参考图6,其示出了适于用来实现本发明实施例的计算机系统600的结构示意图。图6示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
85.如图6所示,计算机系统600包括中央处理单元(cpu)601,其可以根据存储在只读存储器(rom)602中的程序或者从存储部分608加载到随机访问存储器(ram)603中的程序而执行各种适当的动作和处理,例如执行如图1至3所示的方法。在ram 603中,还存储有系统600操作所需的各种程序和数据。cpu 601、rom 602以及ram 603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。
86.以下部件连接至i/o接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至i/o接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
87.特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(cpu)601执行时,执行本发明的系统中限定的上述功能。
88.需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,
其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。
89.附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
90.描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种性能测试的装置包括源代码分析模块、性能分析模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,源代码分析模块还可以被描述为“根据性能测试需求,获取待测试源代码和依赖文件,生成新源代码包的模块”。
91.作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备执行如图1至3所示的方法,包括:获取第一源代码包和属于所述第一源代码包一部分的、与待测试模块相关的待测试源代码,确定所述待测试源代码对所述第一源代码包的依赖关系;所述模块包括且不仅包括源代码文件中的接口方法、函数等;根据所述依赖关系,从所述第一源代码包中获取与所述待测试代码相关联的文件,基于所述文件和所述待测试源代码,形成第二源代码包;运行所述第二源代码包,以获得所述待测试模块的性能数据。所述性能数据指示了所述待测试模块中耗时超过阈值时长或者中央处理单元占用率超过阈值占有率的模块,并指示模块相关的调用关系。
92.根据本发明实施例的技术方案,减少了开发人员为性能测试定位代码而产生的工作量,进而减少了测试时间,并减少对相关模块进行性能测试的干扰,有助于更准确地定位问题,提高测试效率。
93.上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1