NỘI DUNG BÀI HỌC

✳️ Công dụng của thư viện Lombok và DataFaker
✳️ Cài đặt thư viện Lombok và DataFaker
✳️ Sử dụng Lombok để xây dựng lại cấu trúc POJO class

✅ Công dụng của thư viện Lombok và DataFaker

🔆 Công dụng của thư viện Lombok

Lombok là một thư viện Java được sử dụng để giảm bớt lượng mã lặp lại và giảm bớt các phương thức getter/settercontructor thông thường trong mã nguồn Java, đặc biệt là các POJO class. Thư viện này giúp tăng cường tính linh hoạt và giảm thiểu lượng mã nguồn cần phải viết, giúp mã nguồn trở nên ngắn gọn và dễ đọc hơn.

🌟Dưới đây là một số công dụng chính của Lombok thông qua các ghi chú (Annotation):

  • @NoArgsConstructor: khởi tạo hàm xây dựng không tham số.
  • @AllArgsConstructor: khởi tạo hàm xây dựng chứa tất cả tham số.
  • @RequiredArgsConstructor: Hàm khởi tạo theo yêu cầu. Bạn chỉ muốn hàm khởi tạo có vài thuộc tính do bạn chọn thôi, thì bạn thêm từ khoá final trước thuộc tính trong class, nó sẽ tự sinh ra Contructor như thế.
  • @Data: dùng để tự sinh các hàm Getter và Setter cho tất cả các thuộc tính trong class
  • @Getter/@Setter: @Getter/@Setter khi bạn chỉ muốn generate mỗi hàm Get hoặc Set thôi và không muốn dùng @Data vì nó quá nhiều chức năng, thì có thể dùng 2 ghi chú @Getter và @Setter.
  • @Builder: sử dụng @Builder trong project lombok sẽ giúp chúng ta triển khai Builder pattern mà không cần phải viết thêm bất kỳ đoạn code nào. @Builder có thể sử dụng trên class hoặc method. Hiểu nôm na nhanh là tạo ra 1 class riêng để khởi tạo giá trị sẵn cho thuộc tính class thông qua các hàm Get Set và Contructor.
  • @ToString: Tạo ra hàm toString() từ thuộc tính class.

🔆 Công dụng của thư viện DataFaker

DataFaker là một thư viện dành cho Java và Kotlin để tạo dữ liệu giả, tự động generate data. Điều này rất hữu ích khi tạo dữ liệu thử nghiệm để điền vào cơ sở dữ liệu, để tạo dữ liệu cho thử nghiệm mang tính demo hoặc ẩn danh dữ liệu từ các thông tin dịch vụ nhạy cảm không cần thiết.

Thư viện DataFaker kế thừa và phát triển từ thư viện JavaFaker.


✅ Cài đặt thư viện Lombok và DataFaker

🔆 Cài đặt thư viện Lombok

Sử dụng Maven project để add thư viện qua file pom.xml. Cứ sử dụng phiên bản mới nhất nhé.

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>


Tiếp theo là cài đặt Plugin Lombok trên IntelliJ IDEA để có được các suggest code.

Chọn File -> Settings -> Plugins -> Marketplace -> tìm "Lombok" rồi cài đặt. Xong nhớ nhấn nút Apply luôn nhé.

[REST Assured] Bài 9 - Sử dụng Lombok để xây dựng POJO class | Anh Tester

 

🔆Cài đặt thư viện DataFaker

Sử dụng Maven project để add thư viện qua file pom.xml

<!-- https://mvnrepository.com/artifact/net.datafaker/datafaker -->
<dependency>
    <groupId>net.datafaker</groupId>
    <artifactId>datafaker</artifactId>
    <version>2.0.2</version>
</dependency>

Lưu ý: từ phiên bản 2.0.0 trở lên buộc dùng JDK 17 trở lên. Nên nếu các bạn muốn dùng JDK 11 hay JDK 8 thì dùng phiên bản 1.9.0 trở xuống nhé.

✅ Sử dụng Lombok để xây dựng lại cấu trúc POJO class

Để sử dụng thư viện Lombok vào project thì chúng ta sẽ dùng nó để thay thế cấu trúc POJO class hiện tại và xây dựng thêm các class Data Builder để khởi tạo giá trị cho các fields trong class POJO riêng.

Trước đây POJO class mà chúng ta sử dụng có dạng như này:

package com.anhtester.model;

public class RegisterUserPOJO {

    private String username;
    private String firstName;
    private String lastName;
    private String email;
    private String password;
    private String phone;
    private int userStatus;

    public RegisterUserPOJO(String username, String firstName, String lastName, String email, String password, String phone, int userStatus) {
        this.username = username;
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.phone = phone;
        this.userStatus = userStatus;
    }

    public RegisterUserPOJO() {
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public int getUserStatus() {
        return userStatus;
    }

    public void setUserStatus(int userStatus) {
        this.userStatus = userStatus;
    }
}


Vấn đề của mình là nếu mà các fields nhiều hơn nữa thì cái class này nó dài và phức tạp để đọc code. Tầm 30 40 fields thì chắc là hơi khó nhìn thật 😄

Giờ chúng ta sử dụng các ghi chú của thư viện Lombok vào nhé.

🍀 Thay thế toàn bộ các hàm Get Set với ghi chú @Data

package com.anhtester.model.lombok;

import lombok.Data;

@Data
public class UserPOJO_Lombok {
    private String username;
    private String firstName;
    private String lastName;
    private String email;
    private String password;
    private String phone;
    private int userStatus;
}


Kết quả sau khi khởi tạo đối tượng class POJO thì nó tự động hiển thị các hàm Get Set cho tất cả các biến trong class.



🍀 Khai báo hàm xây dựng có tất cả các tham số với ghi chú @AllArgsConstructor

package com.anhtester.model.lombok;

import lombok.Data;
import lombok.RequiredArgsConstructor;

@Data
@AllArgsConstructor
public class UserPOJO_Lombok {
    private String username;
    private String firstName;
    private String lastName;
    private String email;
    private String password;
    private String phone;
    private int userStatus;
}


Kết quả:





🍀 Khai báo hàm xây dựng với tham số tuỳ ý sử dụng ghi chú @RequiredArgsConstructor

Dùng từ khoá "final" để chỉ định các fields cần xây dựng trong contructor

package com.anhtester.model.lombok;

import lombok.Data;
import lombok.RequiredArgsConstructor;

@Data
@RequiredArgsConstructor
public class UserPOJO_Lombok {
    private final String username; //Required
    private final String firstName; //Required
    private final String lastName; //Required
    private String email;
    private final String password; //Required
    private String phone;
    private int userStatus;
}


Kết quả là chỉ cho phép tạo hàm xây dựng với tham số là các fields có từ khoá "final"




✅ Sử dụng Data Faker

Để sử dụng Data Faker để tạo dữ liệu giả, bạn có thể sử dụng đoạn code sau làm ví dụ:

import net.datafaker.Faker;

Faker faker = new Faker();

//Thông tin người
String name = faker.name().fullName();
String firstName = faker.name().firstName();
String lastName = faker.name().lastName();

//Thông tin đường
String streetAddress = faker.address().streetAddress();

Như vậy là các bạn chỉ cần tạo đối tượng class Faker. Sau đó lấy chấm gọi dùng các hàm nó viết sẵn để lấy dữ liệu giả thôi.

🔆 Sử dụng vùng ngôn ngữ trong Data Faker

Bạn có thể sử dụng data của các nước khác nhau thông qua Locate trong Java. Mặc định là English tương ứng ký hiệu locate là "en".

Ví dụ mình muốn dùng tiếng Việt thì dùng ký hiệu "vi".

import net.datafaker.Faker;
import org.testng.annotations.Test;

import java.util.Locale;

@Test
public void testDataFaker() {
    Faker faker = new Faker(new Locale("vi"));

    String computer = faker.computer().windows();
    String name = faker.name().fullName();
    String fullAddress = faker.address().fullAddress();
    String email = faker.internet().emailAddress();
    String password = faker.internet().password();

    System.out.println(computer);
    System.out.println(name);
    System.out.println(fullAddress);
    System.out.println(email);
    System.out.println(password);
}

Kết quả:

Windows 11
Nguyễn Vân
Apt. 387 9700 Thảo Valley, Phú Thọ, MS WDHV  0ZR
nguyen.tham@hotmail.com
1e8cj6oj53cf

===============================================
Default Suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================

Lưu ý: class Locate là của Java

Các loại data khác bạn có thể xem thêm tại đây Fake Data Providers
Các mã code Locate khác xem tại đây: https://www.science.co.il/language/Locale-codes.php

🔆 Sử dụng DataFaker trong code auto API

@Test
public void testUpdateUser_PATCH() {

    Faker faker = new Faker(new Locale("vi"));

    String phoneNumber = faker.phoneNumber().cellPhone();
    phoneNumber = phoneNumber.replace(" ", "");
    System.out.println(phoneNumber);

    //Chuẩn bị data cho edit user
    RegisterUserPOJO_Lombok registerUserPOJO_lombok = new RegisterUserPOJO_Lombok();
    registerUserPOJO_lombok.setFirstName(faker.name().firstName());
    registerUserPOJO_lombok.setLastName(faker.name().lastName());
    registerUserPOJO_lombok.setEmail(faker.internet().emailAddress());
    registerUserPOJO_lombok.setPhone(phoneNumber);
    registerUserPOJO_lombok.setUserStatus(0);

    Gson gson = new Gson();

    RequestSpecification request = given();
    request.baseUri("https://api.anhtester.com/api")
        .accept("application/json")
        .contentType("application/json")
        .header("Authorization", "Bearer " + TokenGlobal.TOKEN)
        .body(gson.toJson(registerUserPOJO_lombok));

    Response response = request.when().patch("/user/2");
    response.prettyPrint();

    response.then().statusCode(200);

    String message = response.getBody().path("message");
    Assert.assertEquals(message, "Success", "The message not match.");
}

Kết quả lần chạy 1:

{
    "message": "Success",
    "response": {
        "id": 2,
        "username": "boiboi2456456",
        "firstName": "Đinh",
        "lastName": "Hải",
        "email": "đinh.minh@gmail.com",
        "phone": "01631938612",
        "userStatus": 0
    }
}

Kết quả lần chạy 2:

{
    "message": "Success",
    "response": {
        "id": 2,
        "username": "boiboi2456456",
        "firstName": "Tô",
        "lastName": "Vũ",
        "email": "ly.kim@gmail.com",
        "phone": "01648648594",
        "userStatus": 0
    }
}


DataFaker sẽ tự sinh ra bộ data ngẫu nhiên và sẽ không trùng lặp cho mỗi lần chạy code khi chúng ta sử dụng. Khá thuận tiện quá trình Create new hoặc Update data như ví dụ trên.

Teacher

Teacher

Anh Tester

Software Quality Engineer

Đường dẫu khó chân vẫn cần bước đi
Đời dẫu khổ tâm vẫn cần nghĩ thấu

Cộng đồng Automation Testing Việt Nam:

🌱 Telegram Automation Testing:   Cộng đồng Automation Testing
🌱 
Facebook Group Automation: Cộng đồng Automation Testing Việt Nam
🌱 
Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium
🌱 Telegram
Manual Testing:   Cộng đồng Manual Testing
🌱 
Facebook Group Manual: Cộng đồng Manual Testing Việt Nam

Chia sẻ khóa học lên trang

Bạn có thể đăng khóa học của chính bạn lên trang Anh Tester để kiếm tiền

Danh sách bài học