响应处理示例
最后修改时间:2023 年 6 月 26 日在本主题中,我们将研究几个 HTTP 响应处理示例。要亲自尝试示例,请探索auth-requests和test-responses requests 集合。
检查响应标头、正文和内容类型
在此示例中,我们将创建多个测试来验证以下内容:
请求执行成功,即响应状态为200。
标头在响应正文中接收。
响应的内容类型是application/json。
为了创建测试,我们调用客户端test
对象的方法。在测试中,我们可以通过调用对象的方法来断言特定条件,并引用响应对象的各种属性来验证它们。assert
client
### Check response status, headers, and content-type
GET https://httpbin.org/get
> {%
client.test("Request executed successfully", function() {
client.assert(response.status === 200, "Response status is not 200");
});
client.test("Headers option exists", function() {
client.assert(response.body.hasOwnProperty("headers"), "Cannot find 'headers' option in response");
});
client.test("Response content-type is json", function() {
var type = response.contentType.mimeType;
client.assert(type === "application/json", "Expected 'application/json' but received '" + type + "'");
});
%}
使用全局变量
在此示例中,我们将从收到的响应中捕获一个值到全局变量中,然后可以在后续请求中使用该变量。
第一个请求涉及响应处理程序脚本,它将接收到的响应正文中的身份验证令牌保存到client.globalauth_token
下的变量中。为了实现这一点,我们使用了构造。作为参数,我们使用服务器返回的响应正文中的字段值(在我们的示例中为 by)。然后将该值分配给变量。client.global.set(VariableName, VariableValue)
VariableValue
json.token
httpbin.org
"auth_token"
POST https://httpbin.org/post
Content-Type: application/json
{
"token": "my-secret-token"
}
//Saving a variable
> {%
client.global.set("auth_token", response.body.json.token);
%}
笔记
由于httpbin POST 实现,我们使用
response.body.json.token
它来检索令牌。根据您正在交互的实际 Web 服务,响应结构可能会有所不同,并且您可能需要使用不同的结构,例如response.body.token
.
执行请求后,可以通过构造auth_token
从后续请求和响应处理程序脚本中访问该变量。{{auth_token}}
client.global.get("auth_token")
//Accessing a variable
GET https://httpbin.org/headers
Authorization: Bearer {{auth_token}}
要从响应标头获取值,请使用headersvalueOf
对象的方法。如果收到多个同名标头(这是Set-Cookie标头的常见情况),请改用该方法。这将返回所有响应标头值的数组。valuesOf
POST https://httpbin.org/cookies
//Saving a cookie from the first Set-Cookie header
> {%
client.global.set("my_cookie", response.headers.valuesOf("Set-Cookie")[0]);
%}
处理事件流的每一行
如果您订阅事件流,当新数据可用时,服务器将自动向您的客户端发送事件。此数据可以采用服务器发送事件或换行符分隔 JSON (NDJSON) 的形式。在 IntelliJ IDEA 中,您可以使用 HTTP 客户端response.body.onEachLine方法来调用此事件流的每一行上的函数。
假设您有一台定期发送黄金价格信息的服务器。在此示例中,我们编写一个响应处理程序脚本,该脚本执行以下操作:
获取从服务器接收的每个数据块(JSON 对象)并记录价格值。运行请求时,您可以在“服务”工具窗口的“响应处理程序”选项卡中查看记录的信息。
当事件数量超过 10 时,停止处理接收到的数据。请注意,这不会取消您对事件流的订阅 – 只要 HTTP 连接打开,您就会继续接收事件(检查“服务”工具窗口的“控制台”选项卡) 。
测试获取的数据块:如果价格小于45,则测试失败。您可以在“服务”工具窗口的“测试”选项卡中查看测试结果。
GET localhost/stocks/subscribe?symbol=GOLD
> {%
var updatesCount = 0;
response.body.onEachLine(
(symbolUpdate, unsubscribe) => {
updatesCount++;
client.log(symbolUpdate.pricePresentation);
if (updatesCount > 10) {
unsubscribe();
return;
}
client.test("Price test " + updatesCount, () => {
client.assert(symbolUpdate.lastPrice >= 45, "Price must be >= 45");
client.log(symbolUpdate.pricePresentation);
});
}
)
%}
感谢您的反馈意见!