بعد از ساخت dataset، میتوانید از آن در collection runها، local mock serverها و scriptهای Postman استفاده کنید. Dataset کمک میکند داده تست را یکبار نگه دارید و در چند workflow با داده ثابت، قابل query و قابل فیلتر کار کنید.
Dataset میتواند از فایل local، فایل cloud یا منبع زنده مثل دیتابیس تغذیه شود. Viewها هم داده را برای سناریوهای خاص فیلتر یا تبدیل میکنند.
استفاده از dataset در collection run #
در collection run، هر ردیفی که view انتخابشده برمیگرداند به یک iteration تبدیل میشود. فیلدهای dataset به صورت متغیر در run در دسترس هستند و میتوانید از syntax مثل {{variableName}} در requestها استفاده کنید.
فرض کنید یک dataset با data source محلی CSV دارید:
userId,email,name
1,user1@example.com,User One
2,user2@example.com,User Two
3,user3@example.com,User Three
4,user4@example.com,User Four
در request میتوانید از فیلدها به صورت variable استفاده کنید:
GET /user?userId={{userId}}&email={{email}}&name={{name}}
در pre-request یا post-response script هم مقدار iteration فعلی از طریق pm.iterationData در دسترس است:
console.log(pm.iterationData.get("email"));
اگر در script به داده بیشتری از dataset نیاز دارید، میتوانید از pm.datasets استفاده کنید:
const ds = pm.datasets("users-dataset-id");
const result = await ds.executeQuery(
"SELECT * FROM users WHERE email = ?",
[pm.iterationData.get("email")]
);
const allRows = [];
for await (const row of result.rows) {
allRows.push(row);
}
console.log(JSON.stringify(allRows));
برای اجرای collection با dataset:
- از Items وارد Collections شوید و collection را انتخاب کنید.
- در requestها از variableهایی با نام فیلدهای dataset استفاده کنید.
- روی Run کلیک کنید.
- Run manually را انتخاب کنید.
- در بخش Dataset، dataset و view موردنظر را انتخاب کنید.
- در صورت نیاز، از تب Data پیشنمایش داده را ببینید.
- Start run را بزنید.
در زمان اجرا، Postman مقدارهای هر ردیف view را به variableها اختصاص میدهد. اگر از pm.datasets استفاده میکنید، نتیجه query به صورت async iterable برمیگردد؛ بنابراین برای خواندن ردیفها از for await...of استفاده کنید.
استفاده از dataset در mock server #
در local mock server میتوانید از pm.datasets برای ساخت پاسخهای پویا استفاده کنید. به جای پاسخ static، mock server میتواند داده را query کند و بر اساس request پاسخ مناسب برگرداند.
نمونه داده CSV:
userId,email,name
1,user1@example.com,User One
2,user2@example.com,User Two
3,user3@example.com,User Three
4,user4@example.com,User Four
نمونه پیادهسازی local mock server:
const http = require("http");
const url = require("url");
const PORT = process.env.PORT || 4500;
const server = http.createServer(async (req, res) => {
const { method } = req;
const { pathname, query } = url.parse(req.url, true);
// @endpoint GET /user
if (method === "GET" && pathname === "/user") {
const ds = pm.datasets("users-dataset-id");
const result = await ds.executeQuery(
"SELECT userId, email, name FROM users WHERE userId = ?",
[query.userId]
);
const allRows = [];
for await (const row of result.rows) {
allRows.push(row);
}
if (allRows.length === 0) {
res.writeHead(404, { "Content-Type": "application/json" });
return res.end(JSON.stringify({ error: "User not found" }));
}
res.writeHead(200, { "Content-Type": "application/json" });
return res.end(JSON.stringify(allRows[0]));
}
res.writeHead(404, { "Content-Type": "application/json" });
res.end(JSON.stringify({ error: "Endpoint not defined" }));
});
server.listen(PORT, () => {
console.log(`Mock server running on port ${PORT}`);
});
برای تست، یک request مثل زیر بفرستید:
http://localhost:4500/user?userId=2
Mock server هنگام دریافت request، dataset را query میکند و ردیف مطابق را به عنوان response برمیگرداند. برای queryهای قابل استفاده مجدد، میتوانید به جای query مستقیم از executeView() استفاده کنید.
استفاده از dataset در scriptها #
در pre-request و post-response scriptها میتوانید پاسخ API را با داده قابل query در dataset مقایسه کنید. این روش برای اعتبارسنجی response با داده مورد انتظار کاربرد دارد.
نمونه request:
GET /user?userId=2
نمونه post-response script:
const ds = pm.datasets("users-dataset-id");
const responseJson = pm.response.json();
const result = await ds.executeQuery(
"SELECT userId, email, name FROM users WHERE userId = ?",
[responseJson.userId]
);
const allRows = [];
for await (const row of result.rows) {
allRows.push(row);
}
pm.test("Response matches dataset", function () {
pm.expect(allRows.length).to.eql(1);
pm.expect(responseJson.email).to.eql(allRows[0].email);
pm.expect(responseJson.name).to.eql(allRows[0].name);
});
وقتی request اجرا میشود، script داده matching را از dataset میخواند و response را با آن مقایسه میکند. خروجی query هم مثل نمونههای قبل async iterable است.
منبع آموزشی: Postman Docs، بازنویسی و سادهسازیشده برای کاربران فارسیزبان.

