[Bài 4] Request POST sử dụng Rest-Assured

Requirement: Test API create a new student

POST request có body như phía dưới và assert kết quả (message: “Student added” và status code là 201)

{
   "id":1,
   "firstName":"Vernon",
   "lastName":"Harper",
   "email":"egestas.rhoncus.Proin@massaQuisqueporttitor.org",
   "programme":"Financial Analysis",
   "courses":[
      "Accounting",
      "Statistics"
   ]
}

I. Cách tạo POST request

Tạo Post request bằng Rest-Assured:

Response res = given()
                .contentType(ContentType.JSON)
                .when()
                .body(student)
                .post();
  • Vì body ở phần yêu cầu là 1 Object Json nên khi gửi request POST, cần phải viết rõ contentType application/json
  • Trong phần body, mình cần add vào 1 Object Student. Theo yêu cầu cần gửi 1 Object json mà code mình viết bằng Java, do đó mình phải có 1 cách nào đó để chuyển từ Java –> Json. Ta phải add thêm 1 thư viện có tên Jackson. Thực ra thì Rest-Assured có thể hỗ trợ nhiều thư viện Object Mapping khác nhau, ví dụ như Jackson, Jackson2, Gson or Johnzon. Mình add Jackson vào trong pom.xml
<dependency>
      <groupid>com.fasterxml.jackson.core</groupid>
      <artifactid>jackson-databind</artifactid>
      <version>2.9.8</version>
</dependency>
  • Cuối cùng, ta sử dụng post() để set Method là POST.

II. Cách tạo body

Việc của chúng ta cần làm chỉ là tạo ra 1 POJO Java có cùng cấu trúc với Object Json theo yêu cầu là xong. Nếu ai chưa biết thì POJO là Plain Old Java Object, nôm na, nó có nghĩa là 1 Object Java thông thường, sẽ không được extends hoặc implement cái gì cả. Bạn sẽ phải add Jackson vào trong pom.xml

Việc tạo ra Object Java thì rất đơn giản, chỉ cần tạo 1 Class có các fields giống với Object Json là xong. Ở đây ta sẽ thấy như sau:

  • id là số, nên ta set Data type là int
  • firstName là String nên Data type là String
  • courses là 1 array của String nên Data type là List<String>

Lưu ý: Để Object Mapping không bị lỗi thì Object Java sẽ phải có đủ getter setter.

Bạn có 2 cách để xử lý vấn đề này:

  • Sử dụng auto-generate getter/setter từ Intellij. Alt + Insert > Getter and Setter
  • Vì 1 Object mà có nhiều fields thì việc add thêm getter/setter làm cho code trông dài và rất lằng nhằng, do đó mình sử dụng 1 thư viện có tên là lombok để có thể auto-geneate getter/setter lúc runtime.

Add Lombok gồm 3 bước:

  • Add lombok plugin to Intellij
  • Check ‘Enable annotation processing’ in Intellij
  • Add library lombok vào pom.xml
<dependency>
      <groupid>org.projectlombok</groupid>
      <artifactid>lombok</artifactid>
      <version>1.18.10</version>
      <scope>provided</scope>
</dependency>

Chốt lại file pom.xml sẽ như sau:

<dependencies>

    <dependency>
      <groupid>io.rest-assured</groupid>
      <artifactid>rest-assured</artifactid>
      <version>3.3.0</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupid>org.junit.jupiter</groupid>
      <artifactid>junit-jupiter-api</artifactid>
      <version>5.5.2</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupid>com.fasterxml.jackson.core</groupid>
      <artifactid>jackson-databind</artifactid>
      <version>2.9.8</version>
    </dependency>

    <dependency>
      <groupid>org.projectlombok</groupid>
      <artifactid>lombok</artifactid>
      <version>1.18.10</version>
      <scope>provided</scope>
    </dependency>

</dependencies>

Lưu ý: Sau khi bạn đã làm hết những việc trên mà lombok vẫn báo error thì hãy restart lại Intellij và thực hiện Maven/reimport

III. Viết Test

Mệt quá, viết mãi không hết bài (cry)

  • Mình khởi tạo Object Student rồi set giá trị cho các fields như bình thường
  • Sau đó mình sử dụng body() để asset kết quả. Đây là message trả về sau khi add student.
{
    "msg": "Student added"
}

Có thể bạn sẽ thắc mắc là cái equalTo() kia ở đâu ra, thì nó là 1 function của Hamcrest, 1 library để chuyên thực hiện việc assert. Cái library này đã được include trong Rest-Assured nên bạn không cần phải add nó vào pom.xml. Việc sử dụng Hamcrest như thế nào thì mình sẽ viết dần dần vào các bài sau.

IV. Kết luận

Cảm thấy viết được 1 cái post request bằng Rest-Assured cũng loằng ngoằng nhỉ phải không ace. Đấy là cảm giác ban đầu thôi, sau sẽ viết nhanh như gió (ý là nhanh như chém gió. :v). Chốt lại, trình tự của 1 Post request phải làm là:

  • Tạo ra Object
  • Set giá trị cho các fields của Object đó
  • Call API
  • Check response sau khi gọi API

6 thoughts on “[Bài 4] Request POST sử dụng Rest-Assured

  1. Pingback: [Bài 3] Request GET sử dụng Rest-Assured | GiangTester Blog

    • Bạn hiểu như thế cũng được. Automation test chỉ việc tự động run và tự động check kết quả và đây là phần automation viết bằng code.

  2. Pingback: [Bài 5] Request PUT sử dụng Rest-Assured | GiangTester Blog

  3. Pingback: [Bài 6] Request DELETE sử dụng Rest-Assured | GiangTester Blog

  4. Pingback: [Bài 7] Project structure cho Automation Api Testing sử dụng Rest-Assured | GiangTester Blog

Leave a Reply

Your email address will not be published. Required fields are marked *