JMeter 测试WebService协议

本文介绍如何使用 JMeter 进行 WebSocket 协议的压力测试,包括安装必要的插件及依赖包,配置测试计划和线程组,以及如何利用 CSV 数据源进行参数化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Jmeter本身不支持websocket协议的,所以需要安装第三方的插件还有6个依赖包。

首先,我们需要准备Jmeter的WebSocket协议的支持插件:

 

JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar
这插件依赖一下几个jar包
1、jetty-http-9.1.2.v20140210.jar
2、jetty-io-9.1.2.v20140210.jar
3、jetty-util-9.1.2.v20140210.jar
4、websocket-api-9.1.1.v20140108.jar
5、websocket-client-9.1.1.v20140108.jar
6、websocket-common-9.1.1.v20140108.jar

我们准备好这些jar包后,讲它们拷贝到Jmeter目录的\lib\ext\目录下,重新启动jmeter,就可以看到WebSocket Sampler(如果还是没有,有可能是JDK的版本太低,我用的是1.8)

操作步骤如下

1、鼠标右键选择测试计划->添加->Threads(users)->线程组,如下图



2、再次,选择鼠标右键选择上步添加的线程组->添加->Sampler->WebSocket Sampler,如下图





JMeter 实战

使用谷歌浏览器抓取WebSocket包(按下F12,选择NetWork,筛选WS)





其中添加了参数化文件(Jmeter有几种参数化方式,此处以CSV举例)



在Configure the CSV Data Source组中:
1、Filename:上步中要求建立的.bat文件的全路径;
2、File encoding:文件的编码格式,根据实际情况来;
3、Variable Names(comma-delimited):字段名,多个以逗号分隔
4、Delimiter(use'\t' for tab):定义分隔符,例如逗号的话,直接填写 逗号的符号即可
5、Allow quoted data?:选项选为“true”的时候对全角字符的处理出现乱码
6、Recycle on EOF:是否循环读入,CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入
7、Stop thread on EOF ?:当Recycle on EOF为False时,当读取文件到结尾时,停止进程,当Recycle on EOF为True时,此项无意义
根据实际情况进行设置。将所有的设置完成后,保存。
值得注意的是,如果不确实配置是否正确,可以暂缓参数化,直接在WebSocket页面填入Request data,运行,查看结果,如果成功返回,在开始参数化。
 
执行Jmeter测试计划,在结果树中可以查看发送和服务器返回的结果,如下图:

































































### 使用 JMeter 调用 WebService 接口 #### 准备阶段 在使用 JMeter 进行 WebService 接口测试之前,需确认所使用的 JMeter 版本。如果版本低于 3.2,则可以直接利用内置的 `SOAP/XML-RPC Request` 插件完成测试;但如果版本高于等于 3.2,则需要借助第三方插件或其他方法实现测试需求[^3]。 #### 配置 SOAP 请求 对于基于 SOAP 的 WebService 接口,可以通过以下方式配置: 1. **创建线程组** 打开 JMeter 后,在测试计划下右键选择“添加 -> 线程(用户) -> 线程组”,设置必要的线程数、循环次数等参数。 2. **添加 HTTP 请求默认值** 右键点击线程组,“添加 -> Config Element -> HTTP 请求默认值”。在此处填写目标服务器的基础 URL 和其他通用属性(如端口号),以便简化后续请求配置。 3. **构建 SOAP 请求** 如果使用的是低版本 JMeter (<3.2),可以在测试计划中添加 `SOAP/XML-RPC Request` 元素并输入具体的 WSDL 地址以及 SOAP 消息体内容。然而,针对更高版本 (>=3.2),推荐采用如下替代方案之一: - 利用普通的 `HTTP 请求` 来发送自定义 XML 数据包作为 POST 方法的有效载荷; - 或者安装额外支持 WS-* 协议栈特性的插件库扩展原有功能集。 4. **编写完整的 SOAP Envelope** 根据实际业务逻辑填充相应的字段值至标准模板结构之中。例如给定样例中的城市编码查询部分可参照如下形式书写: ```xml <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://WebXml.com.cn/"> <soap:Header/> <soap:Body> <web:getSupportCityString> <!--Optional:--> <web:theRegionCode>?</web:theRegionCode> </web:getSupportCityString> </soap:Body> </soap:Envelope> ``` 注意替换问号位置为你想要检索的具体区域代号字符串[^5]。 5. **指定 Content-Type 头部信息** 确保每条发出的消息都携带恰当的内容类型声明——即 application/soap+xml;charset=UTF-8 ,这有助于接收方正确解析传入的数据流格式。 6. **验证响应结果** 添加断言组件评估返回数据是否满足预期条件。比如检查状态码是不是成功标志位2xx系列数值;亦或是运用XPath Extractor 提取特定节点内的文本片段并与预设参考答案对比一致性程度等等。 --- ### 示例代码展示 以下是通过普通 HTTP Sampler 实现的一个完整例子演示如何向远程 web service 发起调用过程: ```java // 定义变量存储 wsdl url 和 soap body content String wsdlUrl = "http://example.com/service?wsdl"; String soapRequestData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+ "<soapenv:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" + " xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" + " <soapenv:Header/>" + " <soapenv:Body>" + " <ns1:GetWeatherForecast soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" + " <city xsi:type=\"xsd:string\">Beijing</city>" + " </ns1:GetWeatherForecast>" + " </soapenv:Body>" + "</soapenv:Envelope>"; // 设置 sampler 属性 sampler.setPostBodyRaw(true); sampler.addNonEncodedArgument("", soapRequestData, ""); sampler.setProperty(TestElement.TEST_CLASS, HttpTestSampleGui.class.getName()); sampler.setProperty(TestElement.GUI_CLASS, TestBeanGUI.class.getName()); // 设定 header manager 中包含必要头项 headers.put("Content-Type", "application/soap+xml;charset=UTF-8"); headers.put("SOAPAction", "\"urn:ExampleNamespace#GetWeatherForecast\""); ``` 上述脚本展示了怎样构造一个简单的天气预报获取请求,并设置了两个关键头部参数:一个是表明消息主体遵循何种协议规范的标准 MIME 类型描述符;另一个则是指示具体操作名称的空间限定标识符组合而成的动作标签串表示法。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值