Это мой код:
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
Как я могу проверить этот тег кода состояния, что, если я хочу получить «Успех-2300» и хочу проверить его с помощью тега <ns4:StatusCode> и, соответственно, пройти/не пройти тест
Используйте этот путь: 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()»: я хочу проверить результат строки с другим значением, чтобы сделать тест пройден или не пройден
Конечно. Поскольку вы присвоили значение строковой переменной, вы можете использовать любую логику утверждения.
Почему следующий код: Response responses= (Response) Given() .post("****") .then() .assertThat() .body("Envelope.Body.SendMessageElement.DestinationResponses.destinationResponse.StatusCode ", equalTo("Успех-2000")); Дайте следующую ошибку: java.lang.AssertionError: 1 ожидание не удалось. Путь XML Envelope.Body.SendMessageResponseElement.DestinationResponses.destinationResponse.StatusCode не совпадает. Ожидаемый: SBL-SMS-MT-2000 Фактический: <>
Я не знаю. Я только что проверил это на своем примере, и, похоже, он работает.
Я получаю следующую ошибку: java.lang.ClassCastException: класс io.restassured.path.xml.XmlPath не может быть приведен к классу io.restassured.response.Response (io.restassured.path.xml.XmlPath и io.restassured. response.Response находится в безымянном модуле загрузчика «приложение»)
Я думаю, вам нужно поднять еще один вопрос с примером
Так в чем проблема?