使用JMeter对SOAP应用进行压力或性能测试(下)

日期: 2010-04-27 作者:孙春华杨佑鑫陆亮 来源:TechTarget中国 英文

  使用JMeter连接SOAP Over HTTP服务

  JMeter提供了Web Services (SOAP) sampler,用以调用基于HTTP的Web服务。下面详细说明SOAP Over HTTP服务调用的各个属性。

图 3.SOAP Over HTTP服务调用的各个属性

  图 3.SOAP Over HTTP服务调用的各个属性

  SOAP Over JMS服务调用的各个属性说明:

  QueueConnectionFactory:连接工厂的默认JNDI实体

  JNDI name Request queue:JNDI请求队列名字

  JNDI name Receive queue:JNDI 接收队列名字

  Timeout:请求超时设置

  Communication style:通讯形式(包括仅仅请求和请求应答)

  Content:请求信封

  JMS Properties:JMS的一些属性设置(对于IBM WAS必须要有targetService属性)

  Initial Context Factory:JNDI的初始会话工厂

  Provider URL:服务提供地址

  下面是一次完整的JMS请求与JMS响应SOAP数据:

    TT SOA编辑推荐:简单对象访问协议SOAP学习手册

以下是引用片段:
JMS Request 
 <soapenv:Envelope> 
 <soapenv:Body> 
  <tns0:getAuEmpPositionId> 
  <ev_id>6098</ev_id> 
  </tns0:getAuEmpPositionId> 
 </soapenv:Body> 
 </soapenv:Envelope> 
 
 JMS Response 
 <soapenv:Envelope> 
 <soapenv:Header/> 
 <soapenv:Body> 
  <p150:getAuEmpPositionIdResponse> 
  <getAuEmpPositionIdReturn xsi:nil=”true”/> 
  </p150:getAuEmpPositionIdResponse> 
 </soapenv:Body> 
 </soapenv:Envelope> 
 

  设计高效的测试用例集

  压力测试或者系统测试不同于功能测试,测试的重点不在系统产品是不是满足设计需求。它所看重的是系统在大的用户量和负载情况下的可靠性以及系统响应,它目标是测试系统的执行效率,特别是在较短时间内系统负载快速增长时系统的相应速度。在实际的测试过程中,大量用户同时访问的系统节点也可能成为产品潜在的效率瓶颈。因此 , 压力测试和系统测试也往往是在功能测试之后进行。

  对于普通的软件系统,产品的瓶颈可能会在数据库服务器上,Web服务器上,而对于SOAP服务系统测试,Web Services服务器和JMS服务器是客户端请求的主要节点,同时,主要业务逻辑的处理也都分布在这些节点上,它们很有可能成为系统访问的瓶颈,如果这些节点出现问题,那么对整个系统的效率会有致命的影响,也是压力测试和系统测试要优先考虑的。

  改进测试策略、测试方法、测试过程,使用高效的测试用例集,从而保证产品质量。这个是主要目的,也是最直接的目的。一个高效的测试用例集应包含以及适应如下要素:

  在什么时候确定要执行系统测试

  如何去检测并解决系统性能和负载问题

  收集监视服务器性能数据(I/O、CPU、MEM)

  尽量减少因为个人配置和某些测试用例而造成系统出现错误和瓶颈

  所有测试工作都得到有效协调并目标一致

  当已经确定了所需的JMeter Samplers,并且在此基础上设计出一个通用的测试计划,那么就可以构建我们的测试脚本了。本文的测试用例以及最终的测试计划也是建立在这些要素之上。

  测试计划(Test Plan)描述了测试运行过程中JMeter的执行顺序、过程以及步骤,一个完整的测试计划包括一个或者多个线程组(Thread Groups)、循环控制器(Loop Controllers)、监听器 (Listener)、逻辑控制器(Logic Controller)、定时器(Timer)、断言(Assertions)、配置信息(Config Elements)等。

  在测试计划中添加一个用户定义变量配置元素(User Defined Variables), 可以在里面定义服务器地址,日志路径,超时限制等变量,提供脚本重用。同时添加两个用户组,一个是SOAP Over HTTP Group,一个是SOAP Over JMS Group。在每个用户组下面分别添加一个总的循环控制器(Loop Controller),用以控制脚本循环次数。在总循环控制器下面添加随机选择器(Random Selector)用以随机选择运行测试脚本。下图是我们整个的Test Plan。

图 4. 设计完成之后的SOAP测试计划

  图 4. 设计完成之后的SOAP测试计划

  启动SOAP服务测试

  当准备好我们的测试计划之后就可以启动执行压力测试了,为了记录测试结果和信息,要增加Listener来完成这个任务。JMeter提供了可视化的界面以及统计报表来供我们选择。这里我们使用表格(Summary Report)的形式来查看和分析测试结果。

  你可以通过下面的步骤来给每个Group增加Summary Report监视器 :

  1. 选中Test Plan中要添加Listener的Group节点,这里我们选择SOAP Over JMS Group。

  2. 右击选择Add–>Listener–>Summary Report, 界面右边会相应的出现我们选择的Listener的设置信息。

  在经过一系列工作之后,已经完成了整个Test Plan,现在可以选择JMeter菜单run–>start来启动我们的压力测试了。下图是运行过程中测试统计数据的实时跟新信息。为了增加请求负载和获得更有价值的数据,我们可以更改线程数、等待时间和循环次数。

图 5. 基于吞吐量的测试结果报表(Summary Report)

  图 5. 基于吞吐量的测试结果报表(Summary Report)

  获得的经验

  总结:

  使用JMeter来作为测试工具对SOAP协议的服务进行压力和系统测试是一个很好选择,选择JMeter来进行SOAP测试具有以下显著的优点:首先JMeter提供了强大全面的SOAP请求 / 接收以及监视功能,允许你执行、捕获在客户端和服务器端的SOAP流量分析。其次,可以使用JMeter可以设计出高效、易维护的测试用例甚至测试计划。最后,我们可以选择JMeter提供的符合我们情况的结果Listener,并且可以从这些 Listener中很容易的分析出系统或者是服务存在的问题和瓶颈。总体上讲,我们在JMeter测试框架中构建的SOAP测试计划很好的完成了对 SOAP 协议的系统测试。下面详细列出了我们在本次测试过程中获得的技巧以及经验。

  测试工具的选择

  测试工具在软件和产品测试中是必不可少的,包括系统测试,压力测试,性能测试以及功能测试。它也会与要测试的产品,测试的领域以及测试的重点有很大的关系。因此,选择一款合适的测试工具对高效的完成测试是至关重要的。

  设计高效的测试计划

  一个高效的测试用例集可以快速的诊断出系统的性能瓶颈。 为此应该全面的分析了解要测试系统的架构与应用,尽量避免盲目或者重复的测试用例,最终来构建效率尽可能高的测试用例集。

  尽量全面的系统监控

  软件缺陷和系统性能瓶颈的诊断可能会需要各个方面的检测数据,它们对问题的解决会提供很大的帮助,因此测试过程中应该有全面的系统监控,包括服务器的各项数据(CPU,I/O,MEM), 后台数据库的各项数据,相应时间以及网络流量等。

  关注SOAP请求的超时(Timeout)

  基于SOAP协议的请求,无论是SOAP Over HTTP还是SOAP Over JMS都会有请求超时(Timeout),引起请求超时的原因可能是多方面的(服务器的响应速度,效率,网络带宽等),合理的分析以及设置请求超时能更准确的掌握产品的性能情况。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

孙春华
孙春华

暂无

杨佑鑫
杨佑鑫

暂无

陆亮
陆亮

暂无

相关推荐