发明内容
本发明的目的在于提供一种***测试方法及其装置,在大并发的情况下也能有效地对特定故障进行测试。
为解决上述技术问题,本发明的实施方式公开了一种***测试方法,通过把健壮性测试与性能压力测试实现松耦合的集成,在压力测试过程中自动注入***故障,并在压力测试过程中实时监控链路上各***的各项指标,该方法包括以下步骤:
配置故障定时任务,每个故障定时任务中包括一个或多个故障操作;
将压力测试任务与故障定时任务进行关联;以及
执行压力测试任务,在执行压力测试任务的过程中,动态注入与压力测试任务所关联的故障定时任务中的每个故障操作,并实时监控业务链路上各***的各项指标,得到对应的故障操作时段的监控数据。
本发明的实施方式还公开了一种***测试装置,包括:
故障配置单元,用于配置故障定时任务,每个故障定时任务中包括一个或多个故障操作;
任务关联单元,用于将压力测试任务与特定的故障定时任务进行关联;以及
压力测试单元,用于执行压力测试任务,在执行压力测试任务的过程中,动态注入与压力测试任务所关联的故障定时任务中的每个故障操作,并实时监控业务链路上各***的各项指标,得到每个故障时段的监控数据。
本发明实施方式与现有技术相比,主要区别及其效果在于:
通过把健壮性测试与性能压力测试实现松耦合的集成,在压力测试过程中自动注入***故障,并在压力测试过程中实时监控链路上各***的各项指标,解决了大并发的情况下也能有效地对特定故障进行测试的问题。
进一步地,在压力测试任务结束后,将与压力测试任务所关联的故障定时任务中的每个故障操作与对应的故障操作时段的监控数据和业务场景进行关联,自动生成测试报告,从而能够将***维度的故障与链路业务维度的场景进行关联地进行分析,提高了准确度。
进一步地,在自动生成测试报告之后,还以趋势建模的方式对指标均值对比、趋势对比以及响应延迟进行分析,从而在考虑了响应延迟的故障来进行建模分析,提高了准确度。
具体实施方式
在以下的叙述中,为了使读者更好地理解本申请而提出了许多技术细节。但是,本领域的普通技术人员可以理解,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请各权利要求所要求保护的技术方案。
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明的实施方式作进一步地详细描述。
为了帮助理解本发明,现对一些说明书中的用语进行说明。
业务场景通常是指完成某项业务目标的一个过程。通常一个业务场景的执行过程会包含对链路上多个***的多个接口的多次调用。在业务场景中可以包含多个操作步骤,每个操作步骤包含一个或多个页面请求,每个页面请求会包含一个或多个依赖***的接口调用。
故障注入操作是健壮性测试的基本单位。一个故障注入操作通常包括以下信息:故障名称、注入手段(字节码、脚本或其他)、被注入故障的***域名、注入的响应延迟大小、抛出的异常类型等。在健壮性测试的过程中,测试人员可以从***接口的粒度进行故障注入操作,来监控和评估该故障操作对业务场景的影响度。
利特尔法则(Little's Law)在性能测试中的应用非常广泛,主要用于性能结果的验证,法则的公式如下所示:
TPS=U_concurrent/(T_response+T_think)
其中:
a)TPS是***或业务的吞吐量;
b)U_concurrent是压力测试的并发数;
c)T_response是***或业务的平均响应时间;
d)T_think是平均思考时间。
根据利特尔法则,只要保持压力测试并发数U_concurrent恒定,可以利用故障注入技术来动态地控制T_response+T_think,从而量化***或者业务在某个故障延迟状态下的TPS表现。
本发明第一实施方式涉及一种***测试方法。图1是该***测试方法的流程示意图。
具体地说,该***测试方法通过把健壮性测试与性能压力测试实现松耦合的集成,在压力测试过程中自动注入***故障,并在压力测试过程中实时监控链路上各***的各项指标。如图1所示,该***测试方法包括以下步骤:
在步骤S101中,配置故障定时任务,每个故障定时任务中包括一个或多个故障操作。
故障操作是健壮性测试的基本对象。故障操作可以包括多种信息,例如包括以下信息:故障操作名称,注入手段,操作类型,(被注入)***域名,(被注入)服务类名,(被注入接口)方法名,注入延迟,(抛出)异常类名。
例如以下为一个示例性的故障操作所包括的信息。
故障操作名称:systemA-serviceB.methodC-注入500ms延迟,
注入手段:字节码注入,
操作类型:故障注入,
***域名:systemA.xxx.yyy.net,
服务类名:net.yyy.xxx.systemA.serviceB,
方法名:methodC,
注入延迟:500ms,
异常类名:java.lang.NullPointerException。
一个或多个故障操作组装成一个故障定时任务。例如,在一个名为testTask1的故障定时任务中包括三个故障操作,即故障操作testAction1、testAction3、testAction4,三个故障操作的相对时间分别是5min、10min、15min。
图2中示出了一个示例性的故障定时任务的配置过程,在故障配置模块新建故障操作,根据需要可以新建任意数量的故障操作,然后再新建故障定时任务,把之前新建的所有故障操作添加到此故障定时任务中来,并配置每个故障操作的计划执行时间。
可选地,除了创建以外,还可以查询、编辑或删除故障操作和故障定时任务。
此后进入步骤S102,将压力测试任务与故障定时任务进行关联。
此后进入步骤S103,执行压力测试任务,在执行压力测试任务的过程中,动态注入与压力测试任务所关联的故障定时任务中的每个故障操作,并实时监控业务链路上各***的各项指标,得到对应的故障操作时段的监控数据。
***的各项指标可以包括各种指标,例如包括硬件资源、Java虚拟机(JVM)状态、***日志等等。
监控数据可以包括各种数据,例如包括业务维度数据和***维度数据等等。
以下是一个示例性的实施例,根据实际需要可进行更改。在配置了故障定时任务且将压力测试任务与故障定时任务进行关联后,触发压力测试任务,并启用与其相关联的故障定时任务。在压力测试任务的执行过程中,根据之前配置的故障定时任务,与业务链路上的相关应用***所在机器上的agent(智能体)进行通讯,动态地注入故障。在压力测试任务的执行过程中,与业务链路上的每个应用***所在机器上的agent(智能体)进行交互,实时采集相关的业务维度和***维度指标数据。
此后结束本流程。
该***测试方法优选为还包括以下步骤:在压力测试任务结束后,将与压力测试任务所关联的故障定时任务中的每个故障操作与对应的故障操作时段的监控数据和业务场景进行关联,自动生成测试报告。如此一来,能够将***维度的故障与链路业务维度的场景进行关联地进行分析,提高了准确度。
而且,在自动生成测试报告之后,还优选对测试报告进行分析。对测试报告的分析可以采用多种方式,例如以趋势建模的方式对指标均值对比、趋势对比以及响应延迟进行分析等等。如此一来,在考虑了响应延迟的故障来进行建模分析,提高了准确度。
综上所述,通过把健壮性测试与性能压力测试实现松耦合的集成,在压力测试过程中自动注入***故障,并在压力测试过程中实时监控链路上各***的各项指标,解决了大并发的情况下也能有效地对特定故障进行测试的问题。
本发明的各方法实施方式均可以以软件、硬件、固件等方式实现。不管本发明是以软件、硬件、还是固件方式实现,指令代码都可以存储在任何类型的计算机可访问的存储器中(例如永久的或者可修改的,易失性的或者非易失性的,固态的或者非固态的,固定的或者可更换的介质等等)。同样,存储器可以例如是可编程阵列逻辑(Programmable ArrayLogic,简称“PAL”)、随机存取存储器(Random Access Memory,简称“RAM”)、可编程只读存储器(Programmable Read Only Memory,简称“PROM”)、只读存储器(Read-Only Memory,简称“ROM”)、电可擦除可编程只读存储器(Electrically Erasable Programmable ROM,简称“EEPROM”)、磁盘、光盘、数字通用光盘(Digital Versatile Disc,简称“DVD”)等等。
本发明第二实施方式涉及一种***测试装置。图3是该***测试装置的结构示意图。本发明的实际结构可以根据实际需要做出必要的调整,并不局限于图3中的结构。
具体地说,该***测试装置通过把健壮性测试与性能压力测试实现松耦合的集成,在压力测试过程中自动注入***故障,并在压力测试过程中实时监控链路上各***的各项指标。如图3所示,该***测试装置100包括:
故障配置单元101,用于配置故障定时任务,每个故障定时任务中包括一个或多个故障操作;
任务关联单元102,用于将压力测试任务与特定的故障定时任务进行关联;以及
压力测试单元103,用于执行压力测试任务,在执行压力测试任务的过程中,动态注入与压力测试任务所关联的故障定时任务中的每个故障操作,并实时监控业务链路上各***的各项指标,得到每个故障时段的监控数据。
第一实施方式是与本实施方式相对应的方法实施方式,本实施方式可与第一实施方式互相配合实施。第一实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第一实施方式中。
可选地但并非必须地,***测试装置100还包括报告生成单元104(在图3中未示出),用于在压力测试任务结束后,将与压力测试任务所关联的故障定时任务中的每个故障操作与对应的故障时段的监控数据和业务场景进行关联,自动生成测试报告。
可选地但并非必须地,故障配置单元101包括以下子单元(在图3中未示出):故障操作创建单元201,用于创建一个或多个故障操作;故障定时任务创建单元202,用于创建故障定时任务;以及添加单元203,为故障定时任务创建单元202所创建的故障定时任务添加故障操作创建单元201所创建的故障操作及每个所创建的故障操作的执行时间。
可选地但并非必须地,***测试装置100还包括报告分析单元105(在图3中未示出),用于对测试报告进行分析。
需要说明的是,本发明各设备实施方式中提到的各单元都是逻辑单元,在物理上,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现,这些逻辑单元本身的物理实现方式并不是最重要的,这些逻辑单元所实现的功能的组合才是解决本发明所提出的技术问题的关键。此外,为了突出本发明的创新部分,本发明上述各设备实施方式并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,这并不表明上述设备实施方式并不存在其它的单元。
需要说明的是,在本专利的权利要求和说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
虽然通过参照本发明的某些优选实施方式,已经对本发明进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。