簡體   English   中英

如何檢查響應正文是否有數據?

[英]How to check if response body has data?

我是 TestNG 的新手,我正在嘗試測試響應主體是否有數據。 現在,如果我在 POSTMAN 上運行http://localhost:8080/sportsbetting-web/loadEvents POSTMAN JSON 正文會返回這些數據。

   [ {
            "id": 2,
            "title": "Fradi vs UTE",
            "type": "Football Match",
            "start": [
                2022,
                5,
                29,
                8,
                47,
                54,
                383000000
            ],
            "end": [
                2022,
                5,
                29,
                10,
                47,
                54,
                383000000
            ]
        }, ... ]

現在我應該使用 TestNG 測試相同的http://localhost:8080/sportsbetting-web/loadEvents API 端點,但我應該怎么做呢? 我試過這個:

@Test
public void testGetEvents(){
    given().when().get("http://localhost:8080/sportsbetting-web/loadEvents").then().statusCode(200);
}

它返回 200 OK 響應,但是我想測試響應正文是否包含 JSON 數據,例如id, title

最好的選擇是創建響應的對象表示,例如MyEvent.java 要快速創建此類課程,請使用此類在線工具。

MyEvent.java

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
public class MyEvent {
    private Integer id;
    private String title;
    private String type;
    private List<Integer> start;
    private List<Integer> end;

    public Integer getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public List<Integer> getStart() {
        return start;
    }

    public void setStart(List<Integer> start) {
        this.start = start;
    }

    public List<Integer> getEnd() {
        return end;
    }

    public void setEnd(List<Integer> end) {
        this.end = end;
    }
}

測試看起來像:

@Test
public void testGetEvents() {
    /*
        I had to use online service to simulate your response, so please uncomment the line:
        List<MyEvent> events = given().when().get("http://localhost:8080/sportsbetting-web/loadEvents")
    */
    List<MyEvent> events = given().when().get("https://sportsbetting.free.beeceptor.com/my/api/path")
            .then().statusCode(200)
            .extract().as(new TypeRef<List<MyEvent>>() {});

    System.out.println("Total amount of events: " + events.size());

    System.out.println("For each event - show if 'id' or 'title' exist");
    int eventCounter = 0;
    for (MyEvent event : events) {
        System.out.println("Processing event number " + (++eventCounter));
        if (event.getId() != null) {
            System.out.println("Id " + event.getId());
        }
        if (event.getTitle() != null) {
            System.out.println("Title " + event.getTitle());
        }
    }
}

測試執行結果: 在此處輸入圖像描述

筆記:

  1. 其他依賴項(在下面的示例中,我使用的是 gradle 語法,但同樣的想法也適用於 maven):

     implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.3' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.13.3' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.13.3'
  2. 而不是在MyEvent類中編寫多個 getter/setter - 最好使用 Lombok 庫(google it),只需在MyEvent類下添加@Getter@Setter注釋。 這是將 Lombok 添加到 gradle 項目的方式:

     compileOnly 'org.projectlombok:lombok:1.18.24' annotationProcessor 'org.projectlombok:lombok:1.18.24'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM