首页 文章

如何使用放心请求设置cookie?

提问于
浏览
3

我需要自动化其余的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并设置了一些全局变量 .

现在,我使用请求设置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());

但作为回应,我得到 login page HTML . 我无法理解我做错了什么 .

Assumptions :

  • 由于post请求,返回302,我是否需要重定向到下一个url,之后执行带cookie的get请求 .

  • 这是使用请求设置cookie的正确方法 .

  • 我是否需要使用请求设置标头 . 如果是,则以下是 Headers 信息 . 我需要设置所有这些吗?

GET /example.com/abc.html HTTP / 1.1主机:example.com连接:keep-alive Cache-Control:max-age = 0升级 - 不安全请求: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接受 - 编码:gzip,deflate,sdch Accept-Language:en-US,en; q = 0.8 Cookie:JSESSIONID = C70A69F1C60D93DC3F8AC564BDE3F4DE.lon2mcaqaapp002; __utma = 185291189.2055499590.1460104969.1460104969.1460618428.2

2 回答

  • 2

    我也是Rest Assured的新手,但我刚刚写了类似的测试 .

    我建议你写一个私有 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() 查看日志也是个好主意 .

  • 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);
    }
    

相关问题