Cách Truyền Dữ Liệu Giữa Các Bước Kiểm Thử Trong Apidog

Oliver Kingsley

Oliver Kingsley

6 tháng 8 2025

Cách Truyền Dữ Liệu Giữa Các Bước Kiểm Thử Trong Apidog

Khi thiết kế quy trình kiểm thử tự động trong Apidog, bạn sẽ sử dụng nhiều loại bước kiểm thử khác nhau—như yêu cầu API, truy vấn cơ sở dữ liệu, vòng lặp For, vòng lặp ForEach, Scripts, và nhiều hơn nữa.

các loại bước kiểm thử

Thông thường, dữ liệu được tạo ra ở một bước cần được sử dụng ở bước sau. Điều này tạo ra một luồng logic trong đó dữ liệu thúc đẩy quá trình, và các bước được liên kết với nhau.

Ví dụ, bạn có thể:

Điều này đặt ra một câu hỏi quan trọng:

Làm thế nào để bạn có thể tham chiếu chính xác dữ liệu từ các bước trước (upstream) trong các bước tiếp theo (downstream)?

Hai cơ chế truyền dữ liệu trong Apidog

Trong kiểm thử tự động của Apidog, có hai phương pháp chính để truyền dữ liệu giữa các bước kiểm thử khác nhau:

1. Truy xuất dữ liệu bước trước thông qua "Giá trị động"

Bạn có thể trực tiếp tham chiếu đầu ra của một bước trước (upstream) trong một bước sau (downstream) bằng cách sử dụng tính năng "Giá trị động". Điều này cho phép bạn lấy dữ liệu ngay lập tức mà không cần lưu trữ.

Truy xuất dữ liệu bước trước thông qua "Giá trị động" trong kiểm thử tự động Apidog

2. Lưu trữ biến và tái sử dụng

Bạn có thể trích xuất dữ liệu quan trọng từ một bước upstream và lưu trữ nó dưới dạng biến. Các biến này sau đó có thể được tái sử dụng trong bất kỳ bước nào tiếp theo.

Nắm vững hai phương pháp truyền dữ liệu này là chìa khóa để xây dựng các quy trình làm việc tự động hiệu quả, dựa trên dữ liệu trong Apidog.

Bài viết này giải thích cách xử lý dữ liệu trong các loại bước kiểm thử khác nhau từ hai góc độ: cách trích xuất dữ liệucách sử dụng nó. Bằng cách hiểu cả hai, bạn sẽ có thể xây dựng các quy trình kiểm thử linh hoạt hơn và kết nối tốt hơn.

Trích xuất và sử dụng dữ liệu phản hồi điểm cuối

Hiểu dữ liệu phản hồi điểm cuối

Trong kiểm thử tự động, các yêu cầu API thường trả về các phản hồi JSON có cấu trúc, thường đóng vai trò là đầu vào cho các bước kiểm thử sau này.

Không giống như các loại bước khác, phản hồi điểm cuối có xu hướng phức tạp hơn — thường xuyên bao gồm các đối tượng và mảng lồng nhau.

Cách trích xuất dữ liệu từ phản hồi điểm cuối

Có hai cách chính để trích xuất và truyền dữ liệu phản hồi điểm cuối giữa các bước kiểm thử:

Phương pháp một: Tham chiếu giá trị động

Sử dụng "Giá trị động" để trực tiếp tham chiếu dữ liệu từ các bước trước:

Phương pháp hai: Trích xuất dữ liệu dưới dạng biến

Bạn cũng có thể sử dụng tính năng "Trích xuất biến" trong bộ xử lý hậu kỳ điểm cuối để trích xuất các trường cụ thể từ phản hồi dưới dạng biến.

Ví dụ, để trích xuất id của các sản phẩm trong một phản hồi:

Trong các bước sau, chỉ cần tham chiếu nó bằng cách sử dụng {{products_id}}.

Cách sử dụng dữ liệu được trích xuất từ phản hồi điểm cuối

Sau khi bạn đã trích xuất dữ liệu từ phản hồi API—bằng cách sử dụng "Giá trị động" hoặc "Biến được trích xuất"—bạn có thể sử dụng dữ liệu đó trong các bước downstream theo nhiều cách:

1. Sử dụng dữ liệu trong yêu cầu điểm cuối

Sử dụng dữ liệu đã trích xuất trong các yêu cầu API

2. Sử dụng dữ liệu trong các thao tác cơ sở dữ liệu

Bạn có thể sử dụng phản hồi API làm đầu vào trong một truy vấn cơ sở dữ liệu. Cả hai phương pháp đều hoạt động:

SELECT * FROM products WHERE id = '{{$.1.response.body.products[0].id}}'

Sử dụng giá trị động để tham chiếu dữ liệu phản hồi API trực tiếp trong truy vấn SQL:

SELECT * FROM products WHERE id = '{{products_id}}'

3. Sử dụng dữ liệu trong Vòng lặp For

Để lặp lại các bước dựa trên độ dài của một mảng từ phản hồi API:

{{$.1.response.body.products.length}}

Điều này đặt số lần lặp của vòng lặp.

Sử dụng dữ liệu trong vòng lặp For

4. Sử dụng dữ liệu trong Vòng lặp ForEach

Nếu bạn muốn lặp qua từng mục trong một mảng được trả về bởi một điểm cuối:

Sử dụng dữ liệu trong vòng lặp ForEach thông qua phương pháp giá trị động

5. Sử dụng dữ liệu trong scripts

Để sử dụng dữ liệu từ các bước trước bên trong một script, hãy sử dụng phương thức pm.variables.get(). Cách thực hiện như sau:

const products = pm.variables.get("$.1.response.body.products")
Sử dụng dữ liệu trong Scripts thông qua phương pháp giá trị động

Lấy giá trị của một biến tạm thời:

const products = pm.variables.get("products") 

Lấy giá trị của một biến môi trường:

const products = pm.environment.get("products") 

Lấy giá trị của một biến toàn cục:

const products = pm.globals.get("products")
💡
Trong scripts, bạn không thể sử dụng trực tiếp cú pháp nội suy như {{products}}. Thay vào đó, bạn phải truy xuất giá trị biến bằng cách sử dụng các phương thức thích hợp đã đề cập ở trên.

Trích xuất và sử dụng kết quả truy vấn cơ sở dữ liệu

Hiểu dữ liệu cơ sở dữ liệu

Khi một bước truy vấn cơ sở dữ liệu được thực thi, nó trả về dữ liệu có cấu trúc dưới dạng một mảng các đối tượng. Ngay cả khi chỉ có một bản ghi được trả về, nó vẫn sẽ được gói trong một mảng. Ví dụ:

kết quả truy vấn cơ sở dữ liệu trong Apidog

Không giống như phản hồi điểm cuối, dữ liệu từ các bước cơ sở dữ liệu không thể được truy cập trực tiếp bằng các biến động. Bạn phải trích xuất các giá trị vào biến trước.

Cách trích xuất dữ liệu từ cơ sở dữ liệu

Sau khi chạy truy vấn SQL trong một bước cơ sở dữ liệu, Apidog sẽ tự động phân tích phản hồi thành dữ liệu có cấu trúc, như sau:

[
  {
    "id": "1000",
    "title": "Title 1",
    "description": "Description for Title 1"
  }
]

Sau đó, bạn có thể sử dụng JSONPath để trích xuất các trường cụ thể và lưu chúng dưới dạng biến.

Ví dụ:

sử dụng JSONPath để trích xuất các trường cụ thể và lưu chúng dưới dạng biến

Cách sử dụng dữ liệu được trích xuất từ cơ sở dữ liệu

1. Sử dụng dữ liệu trong yêu cầu điểm cuối

Nếu truy vấn cơ sở dữ liệu của bạn trả về một ID và bạn đã lưu nó dưới dạng biến (products_id), bạn có thể trực tiếp sử dụng nó trong một yêu cầu điểm cuối downstream:

sử dụng dữ liệu được trích xuất từ cơ sở dữ liệu trong các yêu cầu điểm cuối

2. Sử dụng dữ liệu trong Vòng lặp ForEach

Nếu truy vấn của bạn trả về một danh sách các bản ghi, và bạn muốn xử lý từng bản ghi một cách riêng lẻ, bạn có thể sử dụng toàn bộ mảng làm nguồn cho một vòng lặp ForEach:

Tiền đề là bạn lưu toàn bộ mảng khi trích xuất biến trong các thao tác cơ sở dữ liệu, ví dụ:

3. Sử dụng dữ liệu trong scripts

Để sử dụng các biến cơ sở dữ liệu đã trích xuất trong một script, hãy sử dụng cùng phương pháp như với các biến khác.

Lấy giá trị của một biến tạm thời:

const products = pm.variables.get("products")

Lấy giá trị của một biến môi trường:

const products = pm.environment.get("products")

Lấy giá trị của một biến toàn cục:

const products = pm.globals.get("products")

Trích xuất và sử dụng dữ liệu từ Vòng lặp For

Vòng lặp For hoạt động như thế nào?

Một Vòng lặp For được sử dụng để lặp lại một tập hợp hành động cụ thể nhiều lần. Nó chạy dựa trên một số lần lặp được xác định.

Bạn có thể đặt số lần lặp cố định, hoặc sử dụng một giá trị động như độ dài của một mảng .length được trả về từ một bước trước. Ví dụ:  {{$.1.response.body.products.length}}:

Lưu ý: Không giống như các bước khác xuất dữ liệu, một Vòng lặp For bản thân nó không trực tiếp trả về dữ liệu. Nó chỉ cung cấp một giá trị chỉ mục (bắt đầu từ 0) để hiển thị số lần vòng lặp đã được thực thi.

Cách trích xuất dữ liệu từ Vòng lặp For

Trong quá trình thực thi, bạn có thể truy cập chỉ mục vòng lặp hiện tại bằng cú pháp biến động: {{$.9.index}}

Cách sử dụng dữ liệu được trích xuất từ Vòng lặp For

1. Sử dụng dữ liệu trong scripts

Nếu bạn muốn sử dụng thông tin liên quan đến vòng lặp trong test script của mình, bạn có thể sử dụng pm.variables.get() để lấy chỉ mục hiện tại:

// Get the current loop index
const index = pm.variables.get("$.7.index");
Sử dụng dữ liệu vòng lặp For đã trích xuất trong scripts

2. Sử dụng dữ liệu với các nguồn dữ liệu khác

Một trường hợp sử dụng phổ biến cho Vòng lặp For là xử lý dữ liệu từ các bước trước—như lặp qua một mảng và xử lý từng mục:

// Get the array from a previous step
const products = pm.variables.get("$.1.response.body.products");

// Get the current loop index
const index = pm.variables.get("$.7.index");

// Access the current item in the array using the index
console.log(products[index]);

Điều này cho phép bạn thực hiện các thao tác hàng loạt trên mỗi mục trong mảng trong mỗi lần lặp vòng lặp.

Trích xuất và sử dụng dữ liệu từ Vòng lặp ForEach

Vòng lặp ForEach hoạt động như thế nào?

Vòng lặp ForEach được thiết kế đặc biệt cho dữ liệu mảng. Nó tự động lặp qua từng phần tử trong mảng và thực hiện cùng một tập hợp các thao tác.

Sự khác biệt chính giữa Vòng lặp ForEachVòng lặp ForVòng lặp ForEach tự động trích xuất toàn bộ dữ liệu của phần tử mảng hiện tại trong mỗi lần lặp, giúp nó có thể truy cập trực tiếp trong các bước con của nó.

Truy cập dữ liệu trong Vòng lặp ForEach

Trong một Vòng lặp ForEach, hệ thống tự động tạo ra hai biến đặc biệt:

Lưu ý: Số 4 đề cập đến ID của bước Vòng lặp ForEach. Trong quy trình làm việc thực tế của bạn, hãy thay thế điều này bằng ID bước chính xác từ quy trình của bạn.

Các trường hợp sử dụng phổ biến cho dữ liệu Vòng lặp ForEach

1. Sử dụng dữ liệu trong yêu cầu điểm cuối

Vòng lặp ForEach rất phù hợp để xử lý các thao tác dữ liệu hàng loạt. Ví dụ, nếu bạn có một mảng các mục, bạn có thể tự động gửi yêu cầu điểm cuối cho mỗi mục trong mảng. Trong mỗi vòng lặp, cùng một mẫu yêu cầu được tái sử dụng, nhưng được điền với dữ liệu khác nhau, chẳng hạn như {{$.4.element.id}}.

2. Sử dụng dữ liệu trong các thao tác cơ sở dữ liệu

Bạn có thể sử dụng dữ liệu từ mục vòng lặp hiện tại để chạy truy vấn cơ sở dữ liệu hoặc chèn nhiều hàng.

Ví dụ: Truy vấn cơ sở dữ liệu bằng cách sử dụng trường của mục hiện tại

SELECT * FROM products WHERE id = '{{$.4.element.id}}' 

Biểu thức {{$.4.element.id}} có thể được truy cập bằng tính năng giá trị động.

Chèn nhiều trường từ mục hiện tại vào một bảng:

INSERT INTO products (id, title) VALUES ('{{$.4.element.id}}', '{{$.4.element.title}}') 

3. Sử dụng dữ liệu trong scripts

Nếu bạn cần xử lý thêm dữ liệu từ vòng lặp trong một script tùy chỉnh, bạn có thể sử dụng phương thức pm.variables.get() để truy xuất các giá trị:

// Get the current element
const item = pm.variables.get("$.4.element");

// Get the current index
const index = pm.variables.get("$.4.index");

Trích xuất và sử dụng dữ liệu từ Scripts

Dữ liệu Script hoạt động như thế nào

Không giống như các bước khác trong một quy trình làm việc, scripts không tự động tạo ra đầu ra có thể được sử dụng trực tiếp trong các bước tiếp theo. Nếu bạn muốn truyền dữ liệu từ một script sang các bước sau, bạn phải lưu trữ thủ công nó trong một biến.

Cách trích xuất dữ liệu từ một Script

Bạn có thể lưu các giá trị vào các loại biến khác nhau như sau:

// Get JSON response data
// 1. From the current endpoint response
// const currentData = pm.response.json();

// 2. Or get it from a previous step using a dynamic value
const preData = pm.variables.get("$.1.response.body");

// Save to environment variables
pm.environment.set('products', preData.products);
pm.environment.set('products_id', preData.products[0].id);

// Save to global variables
pm.globals.set('products', preData.products);

// Save to temporary variables (valid only during this run)
pm.variables.set('products', preData.products);

Khi các biến đã được trích xuất và thiết lập, bạn có thể tham chiếu chúng trong các bước sau bằng cách sử dụng cú pháp {{variableName}}.

Cách sử dụng dữ liệu được trích xuất từ Scripts

1. Sử dụng dữ liệu trong yêu cầu điểm cuối

Các biến được đặt trong một script có thể được sử dụng trực tiếp làm tham số trong các yêu cầu điểm cuối downstream. Ví dụ, nếu bạn lưu products_id trong script, bạn có thể tham chiếu nó trong một yêu cầu sau này như sau: {{products_id}}.

Sử dụng dữ liệu đã trích xuất trong các yêu cầu API

2. Sử dụng dữ liệu trong các thao tác cơ sở dữ liệu

Các biến script cũng có thể được sử dụng để xây dựng các câu lệnh SQL động. Ví dụ:

SELECT * FROM products WHERE id = '{{products_id}}'

3. Sử dụng dữ liệu trong Vòng lặp For

Bạn có thể sử dụng một script để tạo số lần lặp hoặc các giá trị trung gian khác, lưu chúng dưới dạng "biến tạm thời", và truyền chúng đến bước Vòng lặp For:

pm.variables.set("loopCount", 5); 

Sau đó, trong cài đặt vòng lặp, sử dụng {{loopCount}} làm số lần lặp.

4. Sử dụng dữ liệu trong Vòng lặp ForEach

Bạn có thể lưu trữ toàn bộ một mảng trong một biến và sử dụng nó làm nguồn dữ liệu cho một Vòng lặp ForEach.

Ví dụ:

// Optionally retrieve array from a previous step using dynamic values
// const preData = pm.variables.get("$.1.response.body.products")

const preData = [{id: 1}, {id: 2}, {id: 3}];

// Save to environment variable
pm.environment.set('products', preData);

Sau đó, trong Vòng lặp ForEach, đặt nguồn dữ liệu thành {{products}}.

Kết luận

Để xây dựng một quy trình kiểm thử tự động hiệu quả, điều cần thiết là phải hiểu cách trích xuất và sử dụng dữ liệu từ các loại bước khác nhau:

Bằng cách kết hợp tham chiếu giá trị động với trích xuất biến, bạn có thể thiết kế một quy trình kiểm thử linh hoạt và mạnh mẽ dựa trên dữ liệu.

Các phương pháp hay nhất để truyền dữ liệu:

Việc chọn phương pháp phù hợp dựa trên độ phức tạp của dữ liệu và tần suất sử dụng sẽ giúp quy trình làm việc của bạn dễ bảo trì và hiệu quả hơn.

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API