如何从 Citrus HttpRequest 中提取 sessionId
How to extract sessionId from Citrus HttpRequest
我尝试使用 Citrus Java DSL 测试一组 REST 服务。身份验证后,服务期望第一个请求的相同有效 session id。
在服务器端我可以看到,存在一个随机 session-id,但在第二个请求中,session-id 为空。
我尝试在端点配置中将 handleCookies 设置为 true 并尝试提取一些 header 信息 (set-cookie) 但没有成功。 EndpointConfiguration 在不同的请求中重复使用。
CitrusEndpoints.http()
.client()
.handleCookies(true)
如何强制端点重用协商的 session-id 或者如何从请求/响应中提取它?
提前感谢您的任何想法和提示。
对您的第一个请求的响应应该有一个 header 集
Set-Cookie: JSESSIONID=ABCDEFG;path=/api/foo
您可以在接收操作中提取此信息
http()
.client(todoClient)
.receive()
.response(HttpStatus.OK)
.extractFromHeader("Set-Cookie", "cookie")
.payload("{ \"foo\": \"bar\" }");
之后我们必须 post 处理新的 ${cookie}
值,以便将实际的 session id 名称和值提取到新变量 ${sessionId}
中。
createVariable("sessionId", "citrus:substringBefore(${cookie}, ';')");
现在我们有一个变量 ${sessionId}
,它只包含 session id 的名称和值 - 在我们的示例中是 JSESSIONID=ABCDEFG
。
在进一步的请求中,您可以使用变量来设置正确的 Cookie
header 信息
http()
.client(todoClient)
.send()
.get("/api/foo")
.header("Cookie", "${sessionId}")
.accept(ContentType.APPLICATION_JSON.getMimeType());
我尝试使用 Citrus Java DSL 测试一组 REST 服务。身份验证后,服务期望第一个请求的相同有效 session id。 在服务器端我可以看到,存在一个随机 session-id,但在第二个请求中,session-id 为空。 我尝试在端点配置中将 handleCookies 设置为 true 并尝试提取一些 header 信息 (set-cookie) 但没有成功。 EndpointConfiguration 在不同的请求中重复使用。
CitrusEndpoints.http()
.client()
.handleCookies(true)
如何强制端点重用协商的 session-id 或者如何从请求/响应中提取它?
提前感谢您的任何想法和提示。
对您的第一个请求的响应应该有一个 header 集
Set-Cookie: JSESSIONID=ABCDEFG;path=/api/foo
您可以在接收操作中提取此信息
http()
.client(todoClient)
.receive()
.response(HttpStatus.OK)
.extractFromHeader("Set-Cookie", "cookie")
.payload("{ \"foo\": \"bar\" }");
之后我们必须 post 处理新的 ${cookie}
值,以便将实际的 session id 名称和值提取到新变量 ${sessionId}
中。
createVariable("sessionId", "citrus:substringBefore(${cookie}, ';')");
现在我们有一个变量 ${sessionId}
,它只包含 session id 的名称和值 - 在我们的示例中是 JSESSIONID=ABCDEFG
。
在进一步的请求中,您可以使用变量来设置正确的 Cookie
header 信息
http()
.client(todoClient)
.send()
.get("/api/foo")
.header("Cookie", "${sessionId}")
.accept(ContentType.APPLICATION_JSON.getMimeType());