Как протестировать Rest API, требующие аутентификации, с помощью Rest assured

Я хочу протестировать Rest API, который требует аутентификации, до получения ответа Json. Для exa. Если я хочу посетить 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.

Заранее спасибо.


person undefined    schedule 05.01.2014    source источник
comment
для уверенности см. эту ссылку здесь, где показано, как выполните базовую аутентификацию или аутентификацию OAut или эту ссылку здесь, если вам нужна превентивная аутентификация.   -  person Roman Vottner    schedule 05.01.2014
comment
На самом деле, я тоже пробовал эту ссылку, но проблема заключается в странице входа в систему, на которой выполняется перенаправление, html-страница ... используя ссылку ur, это просто показывает HTML-страницу.   -  person undefined    schedule 05.01.2014
comment
Какой тип аутентификации вы используете? Просто страница входа в систему, которая содержит вызов резервной базы данных, который проверяет введенное имя пользователя и пароль - так что никакой базовой аутентификации или OAuth? Это кажется довольно странным, хотя особенно для веб-службы на основе REST, которая в первую очередь предназначена для доступа приложений, а не людей (поэтому нет ввода в поля формы и нажатия кнопки отправки). Какой серверный фреймворк вы используете? CXF, Рестлет, ...? Вы уже пробовали подключиться к своей службе REST с помощью SoapUI?   -  person Roman Vottner    schedule 05.01.2014
comment
Я скоро сообщу об этом, потому что я не уверен в ответе, который вы просите. Когда бы я ни делал http-запрос, например: 192.168.xx.xx: 9000 / dashboards / all / list / m1 / p1 / sch1, затем он перенаправляется на страницу входа в HTML, где запрашивает имя пользователя и пароль. Я получу более подробную информацию к завтрашнему дню и сообщу вам. Спасибо.   -  person undefined    schedule 05.01.2014
comment
@RomanVottner Обсуждается с нашей командой разработчиков ... они разработали Rest API таким образом, что для любого запроса Rest API он будет перенаправлять на страницу входа в HTML. Они согласились изменить это поведение аутентификации в тестовой среде QA, но это правильный подход?   -  person undefined    schedule 06.01.2014


Ответы (6)


Если вы используете аутентификацию по умолчанию из JIRA, тогда вам нужна упреждающая аутентификация. Ниже приведен пример кода.

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

Образец кода поможет вам выполнить аутентификацию перед каждым отправленным вами запросом.

person Powpow    schedule 01.09.2016
comment
Отлично работал для базовой аутентификации. - person James Franken; 31.05.2019

Этот метод отлично работает. Помимо отправки учетных данных, он также одновременно проверяет код состояния 200

given().auth().basic(username, password).when().get("/uri/").then().statusCode(200);
person Community    schedule 11.10.2017

Вы можете попробовать это:

given().auth().preemptive().basic(username, password).when().get("{yourApiURL}").then().statusCode(200);
person Rafa    schedule 12.06.2018

Вероятно, вы ищете аутентификацию с помощью формы:

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

При желании вам необходимо предоставить экземпляр FormAuthConfig в качестве третьего параметра, чтобы описать, как выглядит ваша HTML-страница входа.

person Johan    schedule 22.01.2014

Ниже код работал у меня:

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

person Spartan    schedule 11.10.2018

person    schedule
comment
Хотя этот код может решить вопрос, включая объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего пост, и, вероятно, приведет к большему количеству голосов. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для человека, который задает его сейчас. Пожалуйста, отредактируйте свой ответ, чтобы добавить пояснения и указать, какие ограничения и предположения применяются. - person Sabito 錆兎; 10.10.2020