HTTP 请求默认值是JMeter的一个非常实用的配置元件,作用是:在一个作用域如线程组内,为所有HTTP请求集中定义一组默认属性(协议、服务器地址、端口、公共途径、参数等)。同一个作用域下的 HTTP 请求会自动继承这些值,从而避免重复配置,让后期维护(比如切换测试环境)变得简单。
一、怎样添加
在测试计划、线程组或控制器上点击右键,选择添加 - 配置元件 - HTTP请求默认值。
一般建议放在线程组级别,这样该线程组下所有的HTTP请求都会自动应用这些默认值。
二、配置项
协议
填写http或https。比如https。如果不填,就表示不强制指定协议,由具体的HTTP请求自行决定。
服务器名称或 IP
目的服务器的地址,如 api.zmtests.com。
如果这里填了,所有不写服务器的HTTP请求都会发往这个地址。
端口号
服务端口,如 8080。如果服务使用的是默认端口(http 为 80,https 为 443),可以不填。
途径
公共途径前缀。会和每个 HTTP 请求里配置的途径进行拼接。
比如默认值途径写 /api/v1,某个请求里途径写 /users,实际请求的途径就是 /api/v1/users。
Content encoding
内容编码,建议统一填 UTF-8,可避免请求参数中的中文出现乱码。
参数
通过点击添加按钮,可以设置一批所有请求都需要的公共参数。
如token、client_version等。
如果某个HTTP请求里定义了同名参数,则以请求里的值为准;如果请求里定义了不同名的参数,则会把默认值的参数和请求的参数合并在一起发送。
三、和HTTP请求的协作规则
默认值的各项配置并不是强制包括是按照一套确定的继承和包括规则。
服务器、端口、协议
如果 HTTP 请求里没有填写协议、服务器、端口,则完全使用默认值中的设置。
如果 HTTP 请求里填写了这几项中的任意一项,那么该项就会完全包括默认值中对应的值,而不是合并。
(比如默认值服务器为 test.com,某个请求里服务器填了z'mtests.com,那么这个请求会发往zmtests.com,和默认值无关。)
途径拼接规则
最后请求的途径是由默认值途径和请求途径拼接而成的,规则如下:
默认值途径为 /api,请求途径为 /login - 结果是 /api/login。
默认值途径为 /api/(末尾带斜杠),请求途径为 login(不以斜杠开头)- 结果是 /api/login。
为了避免产生 // 双斜杠或途径拼接不符合直觉,最好实践是:默认值途径末尾不要加斜杠,所有请求途径统一以 / 开头。
如果 HTTP 请求里填的是一个完整的绝对 URL(如 https://zmtests.com/api/xxx),那么该请求会完全忽略默认值,直接使用自己填写的完整地址。
参数合并
如果默认值里定义了参数 token=123,请求里也定义了 token=456,请求会带上 token=456(请求包括默认值)。
如果默认值里定义了 token=123,请求里定义了 userId=10,那么请求会同时包含 token=123 和 userId=10(合并)。
四、使用场景
统一服务器信息,快速切换环境
在默认值里填写:协议 https,服务器 test-api.zmtests.com,端口 443。
所有HTTP请求只填途径(如 /login),完全不用关心服务器地址。
当需要切换到生产环境时,只需要把默认值的服务器名改为 api.zmtests.com,测试计划中几十个请求不用做任何修改。
管理多版本API的公共前缀
默认值途径写 /api/v2,业务请求分别配置 /users、/orders、/products。
实际发出的请求途径就会自动变成 /api/v2/users、/api/v2/orders 等,不需要在每个请求里重复填写版本前缀。
全局注入公共参数
比如所有接口都要求携带 access_token 或 app_version,把它们统一添加到 HTTP 请求默认值的参数列表中,后续每个请求都会自动带上省时且不易遗漏。
五、注意事项
不要在请求里无意中包括了默认服务器
如果在HTTP请求默认值里配好了环境A的地址,但某个请求里不小心写了一个环境B的地址(哪怕只是填了服务器 IP),这个请求就会跑偏到环境B去。
统一途径斜杠风格
为了避免出现 // 或途径丢失,建议团队内部约定:默认值途径末尾不加斜杠,所有请求途径都以 / 开头。
文件上传请求也不例外
文件上传的 HTTP 请求同样会继承默认值的途径前缀,记得检查途径拼接是不是符合预期。
和变量结合可更灵活
默认值的“服务器名称或 IP”字段可以直接填 JMeter 属性或变量,比如 ${__P(host,localhost)}。
这样在执行时可以通过命令行 -Jhost=zmtests-api.com 来动态指定服务器,实现无需修改脚本即可切换环境。
作用域问题
HTTP 请求默认值只对它所在的同级和下级作用域生效。如果测试计划中有多个线程组且需要不同的默认值,可以在各自的线程组下分别添加,不会互相干扰。如果测试计划根节点下也有一个默认值,那么所有线程组都会继承它,但线程组内的同名设置会包括测试计划级的设置。