目中我们使用了Jmeter对webservice进行了压力測试,Apache JMeter是Apache组织开发的基于Java的压力測试工具。用于对软件做压力測试。
JMeter的作用
1.可以对HTTP和FTPserver进行压力和性能測试, 也可以对不论什么数据库进行相同的測试(通过JDBC)。
2.全然的可移植性和100% 纯java。
3.全然 Swing 和轻量组件支持(预编译的JAR使用 javax.swing.*)包。
4.全然多线程 框架同意通过多个线程并发取样和 通过单独的线程组对不同的功能同一时候取样。
5.精心的GUI设计同意高速操作和更精确的计时。
6.缓存和离线分析/回放測试结果。
二:关于Jmeter的相关环境变量的配置类似于Java的配置,參考网上资料
三:Jmeter针对Http协议的webservice測试实例。
1:首先在測试计划中新建一个线程组
当中,线程属性中线程数和循环次数表示一次执行測试的时候真正执行的次数。也即訪问webservice的次数.
2:线程组以下新建一个HTTP请求(关于訪问接口服务的相关地址配置和一些參数的配置)和HTTP信息管理器(发送webservice服务时候的公共请求头),聚合报告(測试报告).
四:配置好一切之后,点击启动运行測试
=============we test webservice by http head start===========
name=clark
=============we test webservice by http head end===========
备注====================================下面为关于webservice服务的配置集成到spring中
applicationContext_webservice.xml
<?
xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config />
<import resource="classpath:META-INF/cxf/cxf.xml" />
<jaxrs:server id="restContainer" address="/">
<jaxrs:serviceBeans><!-- 这里配置你的webservice bean定义。
參考 org.iboxpay.payment.merchant.ws.MerchantWebService -->
<!-- <ref bean="orderWebService" /> <ref bean="merchantWebService" /> -->
<ref bean="clearUserWebService" />
<ref bean="merchantWebService"/>
<!-- <ref bean="balanceWebService" /> -->
</jaxrs:serviceBeans>
<jaxrs:extensionMappings>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</jaxrs:extensionMappings>
<jaxrs:providers>
<!-- <ref bean="jsonExMapper" /> -->
<ref bean="jaxbProvider" />
<ref bean="jsonProvider" />
</jaxrs:providers>
</jaxrs:server>
<bean id="jaxbProvider" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider" />
<!-- ********************使用jackson作为序列化器*********************** -->
<bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
</beans>
web.xml文件里CXF插件配置webservice
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
Java中web service服务的配置
package com.iboxpay.clear.webservice;
import javax.annotation.Resource;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.springframework.stereotype.Service;
import com.iboxpay.clear.service.SysResourceService;
@Path("/clearPro")
@Service("clearUserWebService")
public class ClearWebService {
@Resource
private SysResourceService sysResourceService;
@Path("/dispath")
@POST
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public String dispath(String jsonStr) {
System.out.println("=============we test webservice by http head start===========");
System.out.println(jsonStr);
System.out.println("=============we test webservice by http head end===========");
return "can you";
}
}
假设须要查看运行測试之后在Jmeter中的返回结果,我们须要在线程组以下新建一个察看结果树(右键线程组>加入>监听器>察看结果树),在响应数据一栏即能够看到响应返回的结果
注意:在Jmeter发送JSON字符串的格式进行測试的时候,我们传递JSON參数的时候不能给參数名称,而应该直接给值既能够。
否则传到后台的时候会包括一系列的非字符串样式--导致其乱码。无法正确解析为我们须要的对象。
{"name":"zhangsan","description":"its"}既能够,而无需jsonStr = {"name":"zhangsan","description":"its"}其传过来的json參数我们仅仅须要解析为我们后台相应的对象就可以。
/**
* 将JSON字符串 转换为对象
*
* @author weiyuanhua
* @date 2010-11-18 下午02:52:13
* @param jsonStr
* JSON字符串
* @param beanClass
* 泛型对象
* @param field
* 对象中须要忽略的属性
* @return
*/
public static Object jsonToObject(String jsonStr, Class<?> beanClass,String... field) {
JsonConfig jsonConfig = getJSONConfig(field);
JSONObject jsonObject = JSONObject.fromObject(jsonStr, jsonConfig);
return JSONObject.toBean(jsonObject, beanClass);
}
private static JsonConfig getJSONConfig(String... field) {
JsonConfig jsonConfig = new JsonConfig();
if (field != null) {
jsonConfig = new JsonConfig();
String[] exclu = new String[field.length];
for (int i = 0; i < field.length; i++) {
exclu[i] = field[i];
}
jsonConfig.setExcludes(exclu);
}
return jsonConfig;
}