【问题标题】:RestAssured and GPath expression for attribute not consistent属性的 RestAssured 和 GPath 表达式不一致
【发布时间】:2014-06-03 17:44:08
【问题描述】:

我们使用 REST-assured 框架在 Java 中进行一些单元/集成测试。

来自 REST 服务的 XML 答案与此类似:

<?xml version="1.0" encoding="UTF-8"?>
<Items xmlns="urn:service:com:namespace:item/1"
    returned="3" found="3">

    <ItemRef object="urn:svc:com:car:item:123456" type="door">door-123456.pdf</ItemRef>
    <ItemRef object="urn:svc:com:car:item:983425" type="mirror">mirror-43562577.pdf</ItemRef>
    <ItemRef object="urn:svc:com:car:item:983425" type="wheel" >door-94584854.pdf</ItemRef>    
</Items>

在我的测试中,我有兴趣通过像这样读取returned 属性来检查返回的项目数

givenOK()
    .expect()
        .body("Items.@returned", equalTo("3")) // this is a string
    .when()
    .get(myurl)

而且效果很好

现在我还想用相同的逻辑控制 xmlns 中的 URN 是否正确:

givenOK()
    .expect()
        .body("Items.@returned", equalTo("3")) // this is a string
        .body("Items.@xmlns", equalTo("urn:service:com:namespace:item/1"))
    .when()
    .get(myurl)

但是当我的测试运行时,表达式Items.@xmlns似乎没有返回属性的值而是空的:[]

知道为什么这不起作用吗?

【问题讨论】:

    标签: java namespaces rest-assured xmlslurper gpath


    【解决方案1】:

    会不会是“xmlns”属性因为表示命名空间而被特殊对待?

    一种可能的解决方法是在 XmlConfig 中声明命名空间并验证正文中的某些内容。

    given().
            config(RestAssured.config().xmlConfig(XMLConfig.xmlConfig().declareNamespace("ns", "urn:service:com:namespace:item/1"))).
    when().
            get(myUrl).
    then().
            body("'ns:ItemRef'[0]", equalTo("door-123456.pdf"));
    

    另一个具有多个节点和属性的示例(显式路径):

    given()
        .config(
            RestAssured.config()
                .xmlConfig(XmlConfig.xmlConfig()
                    .declareNamespace("ns", "urn:service:com:namespace:item/1"))).
        when()
            .get(myUrl)
        .then()
            .body("'ns:RootNode'.'ns:Level1'.'ns:Level2'[0].'@ns:id'", equalTo("AN-ID-123"));
    

    【讨论】:

    • 可能,但在 xpath 中我可以使用函数 namespace-uri() 来使用某些东西,但它看起来在 RESTAssured/GPATH 上下文中不起作用。
    • 第二个 xmlConfig() 不能按原样工作。我不得不改用new XmlConfig()。
    • @ruffp 你需要从 XmlConfig 静态导入 xmlConfig
    • 完美,我没有找到另一种方法,但这种解决方法效果很好,我还添加了一个示例来阐明如何将单引号与多个元素一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    相关资源
    最近更新 更多