간략 소개
Postman은 API를 테스트하고 디버그하는 데 유용한 강력한 도구입니다. 그러나 로그인 세션을 유지해야 하는 경우, 특히 세션 정보를 다른 API 요청에도 적용해야 할 때가 있습니다. 이 글에서는 Postman을 사용하여 로그인 세션을 유지하고 다른 API를 테스트하는 방법에 대해 알아보겠습니다.
흐름
- 로그인 요청 보내기: Postman을 사용하여 로그인 API에 요청을 보냅니다. 사용자 인증이 성공하면 서버로부터 세션 ID를 받습니다.
- 인증 정보 저장: 받은 인증 정보를 Postman의 환경 변수나 글로벌 변수에 저장합니다. 주로 헤더나 쿠키에 저장하여 세션을 유지합니다.
- 다른 API 요청 시 인증 정보 사용: 다른 API를 테스트할 때, 저장된 세션 정보를 사용하여 요청합니다. Postman에서는 변수를 사용하여 세션 정보를 헤더나 쿠키 값으로 전달할 수 있습니다.
실습
- 로그인 요청 보내기
- body에 json의 형태로 id와 pwd을 입력해서 로그인 요청을 하면 다음과 같은 세션 관련된 정보가 Cookies에 저장이 됩니다.
- 인증 정보 저장
- 이제 로그인 세션 정보가 필요했던 타 API 테스트에서 Cookies정보에 해당 내용이 저장되었는지 확인합니다.
- 로그인 세션 없는 경우의 테스트
- Controller코드 내용, Login 어노테이션을 통해서 세션 쿠키 정보를 받고 Service에서 해당 사용자가 Question 수정 권한이 있는지 확인한다.
//Update API
@PutMapping("/questions")
public ResponseDto updateQuestions(@Login User user, @RequestBody QuestionUpdateDto questionUpdateDto) {
boolean updated = questionsService.updateQuestionsByQuestionId(user, questionUpdateDto);
if (!updated) {
return ResponseDto.BAD_REQUEST;
}
return ResponseDto.OK;
}
- 로그인 세션 저장 후 API 테스트
- 정상 작동하는 것을 확인 할 수 있다
테스트 코드 작성
이 부분은 게시물의 주 내용과는 관련 없지만 추후에 테스트 코드 작성하는 분들께 도움이 되고자 덧붙입니다. 테스트 코드 일부분입니다.
다음과 같이 .session에 MockHttpSession을 파라미터로 넣어주면 됩니다
@Test
public void updateQuestions() throws Exception {
mockMvc.perform(
put("/api/v1/questions")
.content(objectMapper.writeValueAsString(requestBody))
.contentType("application/json")
.session(doLogin())
) .andExpect(status().isOk());
}
//하단 부분은 팀원이 만든 메서드를 가져다 썼습니다
MockHttpSession doLogin() throws Exception {
Map<String, String> request = new HashMap<>() {{
put("user_id", userId);
put("password", userPw);
}};
return (MockHttpSession) mockMvc.perform(post("/api/v1/users/login")
.contentType("application/json")
.content(objectMapper.writeValueAsString(request)))
.andExpect(status().isOk())
.andReturn().getRequest().getSession();
}
'스프링 > 테스트' 카테고리의 다른 글
Spring Testcontainer를 활용한 Elasticsearch 테스트 코드 작성 (0) | 2024.04.23 |
---|---|
[스프링] JUnit @Tag를 이용한 테스트 코드 분리 (0) | 2024.03.15 |