共计 4804 个字符,预计需要花费 13 分钟才能阅读完成。
现实项目中我们使用了 JMeter 对 WebService 进行了压力测试,Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试。
一、JMeter 的作用
1. 能够对 HTTP 和 FTP 服务器进行压力和性能测试,也可以对任何数据库进行同样的测试(通过 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;
}
Windows 下 JMeter 安装手记 http://www.linuxidc.com/Linux/2013-10/91749.htm
使用 JMeter 进行基本压力测试 http://www.linuxidc.com/Linux/2013-04/83086.htm
JMeter 中断言的使用方法 http://www.linuxidc.com/Linux/2013-10/91770.htm
JMeter 的详细介绍:请点这里
JMeter 的下载地址:请点这里