无效的XML路径密钥仍在Rest Assured中评估

Pan*_*kaj 7 rest-assured

我的示例Web服务正在返回XML.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<errorResponse>
<errorCode>Wrong ID</errorCode>
<errorId>2</errorId>
</errorResponse>
Run Code Online (Sandbox Code Playgroud)

以下测试通过.

response.then().body("errorResponse.errorId", Matchers.is("2"));
response.then().body("errorResponse.errorCode", Matchers.is("Wrong ID"));

response.then().body("errorResponse1.errorCode", Matchers.is("Wrong ID"));
response.then().body("errorResponse2.errorCode", Matchers.is("Wrong ID"));
Run Code Online (Sandbox Code Playgroud)

我知道前两个测试都很好,我没有得到的是为什么最后两个测试通过了?

Luc*_*ens 1

Rest-assured 使用其xml-path库来评估您的 hamcrest 匹配器,并且该库包含执行实际检查的 XMLAssertion 类。

源代码可以在 GitHub 上找到:https://github.com/rest-assured/rest-assured/blob/master/xml-path/src/main/groovy/io/restassured/assertion/XMLAssertion.groovy

在该文件的第 60 行,您可以看到它删除了第一个点之前的搜索键部分,因为它识别出我们正在从根节点进行评估。

因此你的钥匙:

"errorResponse3.errorCode" 
Run Code Online (Sandbox Code Playgroud)

变成

".errorCode"
Run Code Online (Sandbox Code Playgroud)

所以事实证明,这个初始路径是什么样子并不重要,它假设它是根节点的名称并无论如何都会丢弃它。