Есть ли способ проверить ответ API в другом методе, который я запрашиваю? - PullRequest
0 голосов
/ 12 апреля 2019

Я начинаю с тестов автоматизации API, поэтому я сомневаюсь, как я могу использовать шаги огурцов для проверки ответа API.

Я создаю функцию для огурца с помощью следующих шагов:

    @criarConta
        Scenario Outline: Criar uma conta valida
            Given que realizo a chamada no <ambiente> da <api> informando <token_admin> e um email e <senha> novos
            Then devera retornar <status code> 
            And no response devera retornar um valor de "ID" ou "Message" 

В моем классе "dataMap" я выполняю следующий запрос и проверяю:

public void criarConta(String srtAmbiente, String srtAPI, String srtToken, String srtSenha) {

            String uriBase = srtAmbiente;
            RequestSpecification apiRequest = RestAssured.given().contentType(ContentType.JSON);

            int length = 15;
            String email = generateRandomEmail(length);
            System.out.println(email);
            Map<String, String> emailContent = new HashMap<String,String>();
            emailContent.put("email", email);
            Map<String, Object> postContent = new HashMap<String,Object>();
            postContent.put("customer", emailContent);
            postContent.put("password", srtSenha);

            apiRequest.header("Authorization", "Bearer "+srtToken).with().body(postContent);

            Response response = apiRequest.post(uriBase+srtAPI).prettyPeek();

            ResponseBody body = response.getBody();
            String bodyStringValue = body.asString();
            Assert.assertTrue(bodyStringValue.contains("id"));
            JsonPath jsonPathEvaluator = response.jsonPath();
            String responseEmail = jsonPathEvaluator.get("email");
            Assert.assertTrue(responseEmail.equalsIgnoreCase(email));

        }

Но в моем классе "steps" мне нужно вызвать шаги огурца, и мой код запроса и проверки находится в одном методе.Как я могу вызвать запрос в одном методе и ответ в другом для использования шагов огурцов?Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Чтобы собрать ответ от системы за один шаг и утвердить его на другом, вам нужно будет обмениваться данными между шагами, используя объект World или Контекст сценария .Полное раскрытие, я более знаком с решением этой проблемы в ruby ​​/ php / javascript, но принцип должен быть таким же для Java.

Хорошей отправной точкой может быть ломка вашего criarConta метода, в настоящее времяон объединяет несколько различных задач - создание запроса, его отправка, анализ ответа и утверждение значений ответа.Я бы предложил разделить запрос на один метод, проанализировать ответ на другой и вызвать два из ваших шагов When и Then.

Утверждения должны быть полностью извлечены и вызваны непосредственно в Then шаг.Обычно такой класс, как ваш dataMap, будет чистой абстракцией для системного интерфейса (аналогично тому, как объекты страницы являются абстракцией для пользовательского интерфейса), но без каких-либо мнений о том, как система «должна» себя вести.Они должны быть сохранены в шаге def, тесно связаны с корнишоном, которого они представляют.

0 голосов
/ 12 апреля 2019

Вы должны попробовать использовать Gherkin, используя QAF с qaf-ws-support . Он обеспечивает поддержку тестирования веб-сервиса и имеет встроенный шаг для проверки утверждения ответа json / XML с использованием jsonpath / xpath. Хранилище запросов позволяет переместить информацию запроса вне кода.

Ваша реализация станет аккуратной и чистой с минимальным кодом или без кода. Вот пример:

SCENARIO: <scenario name>

   When user requests '${get.sample.call}'
   Then response should have status code '<status code>'
   And response should have '<expectedvalue1>' at '<jsonpath1>'
   And response should have '<expectedvalue2>' at '<jsonpath2>'
     :
     : 
END
...