API Testing với Postman (Phần 9) – Test Response

Test response là tính năng đặc biệt quan trọng với những người test API. Làm sao có thể suốt ngày run từng cái request rồi check từng kết quả trả về một cách thủ công được, phải có cách gì nhanh hơn chứ 😀

Phần này cung cấp 2 tính năng cực hay giúp người test đẩy nhanh được tốc độ test API.

  1. Check tự động kết quả trả về của từng field với 1, 2 dòng code, rất dễ, không cần biết code cũng làm được.
  2. Lưu giá trị của Response thành biến trong Environment để tiếp tục truyền vào param của API tiếp theo.

Postman cung cấp một khung làm việc để ta có thể làm việc, chỉ hỗ trợ ngôn ngữ Javascript thuần, không hỗ trợ jquery hay các thứ khác nhé. Và nó không có chế độ debug hay có console đâu. 😀 → Nếu muốn biết chắc code mình chạy đúng, hãy viết trước ở ngoài nhé.

Phần ở bên phải là tập hợp những cú pháp Postman cung cấp sẵn cho người dùng, khỏi cần phải nghĩ. Ok vào bài toán cụ thể nhé.

Bài toán 1: Tôi có 1 API login, tôi muốn biết là sau khi login vào xong, user_id của tôi trả về có đúng hay không.

  • Bước 1: Chạy thử API 1 lần để lấy được cấu trúc Response của API.

Ta có thể thấy user_id nằm ở vị trí: root > data > user > profile > id và trong trường hợp này id của user này là 401.

  • Bước 2: Viết Test

Code:

var jsonData = pm.response.json();
pm.test("Check user_id", function () {
   pm.expect(jsonData.data.user.profile.id).to.eql(401);
});

1: Parse cái Reponse trả về và lưu vào biến “jsonData” → cái này chính là root đã viết ở trên.

2: Test xem user_id có bằng 401 không.
Cách lấy giá trị hoàn toàn giống như trong Javascript thôi.

  • Bước 3: Sau khi viết xong Test thì các bạn run Request lại rồi ngó xem phần Test của mình có đúng không.

Theo kết quả thì Test của mình đang Fail, á đù, mình viết đúng rồi mà nhỉ. 🙁

Đây là điểm mà các bạn mới làm sẽ hay gặp, đó là vấn đề ngay tại cái công cụ giúp mình test. Trong trường hợp này, đó là giá trị trả về nó là 1 String, mình không thể so sánh String và Int được. Hãy ngó lại cái ảnh phía trên, bạn sẽ thấy id là “401”, ta chỉ cần thêm dấu nháy kép vào lại phần test của mình là xong.

var jsonData = pm.response.json();
pm.test("Check user_id", function () {
   pm.expect(jsonData.data.user.profile.id).to.eql("401");
});

Bài toán 2: Tôi có 1 API login, sau khi login tôi muốn lưu lại giá trị của token để làm data cho những API tiếp theo.

Vẫn dùng ví dụ ở trên, ta sẽ thấy vị trí của token là: root > data > token.

Ta sẽ viết thêm 1 code vào phía dưới 2 dòng code mình đã viết ở trên:

var jsonData = pm.response.json();
pm.test("Check user_id", function () {
  pm.expect(jsonData.data.user.profile.id).to.eql("401");
});
pm.environment.set("token", jsonData.data.token);

Sau đó, ta chỉ run lại rồi kiểm tra trong Environment thôi.

Khi đã lưu được biến vào trong Environment rồi thì phần gán biến vào request sẽ giống với phần mình đã hướng dẫn ở bài trước.

Vậy thôi, phần sử dụng Test của Postman chỉ đơn giản thế thôi. Mình biết là 1 bài thì không thể nói hết được, nhưng mà cũng xử lý được 2 phần quan trọng. Nếu làm theo mà có vướng mắc thì hãy để lại comment nhé.

5 4 votes
Article Rating
Subscribe
Notify of
guest
54 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback

[…] ← Previous Next → […]

Anh Nguyen
Anh Nguyen
7 years ago

Bài viết hay lắm anh. Cảm ơn anh

Thảo Demi
Thảo Demi
5 years ago
Reply to  Giang Nguyen

Em còn không biết viết câu lệnh test api 🙁

Hoa công tử
Hoa công tử
7 years ago

Anh ơi, em confirm chỗ này ạ.
Em có 2 api là A và B. Sau khi lấy được respose từ A thì gán biến thế nào vào B được ạ

Hoa công tử
Hoa công tử
7 years ago
Reply to  Giang Nguyen

thanks anh, em hiểu rồi ạ (y)

Hoa công tử
Hoa công tử
7 years ago

Với token luôn thay đổi ở mỗi lần nhảy vào một page thì việc gán Test như trên sẽ thế nào ạ? Nếu token là 1 chuỗi varchar quá dài thì postman sẽ cắt kí tự, nó thông báo như hình này: http://prntscr.com/hbitij ==>có cách nào resolve không ạ

trackback

[…] trả lại thông tin, gọi là response, về lại cho client thông báo rằng nó đã cập nhật thành […]

Loey
Loey
6 years ago

Anh ơi, anh giúp em cái này với ạ.
Ví dụ: em có 1 api token trả về body như thế này:
{
“errorCode”: 0,
“data”: {
“value”: “abcZYw…i”
},
“errorMsg”: null
}
Value của api token sẽ gán vào header có param và value lần lượt như sau:
Authorization: SyncFC {{value}}
Em đã viết vào phần Test trong api token như sau:
var jsonData = pm.response.json();
pm.environment.set(“token”, jsonData.data.value);
Và nhấn buttton Send trong postman. Nó báo error như sau ạ:
http://prntscr.com/iwceac
==>fix thế nào để gán token vào environment thành công ạ

loey
loey
6 years ago
Reply to  Giang Nguyen

oki rùi ạ, em cảm ơn anh ^^!

HannaLee
HannaLee
6 years ago

Hi anh, em có làm theo steps của anh, mà tại em chưa test API nên cũng chưa có url cụ tỉ, có mấy cái url local anh đang làm í, thì em có thể config ntn để có thế làm theo guilde như mấy series này của anh ạ :). Thanks

AnhDK
AnhDK
6 years ago
Reply to  Giang Nguyen

Hi anh, e cũng đang lần mò học test API. Thử link trên thì họ đang yêu cầu quyền truy cập rồi ạ. Anh có tài liệu nào để thực hành test thì cho e xin với nha.
Em cảm ơn a ạ 🙂

Giang
Giang
6 years ago

Bài viết rất ngắn gọn và bổ ích.
Em cảm ơn anh nhé.

trackback

[…] phần test, mình có nói ở bài 9 rồi nhưng có 1 vài điểm mọi người cần chú […]

Minh
Minh
6 years ago

Cho em hỏi là response trả về nhiều giá trị như vậy, ví dụ chuỗi json trả về có tầm 50 cái key thì mình phải check từng key hay có cách nào khác không ạ, với làm thế nào để mình đọc log của api đó để test không ạ?

Minh
Minh
6 years ago
Reply to  Giang Nguyen

Hi anh,

E cảm ơn ạ, nhưng do dự án e làm có case sẽ check hết toàn bộ các giá trị trả về nên e hơi rối.
Về log là ví dụ khi e call API, thì nó sẽ xử lý như sau:
-Xuất log “Start xử lý ABC”
– Tiến hành xử lý trong nội dung api, ví dụ lấy dữ liệu
– Xuất log “lấy dữ liệu ABC thành công”.
– Xuất log “kết thúc xử lý ABC”
– Return json
thì e muốn hỏi là kiểm tra nội dung file log sẽ có 3 message là “Start xử lý ABC”, “lấy dữ liệu ABC thành công” và “kết thúc xử lý ABC” ạ.
Cảm ơn anh.

trackback

[…] ý: Số Pass or Fail được tính trên số Test bạn viết, chứ ko tính trên số Request bạn […]

Le Dang
Le Dang
5 years ago

Chào anh ạ, cho em hỏi nếu em goi API mà trả về nhiều kết quả (ví dụ tìm kiếm trả vể kết quả: id = 1, string1; id = 2, string2…) và em muốn lấy hết tất cả id trả về gán vào Eviroment thì có cách nào không ạ?
Em cảm ơn ạ

Dang Quang Huy
Dang Quang Huy
5 years ago

url = 192.168.1.77 này chỉ để demo chứ ko chạy được , đúng ko Giang

trackback

[…] ở chỗ này khá dễ hiểu, nếu bạn thấy khó hiểu thì đọc lại bài 9. Nếu bạn vẫn có chỗ băn khoăn, hãy để lại comment. […]

Vũ Đình Đồng
Vũ Đình Đồng
5 years ago

Anh ơi nếu response trả về là một chuỗi object thì làm sao để lấy được giá trị ạ, em đang thử thì nếu response trả về 1 object thì lấy được nhưng nếu trả về nhiều object thì không lấy được
VD:
“code”: “200”,
“message”: “thành công”,
“result”: [
{
“id”: “1”,
“name”: “Test1”
},
{
“id”: “2”,
“name”: “Test2”
}
]

Script của em
var jsonData = JSON.parse(responseBody);
tests[“Pass”] = jsonData.code === “200”;
pm.environment.set(“Company_ID”, jsonData.result.id);

Vũ Đình Đồng
Vũ Đình Đồng
5 years ago
Reply to  Giang Nguyen

Em cám ơn ạ, em lấy được giá trị rồi.
Anh có link nào hướng dẫn cách extract response data theo điều kiện không ạ.
VD như cái của em post ở trên thì em muốn lấy ra name của object có id=2 để xử lý case khi mà mỗi lần response trả về thứ tự các bản ghi lại khác nhau ấy ạ

Vũ Đình Đồng
Vũ Đình Đồng
5 years ago
Reply to  Giang Nguyen

Vâng ạ, em cám ơn anh

Đào Mai
Đào Mai
3 years ago

Em cảm ơn anh nhiều về bài viết bổ ích.
Em đọc các bài trước của anh đã biết cách gửi request và tạo environment. Đến bài này bắt đầu khó hiểu với em quá vì e chỉ biết HTML, CSS cơ bản, e ko biết PHP hay code gì. Vậy e nên bắt đầu tìm hiểu từ đâu để có thể viết được test API ạ? Mong a đưa ra lời khuyên định hướng để e có thể học. Em cảm ơn a nhiều

dung
dung
3 years ago

a cho e hỏi case này với, kết quả response về như sau:
{
“result”: “success”,
“response_body”: {
“coreid__a”: “336”,
“name”: “dung4”,
“namekana__c”: “ユン4”,
}
}
e muốn lấy id (“coreid__a”) sau mỗi bài post set thành variable environment để set path variable key cho những put request tiếp theo thì cần setting như thế nào ạ?

Hảo Hồ
Hảo Hồ
2 years ago

hi anh… em có 1 cái token mà cứ sau 1 giờ thì nó lại đổi token thì giờ em muốn mỗi lần chạy collections thì nó tự get token lại thì sao ạ

Vy Nguyen
Vy Nguyen
2 years ago

Anh Giang ơi, em làm theo hướng dẫn đến bước lưu giá trị của response thì em gặp vấn đề là biến lưu response được thêm vào enviroment rồi nhưng giá trị là null. Mình xử lý sao ạ. Em cảm ơn anh

hoang ha
hoang ha
2 years ago

Cám ơn bài hướng dẫn của anh.
Em đang muốn kiểm tra case có trả về dư các parameter hay không
Do developer công ty em sử dụng cách select all rồi omit nên có trường hợp trả về dư parameter k được yêu cầu
Anh có biết cách để kiểm tra case này không ạ

hoang ha
hoang ha
2 years ago
Reply to  Giang Nguyen

em đã thử rồi nhưng nó không kiểm tra được trường hợp dư key-value ạ.

Bao Uyen
Bao Uyen
2 years ago

Anh Giang ơi, em áp dụng cách của anh để làm bài 1 nhưng báo lỗi, e chưa biết sai ở đâu, nhờ a chỉ giúp em với ạ, em cảm ơn anh nhiều

2022-11-20_10h18_12.png
NhanPT
NhanPT
10 months ago

dạ cảm ơn bài viết rất bổ ích ạ.
Cho em hỏi thêm một chút. Ví dụ: Khi call api follow thành công, muốn call api khác và check số lượt follow đúng không thì viết script như thế nào ạ (muốn check theo kiểu lấy số follow (số mà trước khi call api follow) + 1)

Duong
Duong
8 months ago

Mỗi lần gọi API post, thì sẽ tạo ra một id mới, mình có thắc mắc là lần sau call lại thì tạo record có id khác rồi, sao mà check lại dc là 401 nữa nhỉ?