`
coolerbaosi
  • 浏览: 730988 次
文章分类
社区版块
存档分类
最新评论

使用JMETER做Webservice Security(WSS)测试

 
阅读更多

做压力测试,JMETER无疑是很好的选择,开源、易用、免费以及支持的协议比较多,最近要对WEBSERVICE做压力测试,我们也是选择了JMETER。不过我们碰到了一个问题,那就是我们要做WSS测试,而JMETER官方并没有支持WSS测试,需要自己写插件。不过这其中有几个问题,一是比较费事,需要先熟悉他的插件编写规范,二来UI也不是我的强项,后面想到了两个变通的办法:

1、使用JMETER调JAVA测试,自己则在JAVA中去实现调用WSS的逻辑。这个比较简单,JAVA只需要继承AbstractJavaSamplerClient,并实现runTest方法就可以了,然后我们就可以在实现的JAVA方法中去实现WSS Header的实现,然后再通过HttpClient发送并获取结果就可以了。

注:生成WSS Header,可以参看我的一篇文章:http://blog.csdn.net/fenglibing/article/details/7644872

把实现的JAVA测试工程导出成JAR包,放到目录${JMETER_HOME}\lib\ext\下面,把当前工程依赖的JAR包放到目录${JMETER_HOME}\lib下面,重新启动JMETER,创建Sample/Java Request后就可以看到了。

2、修改JMETER的源码

我们知道,WSS请求和普通的WS请求,只是少了security header,我们只要能够在普通的WS请求发出去之前,把security header补上就好了。

我使用的JMETER版本是2.6,准备工作就是去吧JMETER的BINARY和SOURCE都下载回来了,可以去这里下载:http://mirror.bjtu.edu.cn/apache/jmeter/。

然后把源码和BINARY都解压缩,将源码导入到ECLIPSE工程中,把BINARY的LIB目录下面的JAR都拷贝到工程的LIB目录下。一切OK过后,现在我们就是修改它的源码,在WS请求的基础之上,增加一个WSS配置文件的选择框,然后我们再修改请求发送时判断是否有WSS的配置文件,如果有我们就根据配置文件把security header补充上去,否则就执行普通的WS请求,不加security header请求头。以下是需要修改的代码以及步骤。

1)、找到core工程下面的resource包:org.apache.jmeter.resources,这里面存放的就是国际化的配置文件,在这下面的每个文件都增加一行:

get_wss_config_file=Webservice Security Config Properties File

这个是WSS文件框文字说明。

2)、打开JAVA文件:org.apache.jmeter.protocol.http.sampler.WebServiceSampler,增加如下代码:

A:增加存放获取到的WSS配置文件:

private static final String wssConfigFile = "WebserviceSampler.wssConfigFile";
public String getWssConfigFile() {
return getPropertyAsString(wssConfigFile);
}
public void setWssConfigFile(String wssConfigFileValue) {
setProperty(wssConfigFile, wssConfigFileValue);
}

B:增加判断是否存在WSS文件,并确定是否补充security header,在方法openDocument(String file)返回之前,既return doc之前增加这样的判断,如增加下面这样一行方法:

addWSSecurity(doc);

不过这个方法需要你自己去实现了,如何生成,看我的这篇文章了:http://blog.csdn.net/fenglibing/article/details/7644872

这里的实现肯定会依赖其他的JAR包,这些依赖的JAR包都要放到目录{JMETER_HOME}\lib下面。

3)、打开JAVA文件:org.apache.jmeter.protocol.http.control.gui.WebServiceSamplerGui,需要补充四行代码,

A、增加类变量:private final FilePanel wssConfigFile = new FilePanel(JMeterUtils.getResString("get_wss_config_file"), ".properties");

B、在方法modifyTestElement(TestElement s)中,增加一行:sampler.setWssConfigFile(wssConfigFile.getFilename());

C、在方法clearGui()中,增加一行:wssConfigFile.setFilename("");

D、在方法createMessagePanel()的这一行southPane.add(randomXmlPane);下面增加一行:southPane.add(wssConfigFile);

4)、重新导出JAR包

A、导出src/protocol/http工程,覆盖${JMETER_HOME}\lib\ext\ApacheJMeter_http.jar

B、导出src/core工程,覆盖${JMETER_HOME}\lib\ext\ApacheJMeter_core.jar

这个时候,可以重新启动JMETER了。


比较上面的两种方案,第一种要简单一点,不需要修改JMETER的源代码,不过要自己去实现WSS请求的发送处理;第二种要修改JMETER的源码,不过不需要自己去实现发送这么一个逻辑,只需要在发送之前根据条件判断是否增加security header即可。两种方案都有自己的优势与不足,各位看官自己选择了。

本文出自:冯立彬的博客




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics