Как извлечь тег ответа SOAP XML и проверить его в режиме Rest Assured с помощью TestNG

Это мой код:

package testcases;

import io.restassured.RestAssured;
import io.restassured.path.xml.XmlPath;
import io.restassured.response.Response;
import org.apache.commons.io.IOUtils;
import org.testng.annotations.Test;

import java.io.FileInputStream;

import static io.restassured.RestAssured.given;
public class api_automation {


        @Test
        public  void postMethod() throws Exception{

            FileInputStream fileinputstream= new FileInputStream("/home/intellij-projects/rest-assured/src/main/java/testcases/request.xml");
            RestAssured.baseURI = "*******";
            Response responses= given()
                    .header("Content-Type", "text/xml")
                    .and()
                    .body(IOUtils.toString(fileinputstream,"UTF-8"))
                    .when()
                    .post("******")
                    .then()
                    .statusCode(200)
                    .and()
                    .log().all().extract().response();


            XmlPath xmlPath=new XmlPath(responses.asString());
            String StatusCode= xmlPath.getString("<StatusCode>");

            System.out.println("Status Code is " +StatusCode);

        }

    }

Вывод моего кода

HTTP/1.1 200 OK
Date: Thu, 10 Nov 2022 12:20:21 IST
Content-Type: text/xml;charset=iso-8859-1
Expires: Thu, 10 Nov 2022 12:20:21 IST
Content-Length: 951
Server: Jetty(9.4.14.v20181114)

<soap:Envelope xmlns:soap = "http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns4:SendMessageElement xmlns:ns6 = "http://******/uwl/ws/message/wsdl/error" 
xmlns:ns5 = "http://*****/uwl/ws/message/wsdl/common" 
xmlns:ns4 = "http://*****/uwl/ws/message/wsdl/send" 
xmlns:ns3 = "http://*****/uwl/ws/message/wsdl/application" 
xmlns:ns2 = "http://*****/uwl/ws/message/wsdl/header" 
xmlns = "http://*****/uwl/ws/message/wsdl/acm">
      <ns4:MessageId>1101220210165</ns4:MessageId>
      <ns4:StatusCode>Success-2000</ns4:StatusCode> ---This Tag needs to be validated
      <ns4:StatusDetail>Success</ns4:StatusDetail>
      <ns4:DestinationResponses>
        <ns4:destinationResponse>
          <ns4:Destination>1000030</ns4:Destination>
          <ns4:TimeStamp>20221110122021</ns4:TimeStamp>
          <ns4:MessageId>43</ns4:MessageId>
          <ns4:StatusCode>Success-2000</ns4:StatusCode>
          <ns4:StatusDetail>Success</ns4:StatusDetail>
        </ns4:destinationResponse>
      </ns4:DestinationResponses>
    </ns4:SendMessageElement>
  </soap:Body>
</soap:Envelope>


Status Code is1101220210165Success-2000Success10000302022111012202143SBL-SMS-MT-2000Success

===============================================
Default Suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================


Я хочу, чтобы тест был пройден при условии, что данный код состояния совпадает с кодом состояния тега ответа

Как и в коде, объявите переменную, и ответ должен быть равен этому

Я хочу сопоставить следующий тег с ожидаемым результатом:

  <ns4:StatusCode>Success-2000</ns4:StatusCode>

Со следующими строками я получаю и другие ответы тегов

        String StatusCode= xmlPath.getString("<StatusCode>");

        System.out.println("Status Code is " +StatusCode);

Вывод :

Status Code is1101220210165Success-2000Success10000302022111012202143SBL-SMS-MT-2000Success

Так в чем проблема?

Alexey R. 11.11.2022 10:09

Как я могу проверить этот тег кода состояния, что, если я хочу получить «Успех-2300» и хочу проверить его с помощью тега <ns4:StatusCode> и, соответственно, пройти/не пройти тест

RuqiJam 11.11.2022 10:20
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Как включить TLS в gRPC-клиенте и сервере : 2
Как включить TLS в gRPC-клиенте и сервере : 2
Здравствуйте! 🙏🏻 Надеюсь, у вас все хорошо и добро пожаловать в мой блог.
Сортировка hashmap по значениям
Сортировка hashmap по значениям
На Leetcode я решал задачу с хэшмапой и подумал, что мне нужно отсортировать хэшмапу по значениям.
0
2
113
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте этот путь: Envelope.Body.SendMessageElement.DestinationResponses.destinationResponse.StatusCode

Тест:

public static void main(String[] args) {
    String result = RestAssured
            .get("https://run.mocky.io/v3/08f352c8-641d-4adc-b2e6-49add556c883")
            .then()
            .extract()
            .xmlPath()
            .getString("Envelope.Body.SendMessageElement.DestinationResponses.destinationResponse.StatusCode");
    System.out.println(result);
}

Выход: Success-2000

Да, спасибо, это работает. Можно ли использовать метод «equalTo» для проверки этого значения после «extract()»: я хочу проверить результат строки с другим значением, чтобы сделать тест пройден или не пройден

RuqiJam 11.11.2022 11:41

Конечно. Поскольку вы присвоили значение строковой переменной, вы можете использовать любую логику утверждения.

Alexey R. 11.11.2022 11:50

Почему следующий код: Response responses= (Response) Given() .post("****") .then() .assertThat() .body("Envelope.Body.SendMessageElement.DestinationResponses‌​.destinationResponse‌​.StatusCode ", equalTo("Успех-2000")); Дайте следующую ошибку: java.lang.AssertionError: 1 ожидание не удалось. Путь XML Envelope.Body.SendMessageResponseElement.DestinationResponse‌​s.destinationRespons‌​e.StatusCode не совпадает. Ожидаемый: SBL-SMS-MT-2000 Фактический: <>

RuqiJam 11.11.2022 12:12

Я не знаю. Я только что проверил это на своем примере, и, похоже, он работает.

Alexey R. 11.11.2022 12:57

Я получаю следующую ошибку: java.lang.ClassCastException: класс io.restassured.path.xml.XmlPath не может быть приведен к классу io.restassured.response.Response (io.restassured.path.xml.XmlPath и io.restassured. response.Response находится в безымянном модуле загрузчика «приложение»)

RuqiJam 11.11.2022 13:17

Я думаю, вам нужно поднять еще один вопрос с примером

Alexey R. 11.11.2022 14:21

Другие вопросы по теме