【问题标题】:How can i extract data from json array to use in subsequent rest assure api request我如何从 json 数组中提取数据以用于后续的 rest 确保 api 请求
【发布时间】:2020-11-05 18:07:08
【问题描述】:

我正在使用 Java 来自动化 API 并希望从 GET 响应中提取 idrecommendIdproductId 以传递到另一个帖子请求中,并且还想知道如何提取数据来自数组中的第二个对象。

到目前为止,我一直在努力通过搜索来实现这一目标,感谢您对如何处理此问题的帮助。

{
   "result":"OK",
   "reason":null,
   "content":[
      {
         "id":"00AX",
         "publishingDate":"2018-05-29",
         "expiryDate":"2018-11-18",
         "title":"Terry William",
         "agentName":"Faith Davis",
         "status":"Viewed",
         "products":[
            {
               "recommendId":"003",
               "code":"9765455",
               "brand":"Gucci",
               "category":"COATS",
               "description":"Trouser",
               "itemStatus":"In Stock",
               "siteStatus":"Approved",
               "reservedStatus":"Recommended",
               "reservedSize":"10 UK",
               "productIDs":[
                  {
                     "productId":"23",
                     "size":"4 UK"
                  },
                  {
                     "productId":"32",
                     "size":"6 UK"
                  },
                  {
                     "productId":"12",
                     "size":"8 UK"
                  },
                  {
                     "productId":"25",
                     "size":"10 UK"
                  },
                  {
                     "productId":"39",
                     "size":"12 UK"
                  },
                  {
                     "productId":"76",
                     "size":"14 UK"
                  }
               ],
               "url":"https://image.jpg"
            }
         ]
      },
      {
         "id":"00AP",
         "publishingDate":"2018-05-29",
         "expiryDate":"2018-11-18",
         "title":"Jones Bob",
         "agentName":"Mary Jones",
         "status":"Viewed",
         "products":[
            {
               "recommendId":"002",
               "code":"6767464",
               "brand":"LV",
               "category":"BAGS",
               "description":"Loewe Bags",
               "itemStatus":"In Stock",
               "siteStatus":"Approved",
               "reservedStatus":"Recommended",
               "reservedSize":"10 UK",
               "productIDs":[
                  {
                     "productId":"23",
                     "size":"4 UK"
                  },
                  {
                     "productId":"32",
                     "size":"6 UK"
                  },
                  {
                     "productId":"12",
                     "size":"8 UK"
                  },
                  {
                     "productId":"25",
                     "size":"10 UK"
                  },
                  {
                     "productId":"39",
                     "size":"12 UK"
                  },
                  {
                     "productId":"76",
                     "size":"14 UK"
                  }
               ],
               "url":"https://image.jpg"
            }
         ]
      }
   ]
}

【问题讨论】:

  • JSONObject API。杰克逊(进入Map 或 POJO)。 JsonPath。
  • stackoverflow.com/questions/64702095/… 看看我的回答,用你的 Hashmap 替换 Array
  • 我想遍历 Json 响应中的路径。我需要一个 POJO 吗?我以为我可以使用 JsonPath、Arraylist 之类的东西?

标签: java json rest-assured


【解决方案1】:

试试这个,

// Base Test [BaseTest.java]
public class BaseTest {

    protected RequestSpecification requestSpecificationToMerge = new RequestSpecBuilder()
            .setBaseUri("Your Base Url")
            .setContentType(ContentType.JSON)
            .build();

    @BeforeMethod
    public void setFilter() {
        RestAssured.filters(new AllureRestAssured());
    }

}

// Return Id,recommendId and productId [Function.java]
public class ListCompetition extends BaseTest {

public String returnId() {
        return given()
                .spec(requestSpecificationToMerge)
                .basePath("/your endpoint")
                .when()
                .get()
                .getBody()
                .path("content[0].id").toString();
    }

public String recommentId() {
        return given()
                .spec(requestSpecificationToMerge)
                .basePath("/your endpoint")
                .when()
                .get()
                .getBody()
                .path("content[0].products[0].recommendId").toString();
    }

public String productId() {
        return given()
                .spec(requestSpecificationToMerge)
                .basePath("/your endpoint")
                .when()
                .get()
                .getBody()
               .path("content[0].products[0].productIDs[0].productId").toString();
    }
}

您可以为您的测试所需的 ID、RECOMMENTID 和 PRODUCTID 调用此函数

【讨论】:

  • 它有效。谢谢。请问我如何使用hasKey通过for循环验证响应中的所有键/值对。
  • 对于验证,您可以使用 JSON SCHEMA。通过使用 JSON SCHEMA,您无需执行循环来检查整个响应
  • 每次调用的值总是不同的,因此 JSON SCHEMA 在这种情况下不起作用。我想使用 for 循环来检查数组中的每个产品是否包含某些“键”或键/值,用于推荐 ID、代码、品牌、类别、描述、项目状态等。谢谢
猜你喜欢
  • 2022-11-19
  • 2023-03-17
  • 2018-01-13
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
相关资源
最近更新 更多