我正在尝试使用Cucumber和REST确保在我的Gradle项目中创建自动测试。
下面是XML响应正文:
<ValidationResponse>
<errors>
<error>
<field>id</field>
</error>
<error>
<field>amount</field>
</error>
</errors>
</ValidationResponse>
我正在尝试使用以下REST保证代码进行检查:
“金额”出现在第二个错误字段中
RestAssured.given()
.auth()
.preemptive()
.basic(theUsername, thePassword)
.contentType(theContentType)
.header("Accept",theContentType)
.body(theXMLBody)
.when()
.post(theURL)
.then()
.body("ValidationResponse.errors.error[0].field", equalTo("id"))
.and()
.body("ValidationResponse.errors.error[1].field", equalTo("amount"));
第二个字段失败,因为代码只是检查它遇到的第一个“字段”。
有人知道我需要对代码进行哪些更改,以便它也检查第二个“字段”吗?
答案 0 :(得分:0)
使用以下代码片段验证响应字段。
String responseXMLAsString = "<ValidationResponse> <errors> <error> <field>id</field> </error> <error> <field>amount</field> </error> </errors> </ValidationResponse>";
XmlPath xmlPath = new XmlPath(responseXMLAsString);
assertThat(xmlPath.get("ValidationResponse.errors.error.field"), contains("id","amount"));
OR
RestAssured.given()
.auth()
.preemptive()
.basic(theUsername, thePassword)
.contentType(theContentType)
.header("Accept",theContentType)
.body(theXMLBody)
.when()
.post(theURL)
.then()
.body("ValidationResponse.errors.error.field", contains("id","amount"));
contains()是hamcrest匹配器
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;