2017-02-22 7 views
3

나머지 API를 자동화해야합니다. API는 스프링 보안으로 보호됩니다. 다음은 나머지를 사용하여 요청으로 쿠키를 설정하는 방법은 무엇입니까?

코드가 인증하는 것입니다

Response response = given().auth() 
        .form(userName, password, FormAuthConfig.springSecurity().withLoggingEnabled(new LogConfig(captor, true))) 
        .post("/home/xyz.html"); 

      Assert.assertTrue("Error occurs", response.statusCode() == 302); 

      if (response.statusCode() == 302) { 
       Cookie cookie = response.getDetailedCookie("JSESSIONID"); 
       result.actualFieldValue = "User Authenticated: Session ID ->" + cookie.getValue(); 
       System.out.println("Cookie set : "+cookie.getValue()); 
       apiTestSessionID = cookie.getValue(); 
      } 

사용자가 로그인하고 (302 개) 상태를 반환은, redirection.I 쿠키를 발견하고 몇 가지 글로벌 변수에 설정을 의미합니다.

지금은 요청과 쿠키 설정 :

RequestSpecification reqSpecification = new RequestSpecBuilder().addCookie("JSESSIONID", AbstractBaseClass.apiTestSessionID).build(); 

      Map<String, String> parameters = new HashMap<String, String>(); 
      parameters.put("cstmrID", "000N0961"); 
      parameters.put("pageNumber", "1"); 
      parameters.put("pageSize", "10"); 
      parameters.put("sortColumnName", "FIELD_NM"); 
      parameters.put("sortDir", "asc"); 
      parameters.put("filterColumnName1", ""); 
      parameters.put("filterColumnName2", "USER_UPDT_EMAIL_ID"); 
      parameters.put("filterValue2", ""); 

      reqSpecification.queryParams(parameters); 

      Response response = given().spec(reqSpecification).when().get("/service/customerConfig").thenReturn(); 
      System.out.println(response.asString()); 

을하지만 응답 나는 로그인 페이지 HTML를 얻을. 나는 내가 어디에서 잘못하고 있는지 이해할 수 없다.

가정 :

  1. 이 포스트 요청 이후, 302 반환은, 내가 다음 URL로 리디렉션 할 필요가 그 후 쿠키 요청을받을 수행 할.
  2. 요청과 함께 쿠키를 설정하는 올바른 방법입니다.
  3. 요청과 함께 헤더를 설정해야합니까? 그렇다면 헤더 정보가 다음과 같습니다. 나는 그들 모두를 설정할 필요가 있습니까?

GET /example.com/abc.html HTTP/1.1 호스트 : example.com 연결 : 연결 유지 캐시 제어 : 최대 사용 기간 = 0 업그레이드 - 안전하지 않은-요청 : 1 사용자 - 에이전트 : Mozilla/5.0 (Windows NT 6.1, WOW64) AppleWebKit/537.36 (Gecko와 같은 KHTML) Chrome/55.0.2883.87 Safari/537.36 수락 : text/html, application/xhtml + xml, application/xml; q = 0.9 이미지/WebP 형식, /, Q = 0.8 수락 - 인코딩 : gzip을이 수락 - 언어 SDCH, 폐 : EN-US, 욕실, Q를 = 0.8 쿠키 : JSESSIONID = C70A69F1C60D93DC3F8AC564BDE3F4DE.lon2mcaqaapp002; __utma = 185291189.2055499590.1460104969.1460104969.1460618428.2

답변

2

내가 너무 안심하는 새로운 해요,하지만 난 그냥 비슷한 테스트를 작성했습니다.

private static String authenticate() { 
    given() 
     .auth() 
     .form(userName, password,FormAuthConfig.springSecurity().withLoggingEnabled(new LogConfig(captor, true))) 
    when() 
     .post("/home/xyz.html"). 
    thenReturn() 
     .getDetailedCookie("JSESSIONID"); 
} 

다음 요청의 쿠키 사용 :

난 당신이 개인 authenticate() 메소드를 작성하는 것이 좋습니다

given() 
    .cookie(authenticate()) 
when() 
    .get("/service/customerConfig"). 
thenReturn(); 

을하지만 난 당신이 여기에 statusCode을 확인 어떻게 잘 모르겠어요 .

로그를 보려면 .log().all()을 사용하는 것이 좋습니다.

0
import io.restassured.RestAssured; 
import io.restassured.http.ContentType; 
import io.restassured.http.Cookies; 

private Cookie cookie; 

@BeforeClass 
public void exampleOfLogin() { 
    String body = String.format("//json"); 
    cookies = RestAssured.given() 
      .contentType(ContentType.JSON) 
      .when() 
      .body(body) 
      .post("www.test_test.com") 
      .then() 
      .statusCode(200) 
      .extract() 
      .response() 
      .getDetailedCookies(); 
} 

@Test 
public void performActionsBasedOnCookies() { 
//set cookies before making a post request and check the returned status code 
    RestAssured.given() 
      .cookies(cookies) 
      .contentType(ContentType.JSON) 
      .when() 
      .post("www.test_url.com") 
      .then() 
      .statusCode(200); 
}