如何搜索具有相同名称和相同级别的XML节点值?

时间:2018-06-22 13:29:52

标签: java xml cucumber rest-assured

我正在尝试使用Cucumber和REST确保在我的Gradle项目中创建自动测试。

下面是XML响应正文:

<ValidationResponse>
    <errors>
        <error>
            <field>id</field>
        </error>

        <error>
            <field>amount</field>
        </error>

    </errors>
</ValidationResponse>

我正在尝试使用以下REST保证代码进行检查:

  • “ id”出现在第一个错误字段中
  • “金额”出现在第二个错误字段中

    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"));
    

第二个字段失败,因为代码只是检查它遇到的第一个“字段”。

有人知道我需要对代码进行哪些更改,以便它也检查第二个“字段”吗?

1 个答案:

答案 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;