LoadRunner在中间件测试中的使用方法与研究

2017-04-18 23:43肖洋曾明
电脑知识与技术 2016年35期
关键词:中间件软件测试

肖洋+曾明

摘要:中间件是介于客户端和服务器端的一类轻量级软件,难以通过常规测试方法对其进行需求验证,本文通过某型中间件测试项目实践的归纳总结,结合理论分析和测评工具LoadRunner的辅助检验,得出一套中间件的基本测试思路和方法,并已在同类软件测试中进行推广应用,取得良好的测试效果,有效提升测试质量和效率,属于测试方法上的探索与创新。

关键词:中间件;软件测试;LoadRunner;C++;C#

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)35-0273-03

1 引言

中间件是一种独立的系统软件或者服务程序,位于操作系统、网络和数据库之上而在应用软件之下。分布式应用软件可以借助中间件在不同的技术之间交换资源,中间件多数应用于C/S(Client/Server)、B/S(Browser/Server)以及无服务器节点的三类分布式软件之中。

LoadRunner是一种预测系统行为和性能的负载测试工具,通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。

在分布式系统测试中,LoadRunner只适用于没有中间件的B/S软件,对于有中间件的B/S软件,在工具使用时一般将中间件视作服务器程序的一部分,测试结果是对服务器和中间件检测的共同结果而不单指中间件。而C/S软件一般不使用LoadRunner进行测试,因为其操作很难被录制完整,目前主要有两种方法测试C/S类软件,一种方法是靠功能测试的方法来检验软件的性能、强度等核心指标,比如同时加载运行多个客户端程序,另一种方法是在调用中间件的代码前后插桩获取时间,通过多次调用取均值等方式进行考量,但是这两种方法都很难说明中间件在多用户并发下的处理能力,掩盖了中间件的真实效能,只能是一个粗略甚至是错误的评价(比如由于其他原因造成10毫秒内数据不能被显示)。

本文通过长期的资料查询和自动化测试工具使用研究,立足现有工具LoadRunner的基础上,采用测试+开发的模式,总结出一套单独测试中间件类软件的方法,可适用于B/S、C/S以及无服务器模式下中间件的性能、强度等测试。

2 中间件测试中的分析实践

2.1 中间件的简介

中间件是普遍是软件系统的核心组成部分,基本都要求高性能、实时、低延迟,本次测试的中间件软件结构如图1所示:

中间件采用C++语言开发,底层采用实时CORBA作为通信基础,是一个标准动态链接库(DLL)。该软件支持对象、消息和数据流三种模式的数据传输,能够实现无服务器节点、分布式运行,并能够监视运行状态。

2.2 LoadRunner工作原理

LoadRunner工具主要分为三个部分。

1) Vuser生成器

Vuser生成器用于录制测试操作,生成一个虚拟用户,虚拟用户可以模拟真实用户的各类操作,可以参数化设置,从而达到利用不同数据测试应用程序的目的,录制主要适用于Web类的软件。

2) Controller控制器

Controller控制器属于LoadRunner上的核心部件,可以利用Vuser生成器虚拟的用户,建立一个多用户的测试方案,可以利用各类参数进行并发设置,从而达到持续且循环的负载测试。

同时,Controller可以实时监控应用软件的运行性能。

3) Analyzer分析器

Analyzer分析器主要用于获取并发测试后在Vuser生成器中设定的参数值,以及应用软件的运行性能分析。

简而言之,LoadRunner通过Vuser录制一个用户的操作,Controller利用参数化,模拟多个不同的用户同时并发操作,整个软件的多个指标可以在Analyzer中量化得出。

2.3 测试方法的分析与设计

各类平台可以通过中间件加入或者退出系统。按照中间件的某项要求,整个系统中至少支持255个以上的中间件可以同时运行,常规测试方法无法应对如此大的并发要求检查,而LoadRunner无法录制这类无服务器节点软件的各类操作,第一步就不可行。但是由于其Controller在并发控制上的强大功能,只有寻找一种方法,既能避开C/S软件行为不好录制模拟的缺点,又能使用其大规模并发控制的优势,这是整个测试方法的关键。如果可行,则能够单独模拟中间件的各种行为,并能将其视作一个Vuser,进而纳入LoadRunner的测试方式。

经过分析,LoadRunner可以采用标准C语言的方式加载DLL文件,与实装设备软件调用中间件的方式没有差异,但是LoadRunner无法模拟中间件中回调函数的使用(C语言不支持回调函数),该函数是中间件的核心功能,无法绕开,经过多次实践,单独开发了一个测试辅助程序,利用中间件借口,替代其回调功能,那么就可以采用直接调用中间件函数的方式完整实現其各种功能,从而解决其无法录制的问题,代码见图3。

在Controller模拟多个中间件时,在调用中间件的过程中,发现有内存冲突的现象,并不符合实际运行环境中的一个台位一个中间件的使用情况,因此,通过设置使每个成员能够获取自己独立的进程,让中间件成员之间不会产生内存资源冲突,并通过并发集合点等功能的设置,达到检查各类性能指标的目的。到此,整个测试方法设计完成。

2.4 测试结果的验证

通过将中间件以及辅助程序封装成一个Vuser,利用Controller并发调用,设计各类测试用例验证中间件性能、强度等指标能力,从LoadRunner的实际表现来看,至少有以下几类软件缺陷是其它测试方法无法或者很难验证的(验证的代价过大):

1) 最大节点数检验

中间件要求同一网络中至少支持255个中间件同时运行,在强度测试中发现软件只能支持到52个中间件的加入。后经开发人员确认为成员管理模块设计分配的内存单位计算错误所致,而在通常使用中,一般只有十几个平台加入,该问题几乎不会被发现。

2) 信息处理能力的检验

中间件有多个处理能力指标,比如对象间交互事件发布/订购的帧周期≤1s(可靠传输),在性能测试中发现,在多个成员并发发送消息时,帧周期虽然满足要求,但是数据有丢失或者阻塞,这种问题在单独的代码插桩中很难被发现。

在实际中,中间件主要是协调上层软件的操作,一个操作一个消息,很难模拟出大规模用户并发消息时的场景,但是Controller可以持续不断进行压力负载测试,从而发现其在强度测试上的问题。

3) 软件算法正确性的检验

由于中间件是被LoadRunner封装成一个Vuser,而又保留其DLL的特性,因此可以通过一些极端方式检验某些算法的正确性,比如测试时间同步函数。要求时间同步精度≤10ms,经过测试发现其精度常在10ms左右浮动,后做了1000次、2000次的时间同步,发现其数据逐步发散,显示其同步算法有问题,如图4所示,而这类缺陷,开发人员由于无法模拟出多个中间件并发的情况,很难对其进行检验。

篇幅所限,其余功能、接口等方面的测试就不再赘述。

3 在C\S系统中的应用推广实践

被测系统是一个由.NET + SQL Server开发的C/S系统,系统要求并发用户访问数≥100个,对此一般有两种测试方法:

第一种是传统的测试方法,由于LoadRunner有直接調用exe文件的功能,可以直接加载100个客户端,但是在测试过程中,由于100个客户端框架所占内存耗费极大,根本达不到100个用户操作系统就会崩溃,另一方面同时运行不代表同时并发,即使实现加载也不代表并发性能。

第二种就是通过2.3所述的方法来进行分析,可知测试的关键是如何将客户端封装成一个Vuser,经过资料研究,发现可以通过.NET的LR插件对客户端进行二次开发,将其编译成一个可供Controller调用的Vuser,在二次开发中,可以将耗费资源的框架类等注释掉,调试完成后就可生成一个Vuser,然后进行各类测试。

在Java开发的各类软件中,可以使用同样的分析方法,采用加载class的方式,实现对接口函数的调用,从而设计出一个可供Controller调用的Vuser。

4 总结

本文主要是从中间件测试的实践中,发现LoadRunner在测试并发性能指标时的独特优势,从而总结出一套将被测软件封装成Vuser的分析方法,再利用Controller实现多用户并发从而发现普通测试方法不易发现的问题。

本方法难度在于具体实践中各个类型软件封装的方法不一样,比如中间件编程语言有C++、C#、Java、Perl、Python等等,形式可以是DLL、COM、EXE等等,该方法大多需要编程辅助,需要熟悉各类编程语言,完全掌握有难度,但是如果能把握其中原理,遇到该类测试时知道解决思路,按照封装Vuser的思想认真进行分析研究,虽然在初期进展缓慢,在完成封装后,测试进度和测试质量都能上一个层次,对于自身技术实力的增长也有好处,是值得花费时间和精力进行研究的。

猜你喜欢
中间件软件测试
基于OBE的软件测试课程教学改革探索
EXCEL和VBA实现软件测试记录管理
RFID中间件技术及其应用研究
基于VanConnect中间件的设计与开发
关于软件测试技术应用与发展趋势研究
基于Android 平台的OSGi 架构中间件的研究与应用
中间件在高速公路领域的应用
智能电能表软件测试技术概述
《软件测试》课程教学策略研究
基于SAF规范的高可用电信中间件设计