加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用JMETER做Webservice Security(WSS)测试

发布时间:2020-12-17 00:57:40 所属栏目:安全 来源:网络整理
导读:??? 做压力测试,JMETER无疑是很好的选择,开源、易用、免费以及支持的协议比较多,最近要对WEBSERVICE做压力测试,我们也是选择了JMETER。不过我们碰到了一个问题,那就是我们要做WSS测试,而JMETER官方并没有支持WSS测试,需要自己写插件。不过这其中有几

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

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

??? 注:生成WSS Header,可以参看我的一篇文章:http://www.voidcn.com/article/p-gbhbdyph-bha.html

??? 把实现的JAVA测试工程导出成JAR包,放到目录${JMETER_HOME}libext下面,把当前工程依赖的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://www.voidcn.com/article/p-gbhbdyph-bha.html

?? ? ?? 这里的实现肯定会依赖其他的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}libextApacheJMeter_http.jar

??????? B、导出src/core工程,覆盖${JMETER_HOME}libextApacheJMeter_core.jar

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

???

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

本文出自:冯立彬的博客

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读