从xml响应中获取一个数字

时间:2018-02-15 03:29:59

标签: xml xpath rest-assured

我使用了restassured 2.9.0,测试xml的行为与测试xml的行为不同。我有一个服务器返回此表单的xml:

<foo-fee bar="123">
  <baz>456</baz>
</foo>

我想用restassured来测试它。这有效:

    given()
        .port(8080)
    .get("/endpoint")
    .then()
    .log().body()
    .contentType(XML)
    .assertThat()
        .body(  "foo-fee.@bar", equalTo("123"),
                "foo-fee.baz",equalTo("456"),
        )
        .statusCode(200)
    ;

但是返回123&amp; 456作为字符串。我真正想做的是将它们视为数字,以便我可以做这样的事情(请注意123在上面的引号中,但不在这里):

        .body(  "foo-fee.@bar", equalTo(123),
                "foo-fee.baz", both(greaterThan(400)).and(lessThan(500),
        )

我以为我可以这样做:

        .body(  "number(foo-fee.@bar)", equalTo(123),
                "number(foo-fee.baz)", both(greaterThan(400)).and(lessThan(500))
        )

我已经尝试了

        .body(  "number(foo-fee/@bar)", equalTo(123),
                "number(foo-fee/baz)", both(greaterThan(400)).and(lessThan(500))
        )

        .body(  "foo-fee.number(@bar)", equalTo(123),
                "foo-fee.number(baz)", both(greaterThan(400)).and(lessThan(500))
        )

        .body(  "foo-fee.@bar.number", equalTo(123),
                "foo-fee.baz.number", both(greaterThan(400)).and(lessThan(500))
        )

许多其他人。

我错过了什么?我该怎么做呢?我用谷歌搜索了我能想到的一切,但还没有任何工作。

FWIW,当测试json数字作为数字返回时,我可以理解123,但不能理解456.我无法弄清楚如何转换......

感谢大家的时间和专长。

1 个答案:

答案 0 :(得分:1)

使用toInteger():

.body("foo-fee.@bar.toInteger()", equalTo(123),
      "foo-fee.baz.toInteger()", both(greaterThan(400)).and(lessThan(500))
     )

文档在这里:http://groovy-lang.org/processing-xml.html#_gpath