为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

FFIVE 2021-04-05 16:15:33
我正在尝试使用Cucumber和REST Assured在我的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 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

使用下面的代码片段来验证响应字段。


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

或者


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;


查看完整回答
反对 回复 2021-04-21
  • 1 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信