当前位置: 首页 > 知识库问答 >
问题:

如何使用Rest Assured在响应API中获得两个同名的不同字段?

宇文航
2023-03-14

我正在尝试使用Rest-Asure和Java为GET API创建测试自动化。

此API具有以下响应主体:

{
    "items": [
        {
            "id": "3185",
            "customer_id": "299",
            "region": "São Paulo",
            "region_id": 1234,
            "country_id": "BR",
            "street": [
                "Av Paulista"
            ],
            "company": "Teste",
            "telephone": "(19) 99999-9999",
            "postcode": "",
            "city": "Valinhos",
            "firstname": "N/A",
            "lastname": "N/A",
            "middlename": null,
            "prefix": null,
            "suffix": null,
            "person_type": "PF",
            "document": "43448871703",
            "state_registry": null,
            "created_at": "2019-07-24 13:03:29"
        },
        {
            "id": "3188",
            "customer_id": "299",
            "region": "São Paulo",
            "region_id": 1234,
            "country_id": "BR",
            "street": [
                "Av Paulista"
            ],
            "company": "Teste",
            "telephone": "(19) 99999-9999",
            "postcode": "",
            "city": "Valinhos",
            "firstname": "N/A",
            "lastname": "N/A",
            "middlename": null,
            "prefix": null,
            "suffix": null,
            "person_type": "PJ",
            "document": "84047942000115",
            "state_registry": null,
            "created_at": "2019-07-24 13:03:30"
        }
    ]
}

在此API响应中有两个同名“id”的字段。如何获取这两个字段的值?

谢谢

共有3个答案

乜业
2023-03-14

由于您使用的是REST保证,因此您可以直接从响应本身中提取您想要的内容,如下所示:

List<Integer> = given()
                  .spec(yourRequestSpecification)
                  .get("/your_api_endpoint") // returns Response
                  .then()                    // returns ValidatableResponse
                  .extract()                 // returns ExtractableResponse
                  .path("items.id");         // Groovy GPath syntax

Jayway的jsonpath和REST assured的jsonpath使用不同的语法

何甫
2023-03-14

您可以通过使用JsonPath:$. item[*]. id轻松做到这一点,这将为您提供两个id。

扶开诚
2023-03-14

看看这篇文章:https://techeplanet.com/parse-json-array-using-rest-assured/

    @Test
    public void verifyJSONArrayResponse() {
        JsonArray jsonArray = new JsonArray();

        jsonArray = given().baseUri("http://<your host>")
                .basePath("<your path>")
                .get().as(JsonArray.class);

        for (int i = 0; i < jsonArray.size(); i++) {
            JsonObject jsonObject = jsonArray.get(i).getAsJsonObject();
            System.out.println(jsonObject.get("id").getAsString());
        }
    }

不过,您需要对其进行一些调整,以便首先从顶级响应对象中提取

 类似资料:
  • 我已经使用登录API在Jmeter中进行了测试。 为此,我通过了以下请求: 帖子网址:......POST数据参数:"电子邮件地址":"a@gmail.com","密码":"ad332017" 对于上述要求,我得到两种不同的答复。 邮递员:我收到回复,状态代码200 OK(这也是预期的) 在Jmeter上,我得到响应:响应代码:307响应消息:临时重定向。 谁能帮我解决这个问题?

  • 我在用放心做API自动化。我想从API响应中获取值并传递给另一个java类, 这是我的测试类, 如何将此方法更改为另一种类型的无效值,或者如何在另一个java类中传递人员引用值

  • 我有两个外部模型相同的API,所以我为外部模型(ResponseModel)和结果键创建了一个模型类,我为结果键创建了一个名为ResultModel的类,所以我可能能够编写结果键上可能出现的所有响应 在这里,我添加了ResultModel结果键中可能的响应,将给出国家列表或州列表 CountryList API 1结果 状态列表API 2结果 我遵循这个结构来重用外部模型。但它不起作用 不管怎样,

  • 我们公司有两个jira装置。一个用于我们的项目,另一个用于测试目的。 我在一个需要使用JIRA REST应用编程接口的项目中工作。为此,我连接到我们的测试实例。 问题是,在尝试REST API时,我不断收到400个错误,而没有一个错误的解释。我只是得到了一个HTML 您的浏览器发送了此服务器无法理解的请求 我有点绝望,决定把它放进我们真正的JIRA。令我惊讶的是,同样的要求给了我不同的回应: 在这

  • 问题内容: 我需要使用Cookie在两个不同的域之间共享SSO信息,这可以在PHP中完成吗? 问题答案: 在两个域上,放置从另一个域提取的图像或其他Web元素。使用URL通知另一个域用户X在域A上,并让域B将该用户ID与该用户在其系统上关联。 正确执行起来有点复杂,但是如果您认为通过它会很好地进行。 Vinko在评论中(感谢!)指出,我不认为您了解所涉及的安全风险是理所当然的。如果此信息对任何人都

  • 我在这里看到了你们为下面给出的链接提供解决方案的帖子。ElasticSearch Java API从查询生成器中获取不同的值 有没有办法通过?你能帮我解决这个问题吗?我试了很多方法,但都没能解决。但我可以在SQL Workbench中实现同样的功能,下面使用Kibana translator给出了等效的json查询。 等效Elasticsearch查询如下: 所以现在我想形成这个JSON查询使用R