2017-11-28 18 views
0

내가 원하는 작업 : RestAssured를 사용하여 끝점을 테스트하고 싶습니다. 핵심은 로그인 한 사용자 만 엔드 포인트를 사용할 수 있다는 것입니다. 로그인을 위해 저는 임의의 토큰을 설정하고 사용자 정의 successHandler를 사용하여 스프링 보안 기본 엔드 포인트를 사용하고 데이터베이스에 저장하고 헤더 "User -토큰". 나는 백엔드에서 세션을 만들지 않을거야. 보안 된 끝점에 액세스하려면 프런트 엔드가 "User-Token"헤더를 사용하여 호출합니다. 그런 다음 토큰을 사용하여 데이터베이스를 체크인합니다. 각 토큰은 다르고 임의적입니다. 또한 나는 토큰에 스프링 보안을 사용하지 않는다. 이제이 동작을 테스트하고 싶습니다.RestAssured 테스트, 토큰 가져 오기

기술 : 작동하지 않습니다 무엇 & 돌아 오는 봄 부팅, RestAssured, JUnit을, 톰캣

반작용 : 모든 첫째, 나는 토큰을 얻는 방법을 정말 모르겠어요. 나는 일부 테스트 사용자에게 직접 데이터베이스를 강제로 적용 할 수 있다는 것을 의미하지만 AFAIK는 나쁜 습관입니다. 나는 문서를 읽고 약 auth().form에 관해서 우연히 만난다. 그러나 아래에는 최상의 접근 방식이 아니며 웹 페이지는 완전히 백엔드와 분리되어 있습니다 (have to made to the server in order to retrieve the webpage with the login details). 그럼에도 불구하고 접근 방법을 시도했지만 작동하지 않았습니다.

@Before 
public void LogInUser(){ 
    String loginUrl = "http://localhost:8080/login"; 
    userToken = 
      given().auth().form("username","password"). 
        when().get(loginUrl).getHeader("User-Token"); 
    System.out.println(userToken); 
} 

그래서 나는 어쩌면 내가 전혀 인증()을 필요로하지 않는다는 것을 생각 - 내가 그렇게 충분해야 데이터를 엔드 포인트 자체를 호출 세션이 필요하지 않습니다. 나는 데이터가 백엔드 프런트 엔드에서 전달하는 방법을 확인하고이했다 :

Form Data: username=something&password=something

@Before 
public void LogInUser(){ 
    String loginUrl = "http://localhost:8080/login"; 
    userToken = 
      given().parameter("username=oliwka&password=jakies") 
        .when().get(loginUrl).getHeader("User-Token"); 
    System.out.println(userToken); 
} 

을 그리고 그것을 통과하는 동안에, UserToken은 Principal null입니다. 메서드 변수가 아닌 클래스 변수로 선언되었으며 String입니다.

사용자 토큰을 얻고 토큰이 필요한 내 끝점을 테스트하려면 어떻게해야합니까?

답변

0

아래 절차에 따라 액세스 토큰을 얻을 수 있습니다.

1 단계 : json 문자열을 허용하고 데이터를 구문 분석하고 액세스 토큰을 반환하는 메서드를 만듭니다. 아래는 방법입니다. 원하는 json 파서 라이브러리를 사용할 수 있습니다.

public String getAccessToken(String jsonStr) { 
     JSONParser parser = new JSONParser(); 
     Object obj = null; 
     try { 
      obj = parser.parse(jsonStr); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     JSONObject jsonObject = (JSONObject) obj; 
     String accessToken = (String) jsonObject.get("access_token"); 
     System.out.println("access_token : " + accessToken); 
     return accessToken; 

    } 

2 단계 : 지금

String loginUrl = "http://localhost:8080/login"; 
    Response res = null; 
    String returnValue = ""; 
    response = given().param("username", "yourUserName") 
       .param("password", "yourpassword") 
       .param("client_id", "If Any otherwise skip it") 
       .param("grant_type", "If Any otherwise skip it") 
       .param("clear_all", "true") 
       .post(loginUrl); 
       returnValue = response.body().asString(); 

    String accessToken = getAccessToken(returnValue); 

당신이 원하는 액세스 토큰을 얻을 수 있는지 알려 주시기 바랍니다 아래처럼 사용자 이름과 암호를 사용하여 로그인 API를 호출합니다.