Trong quá trình làm việc của mình thì việc sử dụng postman script để test các đầu api là điều gần như không thể thiếu trong quá trình làm việc, trong bài viết này mình sẽ chia sẻ một vài cách hay để tối ưu hóa thời gian của các bạn khi test api.

Sử dụng script để tạo dữ liệu ảo

Khi test api các bạn sẽ có nhu cầu cần những bộ data giả để làm dữ liệu đầu vào, có thể là truyền vào request body, request param hay path variable nhưng lại không muốn cứ phải thay đổi bằng tay một cách thủ công mà muốn tự động random giá trị.

Trong postman đã có sẵn những hàm random giúp bạn có thể tự động tạo ra những bộ giá trị fake, việc của chúng ta chỉ cần lấy ra để sử dụng thôi, các bạn có thể xem ở bên dưới

{
    "name": "{{$randomFullName}}",
    "gender": "MALE",
    "first_name": "{{$randomWord}}",
    "last_middle_name": "{{$randomWord}}",
    "identify_number": "{{$randomBankAccount}}",
    "permanent_address": "{{$randomStreetAddress}}",
    "self_description": "{{$randomWords}}",
    "bank_account_holder": "{{$randomBankAccountName}}",
    "bank_account_number": "{{$randomBankAccount}}",
    "bank_code": "{{$randomBankAccount}}",
    "bank_name": "{{$randomBankAccountName}}",
    "tax_code": "{{$randomBankAccount}}"
}

Hoặc thay vì sử dụng những hàm random sẵn của postman cung cấp, thì các bạn có thể tự viết hàm, tự tạo ra biến để sử dụng cho nhu cầu của mình

Random số điện thoại

const prefixes = ['03', '05', '07', '08', '09'];
const randomPrefix = prefixes[Math.floor(Math.random() * prefixes.length)];
let phoneNumber = randomPrefix + Math.random().toString().slice(2, 10);
pm.environment.set("randomPhoneNumber", phoneNumber);
console.log("Random phone number:", phoneNumber);
Hàm random số điện thoại việt nam, sau đó set vào biến randomPhoneNumber

Random tên đầy đủ

const lastNames = ["Nguyễn", "Trần", "Lê", "Phạm", "Hoàng", "Huỳnh", "Phan", "Vũ", "Võ", "Đặng", "Bùi", "Đỗ", "Hồ", "Ngô", "Dương", "Lý", "Đào", "Đoàn", "Đinh", "Lương"];
const firstNames = ["An", "Bình", "Châu", "Duy", "Giang", "Hải", "Hà", "Hạnh", "Hiếu", "Hoàng", "Huy", "Khoa", "Lan", "Linh", "Long", "Minh", "Nam", "Nga", "Nhi", "Như", "Phong", "Phương", "Quân", "Quốc", "Sơn", "Thảo", "Thành", "Thu", "Thủy", "Tiến", "Trang", "Trung", "Tùng", "Tú", "Tuấn", "Uyên", "Vân", "Việt", "Xuân", "Yến"];

function generateRandomFullName() {
    const randomLastNameIndex = Math.floor(Math.random() * lastNames.length);
    const randomFirstNameIndex = Math.floor(Math.random() * firstNames.length);
    const fullName = lastNames[randomLastNameIndex] + " " + firstNames[randomFirstNameIndex];
    return fullName;
}
const randomFullName = generateRandomFullName();
pm.environment.set("randomFullName", randomFullName);
console.log("Random full name:", randomFullName);
Hàm random tên đầy đủ việt nam

Random email

const domains = ["gmail.com", "yahoo.com", "hotmail.com", "outlook.com", "icloud.com", "aol.com", "protonmail.com", "mail.com", "zoho.com", "yandex.com"];
function generateRandomEmail() {
    const randomUsername = Math.random().toString(36).substring(7);
    const randomDomain = domains[Math.floor(Math.random() * domains.length)]; 
    const email = randomUsername + "@" + randomDomain;
    return email;
}
const randomEmail = generateRandomEmail();
console.log("Random email:", randomEmail);
pm.environment.set("randomEmail", randomEmail);
Hàm random email

Random giới tính

function generateRandomGender() {
    const genders = ["MALE", "FEMALE", "OTHER"];
    const randomIndex = Math.floor(Math.random() * genders.length);
    const randomGender = genders[randomIndex];
    return randomGender;
}
const randomGender = generateRandomGender();
pm.environment.set("randomGender", randomGender);
console.log("Random gender:", randomGender);
Hàm random giới tín

Các bạn có thể sử dụng lại luôn những script trên hoặc tối ưu lại theo nhu cầu thực của bản thân cũng được.

Viết script để lấy data từ response, truyền sang các api khác

Bây giờ sau khi có được kết quả từ API xong, các bạn lại muốn ném một vài giá trị từ response api A sang request body hoặc request param của api B, C, D, E gì đó nữa để gọi tiếp, nhưng không muốn copy thủ công bằng tay vì nó rất mệt.

Cách hữu hiệu nhất là viết ra những hàm để extract dữ liệu từ response, sau đấy truyền kết quả giá trị đã extract này vào những biến tham số, rồi sử dụng những biến tham số này trên những API cần gọi tiếp là được.

Một vài usecase các bạn có thể hay sử dụng như là:

Lấy access token từ api login

Ví dụ bên dưới là chuỗi json kết quả sau khi thực hiện gọi api login:

{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMzjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE1MTYyMzkwMjIsInJvbGUiOiJ1c2VyIn0.DeOXN2oxXntRklB5A9IMop0EXo-qYpBJE7Je9y06X5o",
    "token_type": "Bearer",
    "expires_in": 3600,
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJlreHAiOjE1MTYyMzkwMjIsInJvbGUiOiJ1c2VyIn0.S8EoXZBk7oG3K9TThlTMyhYO2XvE7YlzzI6xgJgrXhg",
    "scope": "read write",
    "user_id": "1234567890"
}

Giờ các bạn sẽ cần viết hàm để lấy giá trị access_token kia và đưa vào những api khác để gọi

Vào tab Tests trong postman để viết script như bên dưới

console.log('Request:'+ pm.request.body.toString())
var jsonData = pm.response.json();
var accessToken = jsonData.access_token;
pm.environment.set("accessToken", accessToken);
console.log('Token:'+ accessToken)

Lúc này giá trị access_token từ api login đã được truyền vào biến accessToken rồi, các bạn chỉ cần lấy ra mà dùng thôi

lấy biến accessToken ra để sử dụng

Lấy một mảng danh sách dữ liệu

Các bạn cứ thử hình dung, nếu cần phải test qua 7, 8 cái api liên tục, mỗi api lại cần dữ liệu từ api trước, lúc đó mà phải thủ công thay đổi từng dữ liệu truyền vào thì đúng là một cực hình.

Chỗ này sau khi gọi API đầu tiên thành công, mình có được một mảng giá trị, bây giờ nhu cầu là cần lấy ra danh sách kết quả theo trường code, sau đấy đem mảng kết quả này truyền vào API thứ hai, các bạn triển khai như sau

Giả sử chuỗi json bên dưới là kết quả khi gọi api

{
    "data": [
        {
            "id": 1,
            "code": "org001",
            "name": "Organization A",
            "status": "ACTIVE"
        },
        {
            "id": 2,
            "code": "org002",
            "name": "Organization B",
            "status": "ACTIVE"
        },
        {
            "id": 3,
            "code": "org003",
            "name": "Organization C",
            "status": "INACTIVE"
        }
    ]
}

Các bạn cũng vào tab Tests để viết script js như bên dưới:

let responseData = pm.response.json().data;
if (Array.isArray(responseData)) {
    let codes = [];
    responseData.forEach(item => {
        if (item && item.hasOwnProperty("code")) {
            codes.push(item.code);
        }
    });
    pm.globals.set("envSegments", JSON.stringify(codes));
    console.log("Size envSegments: "+codes.length);
    console.log("envSegments: " + JSON.stringify(codes));
} else {
    console.log("Trường data không phải là một mảng.");
}
lấy giá trị code từ response api và truyền vào biến envSegments

Và giờ ở những api cần sử dụng các bạn lấy ra dùng tương tự như những phần trên thôi, dưới đây là mẫu một đoạn request body mà mình sử dụng, xin phép không share full request body mà chỉ dừng lại ở đoạn sử dụng biến thôi nhé các bạn.

Sử dụng biến envSegments trong postman

Xem thêm một số bài viết nổi bật khác bên dưới: