请放心 - 将 json 路径与另一个路径进行比较

Rest Assured - comparing the json path with another

我有下面的例子json

{"TestJson":{  
  "Result":"Passed",
  "description":"Passed."},
  "Students":[{  
     "Class":{  
        "Primary":"Yes"
     },
     "Course":{  
        "Enrolled":"yes",
         "AccountNumber":"2387287382"
     },
     "AccountNumber":"2387287382",
     "Paid":"Yes"
  }]}

我想知道如何找到一个好的解决方案。

我目前在做什么

.body("Students[0].Course.AccountNumber",equalTo("2387287382"))
.body("Students[0].AccountNumber",equalTo("2387287382"))

我的测试标准是检查键 Students[0].AccountNumber 匹配 Students[0].Course.AccountNumber


我想这样做,但我找不到类似

的解决方案
.body("Students[0].Course.AccountNumber",equalTo("Students[0].AccountNumber"))

以上显然行不通,但这就是我想要比较的方式。基本上将密钥与另一个密钥进行比较,它们应该匹配。

这可行吗?

一种方法是:

String A = 
given ().
when().
get/put/post({api/name})
.extract()
.path("Students[0].Course.AccountNumber");

String B = 
given ().
when().
get/put/post({api/name})
.extract()
.path("Students[0].AccountNumber");

Assert.assertEquals(A, B);

似乎此解决方法是唯一的解决方法。

请参阅 rest-assured 文档的 Use the response to verify other parts of the response 部分。您基本上想要创建一个实现 ResponseAwareMatcher<Response> 的 lambda。像这样:

get("/x").then().body("href", response -> equalTo("http://localhost:8080/" + response.path("userId"));