目前使用的邮差我要做的POST请求API_URL /登录和我通过用户名和密码,作为回报,我得到令牌见下图:
例如要求:
/login
POST
Body
{
"username": "admin",
"password": "admin"
}
Return
{
"token": "1234-56789-..."
}
你能告诉我,我会怎么做。我用.parameters尝试,但它说,弃用...
目前使用的邮差我要做的POST请求API_URL /登录和我通过用户名和密码,作为回报,我得到令牌见下图:
例如要求:
/login
POST
Body
{
"username": "admin",
"password": "admin"
}
Return
{
"token": "1234-56789-..."
}
你能告诉我,我会怎么做。我用.parameters尝试,但它说,弃用...
你必须知道的模式是响应什么。 例如,如果输出是像这样的:
{
"success": true,
"authorization_token": "eyJ0eXAiOiJCZWFy...",
"refresh_token": "eyJ0eXAiOiJCZWFyZ...",
"type": "Bearer",
...
}
了解架构,可以提取整个输出,并通过其解析,像这样的:
import io.restassured.response.Response;
Response response =
RestAssured.given().
header("Content-Type", "application/json").
body(loginPayload).
when().
post("/login").
then().
log().ifError().
statusCode(200).
contentType("application/vnd.api+json").
body("$", hasKey("authorization_token")). //authorization_token is present in the response
body("any { it.key == 'authorization_token' }", is(notNullValue())). //authorization_token value is not null - has a value
extract().response();
然后,身份验证令牌可以设置为一个字符串变量
String auth_token = response.path("authorization_token").toString();
提取物()响应(); 返回整个效应初探,但你可以改变这种提取()。路径(“authorization_token”)只是一个字符串
放心支持Java对象/ JSON从映射。 你只需要一个JSON解析器,如在classpath杰克逊或GSON。
首先定义一个类来表示用户凭证:
class Credentials {
private String username;
private String password;
// Getters and setters
}
然后定义类来表示身份验证令牌:
class AuthenticationToken {
private String token;
// Getters and setters
}
最后进行交换的令牌凭据要求:
@Test
public void authenticate() {
Credentials credentials = new Credentials();
credentials.setUsername("admin");
credentials.setPassword("password");
AuthenticationToken authenticationToken =
given()
.accept("application/json")
.contentType("application/json")
.body(credentials)
.expect()
.statusCode(200)
.when()
.post("/login")
.then()
.log().all()
.extract()
.body().as(AuthenticationToken.class);
assertNotNull(authenticationToken.getToken());
}