我有一个带有一些测试的 Spring Boot 应用程序。应用程序的“happy-path”要求用户发送请求来启动 session ,然后它可以向其他服务发出其他请求。
我正在尝试测试这些其他服务,但我需要先启动一个 session 。我的心态如下:
- 点击 session 开始端点
- 从该请求获取 session Cookie
- 将该 Cookie 应用于测试期间发出的 future 请求。
为了实现这一目标,我遇到了麻烦:
String s = t.postForEntity(loginUrl, remoteSessionPacket, String.class)
.getHeaders()
.get("Set-Cookie").get(0);
String[] split = s.split(";");
String sessionId = "";
for (String s1 : split) {
if(s1.contains("SESSION"))
{
sessionId = s1;
}
}
HttpHeaders headers = new HttpHeaders();
headers.add("SESSION", sessionId);
HttpEntity<?> httpEntity = new HttpEntity<>(headers);
RemoteDTOPacket= new RemoteDTOPacket();
packet.Token = UUID.randomUUID().toString();
String url = "http://localhost:" + port + "/domain/SomeFunction";
ResponseEntity<ResponsePacket> response = t.postForEntity(url, packet, ResponsePacket.class, httpEntity);
Assert.assertEquals(0, (long) response.getBody().count);
显然,这不起作用,并且会随意抛出错误。
有人知道如何完成我想做的事情吗?
非常感谢任何帮助。
最佳答案
session ID 存储在 cookie 中,该 cookie 存储在“Cookie” header 中,而不是单独的请求 header 中。像这样的东西应该有效:
List<String> coockies = t.postForEntity(loginUrl, remoteSessionPacket, String.class)
.getHeaders()
.get("Set-Cookie");
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.put(HttpHeaders.COOKIE, coockies);
HttpEntity<Void> requestEntity = new HttpEntity<>(requestHeaders);
或者您可以获得准确的 session ID cookie,该 cookie 最有可能存储在“JSESSIONID”键下。
关于java - Spring Boot测试RestTemplate : Pass along session id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47088071/