web-dev-qa-db-ja.com

安心してリクエストでCookieを設定するにはどうすればよいですか?

残りのAPIを自動化する必要があります。 APIはSpringセキュリティで保護されています。

以下は認証するコードです:

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ステータスを返します。これは、リダイレクトを意味します。Cookieを見つけて、グローバル変数に設定しました。

今、私はリクエストでクッキーを設定しました:

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. Postリクエストでは302が返されるので、次のURLにリダイレクトし、その後Cookieを使用してgetリクエストを実行する必要がありますか。
  2. これは、リクエストでCookieを設定する正しい方法ですか。
  3. リクエストでヘッダーを設定する必要がありますか?はいの場合、以下はヘッダー情報です。それらすべてを設定する必要がありますか?

GET /example.com/abc.html HTTP/1.1ホスト:example.com接続:keep-alive Cache-Control:max-age = 0 Upgrade-Insecure-Requests:1ユーザーエージェント:Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit/537.36(KHTML、Geckoなど)Chrome/55.0.2883.87 Safari/537.36受け入れ:text/html、application/xhtml + xml、application/xml; q = 0.9、image/webp、/; q = 0.8 Accept-Encoding:gzip、deflate、sdch Accept-Language:en-US、en; q = 0.8 Cookie:JSESSIONID = C70A69F1C60D93DC3F8AC564BDE3F4DE.lon2mcaqaapp002; __utma = 185291189.2055499590.1460104969.1460104969.1460618428.2

4
kartoos

私もRestAssuredを初めて使用しますが、同様のテストを作成したばかりです。

プライベートauthenticate()メソッドを作成することをお勧めします。

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

次に、リクエストでCookieを使用します。

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

しかし、ここでstatusCodeをどのように確認するのかわかりません。

.log().all()を使用してログを表示することもお勧めします。

2
Katia Savina

GetDetailedCookies()を使用して認証/承認Cookieを取得し、それをgiven()。cookies(cookies).when()。post(url)として設定してみました。

しかし、認証に必要なすべてのCookieを取得できませんでした。

これが私がそれをした方法です。

  1. のインスタンス変数を作成しました

    io.restassured.filter.cookie.CookieFilterをインポートします

    CookieFilter filter = new CookieFilter();

  2. 認証/承認呼び出しでcookieFilterを使用

    RestAssured.given()。filter(filter).body(body).post(url).andReturn();

  3. 認証/承認Cookieを必要とするリクエストで同じフィルターを使用します。

    RestAssured.given()。filter(filter).body(body).post(url);

フィルタには、認証呼び出しからのすべてのCookieが入力されます。

これは、アイデアを説明するための基本的なコードです。これをステップ定義に拡張できます

import io.restassured.RestAssured;
import io.restassured.filter.cookie.CookieFilter;
import io.restassured.response.Response;
import org.junit.Test;

public class RestAssuredRunner {

    CookieFilter filter = new CookieFilter();




@Test
    public  void testAuthenticatedRequest(String[] args) {


        String url = "http://mywebsitelogin.com";
        String body = "userId=1212&&password=232323";
        //Authentication request
        Response response = RestAssured.given().filter(filter).body(body).post(url).andReturn();
        //Request that needs authentication
        RestAssured.given().filter(filter).body(body).post(url);
    }


}
0
Sherin Syriac
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);
}
0
rares