10

我想在获取 Json 响应之前测试需要身份验证的 Rest API。例如。如果我想访问rest API: http://192.168.xx.xx:9000/dashboards/all/list/m1/p1/sch1

然后

如果我还没有登录,那么这会将我重定向到登录 HTML 页面,登录后,这将显示 Json 输出。

现在我想用 java 写一个放心的代码:我不知道,这是否可以使用这个来登录。

所以我为此写了一个简单的代码::

public class TestNGSimpleTest1 {

    @Test
    public void testAdd() {
            //expect().
            //statusCode(400).
            //body("Status", equalTo("Success")).
            //when().
            //get("http://localhost:9000/dashboards/all/list/m1/p1/sch1");
            //System.out.println("Response received is ::" +res);   
            Response res = get("http://localhost:9000/dashboards/all/list/m1/p1/sch1");
            assertEquals(200,res.getStatusCode());
            String json = res.asString();
            System.out.println("Response received is :: " +json);
    }

所以这里我没有得到 Json 响应,而是得到 HTML 源页面响应。

所以,我的问题是如果可能的话,如何登录并获得 Json 响应。

提前致谢。

4

7 回答 7

10

如果您使用 JIRA 的默认身份验证,那么您需要抢先式身份验证。下面是示例代码。

RestAssured.baseURI = System.getProperty("baseurl");
PreemptiveBasicAuthScheme authScheme = new PreemptiveBasicAuthScheme();
authScheme.setUserName("admin");
authScheme.setPassword("admin");
RestAssured.authentication = authScheme;

示例代码将帮助您在发送每个请求之前进行身份验证。

于 2016-09-01T19:48:36.507 回答
6

这种方法效果很好。除了提交登录凭证外,还同时验证200状态码

given().auth().basic(username, password).when().get("/uri/").then().statusCode(200);
于 2017-10-11T23:56:26.593 回答
2

你可以试试这个:

given().auth().preemptive().basic(username, password).when().get("{yourApiURL}").then().statusCode(200);
于 2018-06-12T23:21:24.493 回答
1

您可能正在寻找表单身份验证:

given().auth().form("username", "password"). .. 

或者,您需要提供一个 FormAuthConfig 实例作为第三个参数来描述您的 HTML 登录页面的外观。

于 2014-01-22T10:15:44.113 回答
1
package jira_APIProject;

import org.testng.annotations.Test;

import io.restassured.RestAssured;
import io.restassured.authentication.PreemptiveBasicAuthScheme;

import static io.restassured.RestAssured.*;

import java.util.Base64;

public class TestBasicAuth {

    @Test
    public void auth() {
        
        RestAssured.baseURI = "https://jjjjjjj-home.atlassian.net/";
        PreemptiveBasicAuthScheme authScheme = new PreemptiveBasicAuthScheme();
        authScheme.setUserName("kkkkkkkkkk.kkkkkkkkkk@gmail.com");
        authScheme.setPassword("lllllllll8U1XLsXZ02927");
        RestAssured.authentication = authScheme;

        given().header("Content-Type","application/json")
        .body("{\r\n" + 
                "    \"body\": \"Updated on 22nd april.\",\r\n" + 
                "    \"visibility\": {\r\n" + 
                "        \"type\": \"role\",\r\n" + 
                "        \"value\": \"Administrator\"\r\n" + 
                "    }\r\n" + 
                "}")
        
        .when().post("rest/api/2/issue/10004/comment")
        .then().log().all().assertThat().statusCode(201);
        
    }
}
于 2020-04-22T05:26:36.147 回答
0

下面的代码对我有用:

JsonPath response = RestAssured
.given()
    .header("Authorization", "Basic " + encodedString)
    .when()
    .get(GET_PUSH_API)
.then()
    .statusCode(401)
    .extract().jsonPath();

参考 - 示例 14:https ://www.programcreek.com/java-api-examples/index.php?api=com.jayway.restassured.RestAssured

于 2018-10-11T09:38:36.057 回答
0
public void LoginRequest() {
    RestAssured.baseURI = BASE_URL;
    RequestSpecification request  = RestAssured.given().auth().preemptive().basic(USERNAME, PASSWORD);
    response = request.get("​/Account​/v1​/User");
于 2020-10-10T12:00:36.863 回答