我需要自动化其余的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());
但作为回应,我得到登录页面HTML 。我无法理解我在哪里做错了。
假设:
GET /example.com/abc.html HTTP / 1.1主机:example.com连接: keep-alive Cache-Control:max-age = 0 Upgrade-Insecure-Requests:1 User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.36 (KHTML,像Gecko一样)Chrome / 55.0.2883.87 Safari / 537.36接受: text / html的,应用/ XHTML + xml的,应用/ XML; Q = 0.9,图像/ 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
答案 0 :(得分: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()
查看日志也是个好主意。
答案 1 :(得分:0)
[{
user : objectID(987654ff11aa),
post : 'post'
}]
答案 2 :(得分:0)
我曾尝试使用getDetailedCookies()检索身份验证/授权cookie,并将其设置为named()。cookies(cookies).when()。post(url)。
但是我无法检索授权所需的所有cookie。
这是我的方法。
我创建了
的实例变量导入io.restassured.filter.cookie.CookieFilter
CookieFilter filter = new CookieFilter();
在身份验证/授权调用中使用cookieFilter
RestAssured.given()。filter(filter).body(body).post(url).andReturn();
在请求中使用需要身份验证/授权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);
}
}