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

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

  Appache JMeter以及SOAP协议简述

  开源测试工具:Appache JMeter

  JMeter是Apache基金会Jakarta上的一个纯Java开源项目,起初用于基于Web的压力测试(pressure test),后来其应用范围逐渐扩展到对文件传输FTP,大型数据库(JDBC 方式),脚本程序(CGI, Perl等),Web Services,Java应用系统等方面的测试。JMeter本身主要用于性能测试,如系统压力等。除此之外,JMeter能够对应用系统做功能测试和回归测试,并且能够通过使用带有断言的脚本程序来验证系统然后返回用户期望的结果。为了提高工具的应用灵活性,JMeter允许使用正则表达式创建断言。正是由于它的灵活性和可扩展性,JMeter逐渐成为流行的开源测试工具。

  消息传递协议:SOAP

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

  SOAP(Simple Object Access Protocol)称为简单对象访问协议, 是W3C定义的一种标准消息传递协议,而它通常被认为是 Web Services 的事实标准。SOAP协议使用XML语言来描述,SOAP消息格式是由XML Schema模式定义,因而通过使用 XML 命名空间使得 SOAP 具有很强的可扩展性。

  SOAP是在去中心化(Decentralized)分布式(Distributed)环境中用来信息交换的一个轻量级协议。SOAP 本身并不定义像程序模型或实施声明等形式的语法,而只定义了一种简单机制:通过提供模块化的包装模型编码机制来传输应用信息。

  SOAP基本结构:

  1) 信封Envelope Envelope元素是SOAP中的根元素,并且定义为在SOAP消息中必须出现。Envelope元素中可以包含多可选的Header元素,但同时必须要包含一个Body元素。

  2) 消息头Header Header可能出现在SOAP消息中,是一个可选元素。如果出现在消息中,那么Header一定要是SOAP中的第一个元素。SOAP Header在Web Services中的应用越来越广泛,例如在应用程序的安全性事物中使用标准的消息头文件,因而成为扩展SOAP协议的一个非常有效的方法。

  3)消息体Body Body元素是SOAP中必须出现的一个元素,它要包含应用程序中的传输数据或者反馈消息。 应用程序中的传输数据可以是任意形式的 XML 数据。SOAP消息接收者最终来处理SOAP Body体。

  JMeter调用SOAP框架机制

  SOAP 使用 RPC(远程过程调用)和消息传递来建立通信服务,SOAP RPC定义了用于表示远程过程调用和应答的协议。SOAP协议本身仅仅定义了消息的交换结构,它可以和许多现存因特网协议结合在一起使用,其中包括超文本传输协议(HTTP),多用途网际邮件扩充协议(MIME),Java消息服务(JMS)以及简单邮件传输协议(SMTP)等。目前与SOAP应用最为广泛的是HTTP协议和JMS协议,而与之相对应的两种应用就是 SOAP Over HTTP和SOAP Over JMS。

  根据JMS的规范,消息交换有2种方式:消息发布 / 订阅方式和点对点方式。由这两种交换方式所建立的消息收发系统都是异步的,即JMS客户机可以发送消息而不必等待回应。如果应用程序测试者或测试脚本开发者希望每一条消息都能够被处理并且消息总是能够被传送到指定的位置,那么应该使用点对点消息模型而不是消息发布 / 订阅模型。

  HTTP(超文本传送协议)是属于应用层的面向对象的协议,是万维网 (WWW) 的基础,由于其简单快速、灵活、无连接、无状态的方式,适用于分布式网络信息系统。SOAP Over HTTP应用就是指的是遵守SOAP编码规则的HTTP请求 / 响应,我们可以用简单的公式来对此作一个描述:HTTP+XML=SOAP。

  JMeter也同样提供了两种Sampler分别建立对这两种服务的调用:Web Services (SOAP) Request和JMS Point-to-Point。前者使用互联网中最为广泛的超文本传输协议(HTTP)而后者使用JMS协议,JMS 是 Java 平台面向消息中间件的技术规范,用它来提供创建、发送、接收、读取消息的服务。许多厂商目前都支持JMS,包括BEA的WebLogic JMS service,IBM的MQSeries和Progress的SonicMQ。

图 1.JMeter框架基于上述两种不同的协议对SOAP消息的一次简单调用机制流程

  图 1.JMeter框架基于上述两种不同的协议对SOAP消息的一次简单调用机制流程

  准备测试环境

  当精心编写好测试脚本满怀信心的去运行测试计划时,发现所有的测试脚本都failed掉了,原因可能是你的测试环境中并没有完全准备好。下面给出了准备测试环境的详细步骤:

  1.环境变量设置:JMeter运行在JRE/JDK之上,在所有开始之前要设置JMeter自动检测的环境变量JAVA_HOME=#JAVA INSTALL DIRECTORY#.

  2.JMeter安装:本文下面下载栏提供了Apache JMeter下载地址,首先要取得最新版本的JMeter 测试工具,JMeter最新版本包含了构建和运行绝大部分测试类型的文件,包括Web (HTTP/HTTPS), FTP, JDBC, LDAP, Java和JUnit等。

  3.准备jar包:JMeter虽然提供了对SOAP Over HTTP以及SOAP Over JMS测试的Sampler,但是出于对licence的考虑它本身并没有提供JMS需要使用的jar包。因此,在运行测试之前需要将这些包复制到JMeter的lib目录下,下面列表对测试所需jar包作了详细说明。

  4.BeanShell脚本处理:如果在测试用例中用到了 BeanShell 脚本,则需要将 BeanShell 包拷贝到 JMeter bin 目录下。BeanShell是一种兼容Java语言的轻量级脚本语言,JMeter 脚本中可能会经常用它来做日志处理,正则表达式后处理(Post- Process)等。如果在测试用例中用到了Mail Visualiser, Mail Reader以 Web Services (SOAP) sampler,则需要将MAIL包拷贝到JMeter bin目录下。如果在测试用例中用到了JMS相关的sampler,则需要将JMS包拷贝到JMeter bin目录下。

  下面的列表列出了不同的测试用例所需要的jar包,以及其下载地址:

  bsh-2.0b4.jarhttp://www.beanshell.org/

  mail.jar http://java.sun.com/products/javamail/index.jsp

  jms.jarhttp://java.sun.com/products/jms/docs.html

  调试脚本中非常有用的信息日志:jmeter.log在脚本的调试和运行过程中,所以的日志信息都会记录在jmeter.log中,因此你会在这个文件中找到比较有用的信息。

  注意事项

  如果JMeter在执行测试脚本过程中应该修改jmeter.bat文件中的一些参数,参数大小可以根据测试计划合理确定:

  HEAP=-Xms256m – Xmx1024m

  NEW=-XX:NewSize=128m -XX:MaxNewSize=128m

  TENURING=-XX:MaxTenuringThreshold=2

  EVACUATION=-XX:MaxLiveObjectEvacuationRatio=20%

  PERM=-XX:PermSize=64m -XX:MaxPermSize=64m

  DEBUG=-verbose:gc -XX:+PrintTenuringDistribution

  此外,在搭建测试环境时还需要更多注意的地方:

  JMeter使用兼容JKD1.4或者更高版本

  JMeter无法识别zip格式的包文件,所以需要的包文件均要求以.jar结尾

  JMeter会自动在JMETER_HOME/lib和ext目录下寻找需要的类

  对于使用CSVDataSet, 那么不要勾选 “Memory Cache”否则数据无法迭代

  使用JMeter连接SOAP Over HTTP服务

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

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

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

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

  WSDL URL:指定WSDL文件的目标地址

  Web Methods:选择本次请求调用的方法

  Protocol:指定使用的协议,默认为HTTP

  Server Name Or IP:服务的地址(服务器名或IP地址)

  Path:调用方法所在的位置

  Timeout:设置请求超时限制

  SOAPAction:存在于WSDL文件中的调用方法,默认不必填写

  Soap/XML-RPC Data:请求数据

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

以下是引用片段:
以下是引用片段:
HTTP Request  
 <soapenv:Envelope>  
 <soapenv:Body>  
  <q0:getEndDate>  
  <ip_id>12</ip_id>  
  </q0:getEndDate>  
 </soapenv:Body>  
 </soapenv:Envelope>  
  
 HTTP Response  
 <soapenv:Envelope>  
 <soapenv:Header/>  
 <soapenv:Body>  
  <p928:getEndDateResponse>  
  dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,  
  startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,  
  endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],  
  firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2005,MONTH=8,  
  WEEK_OF_YEAR=37,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,DAY_OF_YEAR=250,DAY_OF_WEEK=4,  
  DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,  
  MILLISECOND=0,ZONE_OFFSET=-18000000,DST_OFFSET=3600000]  
  </p928:getEndDateResponse>  
 </soapenv:Body> 

 </soapenv:Envelope> 

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

孙春华
孙春华

暂无

杨佑鑫
杨佑鑫

暂无

陆亮
陆亮

暂无

相关推荐

  • 性能测试:确保SOA应用的性能

    SOA性能测试的重点是验证面向服务架构(SOA)方案在预期负载下能否满足业务对性能的要求。SOA压力测试的重点是确定SOA方案在它失败前所能承受的负载量——这里失败的定义是没有能力来满足一项或更多性能要求。

  • Websphere系统监控:提升用户对系统的感知度

    为了保证系统的稳定上线,功能测试是一个不可缺少的环节。但在所有功能点测试通过后,系统就能稳定的运行吗?答案是否认的。