gpt4 book ai didi

rest-assured - 与 RestAssured 保持 session

转载 作者:行者123 更新时间:2023-12-04 13:44:41 26 4
gpt4 key购买 nike

如何在restassured中设置 session 属性?在我的应用程序代码中,我们有这样的东西

String userId= request.getSession().getAttribute("userid")

如何在此处将 userId 设置为 session 属性(在放心的测试用例中)?

如何为所有请求(多个后续请求)维护相同的 session ?

当我发送多个请求时,它会将每个请求视为新请求,并且 session 从服务器端失效,我想在后续调用之间保持 session 。

我尝试在 cookie 中设置 jsessionid 并在第二个请求中发送它,但是当我在服务器端调试时,它没有加载创建的 session ,而是创建不同的 session ,因此它没有显示属性当我第一次发送请求时,我已经在 session 中进行了设置。

当我尝试使用直接 HttpClient 进行相同操作时,它可以正常工作,而与 RestAssured 一样,它无法正常工作。

与 HttpClient 一起使用的代码是这样的

HttpClient httpClient = util.getHttpClient(); 

//第一个请求
HttpResponse response=httpClient.execute(postRequest); 

从响应中,我提取了 jessionid 并将其设置在第二个请求中
HttpGet getRequest = new HttpGet(Client.endPointUrl);
getRequest.addHeader("content-type", "application/json");
getRequest.addHeader("accept", "application/json");
getRequest.addHeader("Origin", Client.endPointUrl);
getRequest.addHeader("Referer", Client.endPointUrl);
getRequest.addHeader("Auth-Token", authToken);
getRequest.addHeader("Set-Cookie", jsessionId);

//设置我从响应中提取的 jessionid 后的第二个请求
HttpResponse eventsResponse = httpClient.execute(getRequest); 

上面的代码工作得很好,我得到了预期的响应。一个观察结果是我使用相同的 httpClient 对象来调用这两个请求。

就像我使用 RestAssured 尝试相同的方法一样,它不起作用。
RestAssured.baseURI = "http://localhost:8080";
Response response=RestAssured.given().header("Content-Type","application/json").
header("Origin","http://localhost:8080").
header("Referer","http://localhost:8080").
body("{"+
"\"LoginFormUserInput\":{"+
"\"username\":\"test\","+
"\"password\":\"password\""+
"}"+
"}")
.when().post("/sample/services/rest/validateLogin").then().extract().response();

JsonPath js=Util.rawToJson(response);
String sessionId=js.get("sessionID");
System.out.println(sessionId);

for (Header header:response.getHeaders()) {
if ("Set-Cookie".equals(header.getName())) {
id= header.getValue().split(";")[0].trim();
String[] arr=jsessionId.split("=");
jsessionId=arr[0];
break;
}
}


response=RestAssured.given().header("Auth-Token",sessionId).header("Content-Type","application/json").
cookie("JSESSIONID",jsessionId).
header("Origin","http://localhost:8080").
header("Referer","http://localhost:8080").
body("{}").
when().
post("/sample/services/rest/getAllBooks").then().contentType("").extract().response();

我尝试使用以下方法为所有请求重用相同的 httpclient,但没有用
RestAssured.config = RestAssured.config().httpClient( new HttpClientConfig().reuseHttpClientInstance());

最佳答案

您需要在 Rest Assured 中使用 session 过滤器

https://github.com/rest-assured/rest-assured/wiki/Usage#session-support

关于rest-assured - 与 RestAssured 保持 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50981245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com