Bài viết dựa trên 1 lần support trực tiếp cho học viên sử dụng postman script.
Trước đây mình đã viết 1 bài về việc postman đọc file CSV để làm data-driven test rồi, tuy nhiên bài này sẽ nói về 1 use case hoàn toàn khác. Đó là read file csv để dùng nội dung của cả file CSV này build body cho 1 request mà thôi. Ví dụ:
{ "BatchNo": "200", "Details": [ { "username": "user1", "password": "user_1_ex", "source": "external" }, { "username": "user2", "password": "user_2_ex", "source": "external" }, { "username": "user3", "password": "user_3_in", "source": "internal" } ] }
Trong json này, ta có một array các object, trong mỗi object lại có value khác nhau và những value đó mình lại đang đặt trong 1 file data dạng excel hoặc csv. Hoặc object có rất nhiều key-value khác nhau, chúng ta quá mệt để đặt biến thì đây là 1 giải pháp nhanh gọn hơn.
let parse = require('csv-parse/lib/sync'); const input = ` username,password,source user1,user_1_ex,external user2,user_2_ex,external user3,user_3_in,internal `.trim(); const options = { columns: true }; const records = parse(input, options); let json = JSON.stringify(records); pm.variables.set("json", json);
Nội dung bài viết
Step 1: Import library
let parse = require('csv-parse/lib/sync');
Đây là library mà postman có sử dụng, nên mình chỉ cần lấy ra xài thôi, không cần làm gì thêm. Thư viện này sẽ giúp chuyển đổi (parse) từ định dạng csv sang array cho chúng ta.
Step 2: Điền data định dạng file CSV
Mình assume rằng bạn đã có list data dạng CSV này rồi.
const input = ` username,password,source user1,user_1_ex,external user2,user_2_ex,external user3,user_3_in,internal `.trim();
Lưu ý:
- Tên của header sẽ chính là tên của json key mà chúng ta muốn luôn.
- Mình khai báo 1 biến data type là String và dùng method
trim()
để xóa khoảng trắng trước và sau. Có thể bạn không biết khoảng trắng đó đâu, thì nó đây.
Step 3: Parse input thành array.
const options = { columns: true }; const records = parse(input, options);
Mình chỉ cần dùng method parse()
với 2 parameters:
- Input
- Options: các settings mà chúng ta muốn function parse làm theo. Ở trong ví dụ này, mình chỉ dùng 1 setting duy nhất.
columns: true
thể hiện rằng: data ở đây là kiểu column. Ngoài kiểu column ra thì mình còn 1 kiểu khác, mà chúng ta sẽ theo dõi ở phía sau.
Bạn hoàn toàn có thể viết dạng này luôn:
const records = parse(input, { columns: true });
Step 4: Save output vào biến
let json = JSON.stringify(records); pm.variables.set("json", json);
Vì records
là array nên chúng ta cần biến nó thành String trước khi cho vào json body.
Step 5: Setup request body và xem kết quả
Câu hỏi đặt ra là options
kia có bao nhiêu settings và mỗi settings thì làm việc gì?
Nó có rất nhiều settings tuy nhiên nó lại không có document nào cả, chỉ có các examples. Bạn xem list này và tìm đến các file mà có chữ option.xxxx...
ấy.
Mình đã đọc hết 1 lượt thì không phải cái nào mà cũng hữu dụng và cần thiết nên mình không viết ra ở đây. Nếu bạn gặp vấn đề khi sử dụng csv-parse
này hoặc muốn biết về option nào đó, bạn có thể ping mình.
Vậy thôi, xin chào các bạn. Have a great day. ^^
Hi anh, ví dụ password bắt buộc phải kiểu number, source là kiểu boolean thì mình sẽ làm như nào anh?
Good question, anh sẽ update trường hợp đó khi có thời gian rảnh. Thank you
Hi em, anh đã thử option
cast
mà thư viện này nhắc đến. Nó works trên nodejs project nhưng nó lại không works trên postman. Chốt lại, em phải code tay để convert data type hoặc điền trực tiếp data luôn.