当前位置: 首页 > 知识库问答 >
问题:

使用RestAssured维护会话

沈飞舟
2023-03-14

如何在restasured中设置会话属性?在我的应用程序代码中,我们有如下内容

String userId = request.getSession().getAttribute(“userid”)

如何在此处将 userId 设置为会话属性(在重新保证的测试用例中)?

如何为所有请求(多个后续请求)维护同一会话?

当我发送多个请求时,它认为每个请求都是新的,会话从服务器端失效,我想在后续调用之间保持会话。

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

当我在直接HttpClient上尝试同样的方法时,它是有效的,而在RestAssure上同样的方法是无效的。

使用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());

共有1个答案

鲁烨熠
2023-03-14

您需要放心地使用会话过滤器

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

 类似资料:
  • 我希望使用超级测试来测试API请求和响应。以下是我迄今为止所尝试的。 route.test.js setupTestUtils。js公司 } 在我的应用程序中。js,我使用passport进行身份验证。身份验证后,我使用会话。REGENATE函数可重新生成会话ID,以避免会话固定。 登录的初始post请求顺利通过。但是,后续的GET请求“loggedIn”失败。此函数在内部使用req。passpo

  • 问题内容: 我正在使用AngularJS框架进行项目。我对使用这个框架很陌生。过去,我只使用纯JavaScript和jQuery。该项目是针对利基市场的一种Web设计器应用程序。 当用户在设计时在页面之间移动时,我希望维护他们所做的所有更改的会话。 现在,如果用户登录,我们将使用数据库中的数据加载会话。当用户单击“保存”按钮时,我们将使用会话数据更新数据库。有人告诉我,我可以在Angular中保持

  • 问题内容: 此方法不正确。我试图找出的是一种不知道将存在哪些cookie,能够处理cookie更改以及维护会话的方法。 我正在为我的简单机器论坛编写一个应用程序,当您单击某些自定义行为时,它会更改其cookie配置。 但是,如果该应用程序对我的网站运行良好,我将发布一个供其他论坛使用的版本。 我知道我朝着正确的方向前进,但是逻辑有点像在踢我的屁股。 任何建议将不胜感激。 问题答案: 这段代码很混乱

  • 我有一个struts2应用程序。在我的应用程序中,我使用 这边走。 提前致谢

  • 我正在寻找一个持久的会话管理器,将会话保存在文件系统(如PHP)上,可以与DropWizard一起使用。我看到有一个<code>环境。getSessionHandler(),但我没有看到关于它的文档。 我可以写我自己的,但我希望有一个煮熟的饭。上面的会话句柄是我要找的吗?如何使用它?

  • Navicat 为维护 Oracle 用户提供完整的解决方案。 在对象选项卡中选择用户。 右击已选择的用户。 选择“维护”,然后从弹出式菜单中选择一个维护选项。 选项 描述 密码过期 设置用户的密码为过期。 锁定帐号 锁定用户的帐号和禁用访问。 解除锁定帐号 解除锁定用户的帐号和启用访问。