微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用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://www.voidcn.com/article/p-gbhbdyph-bha.html

    把实现的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://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}\lib\ext\ApacheJMeter_http.jar

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

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

   

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

本文出自:冯立彬的博客

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐