Jmeter之HTTP Request Defaults

本文详细介绍了JMeter中HTTPRequestDefaults组件的作用及参数配置,并通过实例展示了多个Defaults组件的默认值如何叠加,以及它们对HTTP请求的影响。

一、HTTP Request Defaults的作用:

  该组件可以为我们的http请求设置默认的值。假如,我们创建一个测试计划有很多个请求且都是发送到相同的server,这时我们只需添加一个Http request defaults组件并设置“Server Name or IP”,然后添加多个http请求且不设置"server name or ip",这些http请求会默认使用Http request defaults组件设置的值。

 参数列表:

Attribute Description Required
Name
组件名 No
Server
域名或IP No
Port 端口 No
Connect Timeout 连接超时时间(单位毫秒) No
Response Timeout 响应超时时间(单位毫秒) No
Implementation 实现方式,默认值为Jmeter属性:jemter.httpsampler No
Protocol 协议,HTTP or HTTPS No
Method 请求方法:HTTP GET or HTTP POST No
Path 请求资源路径 No
Send Parameters With the Request 参数列表 No
Server (proxy) 代理服务器的域名或IP No
Port 代理服务器的端口 No, unless proxy hostname is specified
Username 代理服务器的用户名 No
Password 代理服务器的密码 No
Retrieve All Embedded Resources from HTML Files 告诉Jmeter解析HTML文件并发送所有资源请求(包括图片,java小程序,JS,CSS等) No
Use concurrent pool 用一个连接池来获取嵌入的资源 No
Size 用于获取嵌入式资源的并发连接池大小 No
Embedded URLs must match: URL匹配,过滤 No

 

二、特别注意:

   在Jmeter之Http Cookie Manager这里我们说过,一个测试计划最好只有一个Manager组件,因为Jmeter无法处理多个Manager的情况。但在一个测试计划中可以有多个Defaults组件,多个Defaults组件的默认值会叠加。

 例子:

  如下,定义了两个HTTP Request Defaults组件,一个Http sampler(one什么也不填写),一个View Resuls Tree:

HTTP Request Defaults1:Server Name or IP: www.baidu.com,一个参数:aaa=111

 

HTTP Request Defaults2:Server Name or IP: www.qq.com,两个参数:bbb=22,aaa=333

运行结果:

 

 

总结:

1、一个测试计划中可以有多个Defaults组件,多个Defaults组件的默认值会叠加,如上图,虽然两个Defaults 组件都定义了参数aaa,但发出的请求还是会叠加起来。

2、两个default中都定义的"Server Name or IP",显示在发送请求时只能使用一个,这里使用的是第一个default定义的值www.baidu.com

 

 

 

 

官方文档:

http://jmeter.apache.org/usermanual/component_reference.html#HTTP_Request_Defaults

在使用 JMeter 发送 HTTP 请求时,如果请求参数中包含中文字符,可能会出现乱码问题。以下是几种常见的解决方案: 1. **设置 HTTP 请求的编码格式为 UTF-8** 在 JMeterHTTP 请求配置中,可以通过设置 `Content encoding` 为 `UTF-8` 来确保请求参数能够正确编码和解码。这通常适用于 POST 请求中的表单数据或 JSON 数据[^1]。 2. **使用预处理器对参数进行编码** 可以在 HTTP 请求之前添加一个 BeanShell PreProcessor 或 JSR223 PreProcessor,手动对参数进行 URL 编码。例如,使用 Java 的 `java.net.URLEncoder` 类对参数进行编码: ```java import java.net.URLEncoder; String originalParam = "中文参数"; String encodedParam = URLEncoder.encode(originalParam, "UTF-8"); vars.put("encodedParam", encodedParam); ``` 然后在 HTTP 请求中使用 `${encodedParam}` 作为参数值[^1]。 3. **检查服务器端的编码设置** 确保服务器端也使用相同的编码格式(如 UTF-8)来处理请求。如果不一致,即使客户端正确设置了编码,仍然可能导致乱码。可以在服务器端的日志或响应中检查接收到的数据是否正确[^1]。 4. **使用 HTTP 请求默认设置** 如果多个请求都需要相同的编码设置,可以考虑在测试计划中使用 HTTP Request Defaults 元件,并在此元件中统一设置 `Content encoding` 为 `UTF-8`。这样所有子级的 HTTP 请求都会继承这些设置。 5. **使用正则表达式提取器处理响应乱码** 如果响应内容本身存在乱码,可以尝试在响应处理时使用正则表达式提取器配合脚本语言(如 Groovy 或 JavaScript),将响应体转换为正确的编码格式。例如,在 JSR223 PostProcessor 中使用以下代码: ```groovy def responseBytes = prev.getResponseData() def decodedResponse = new String(responseBytes, 'UTF-8') vars.put('decodedResponse', decodedResponse) ``` 这样可以将响应内容从字节流转换为 UTF-8 编码的字符串[^4]。 通过上述方法,应该可以有效解决 JMeter 发送 HTTP 请求时出现的乱码问题。 ```java // 示例:JMeter源码中设置dataEncoding的方法 public void setDataEncoding(String dataEncoding) { this.dataEncoding = dataEncoding; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值