CYBERSOFT
Đăng nhập

Kiểm thử API thủ công nâng cao bằng Postman: contract, biên, âm, phân quyền — dự án bệnh án điện tử (có trắc nghiệm)

Chuyên công nghệY tếNâng caoChuẩn SEO
🗓 1 tháng trước19 phút đọc·👁 180 lượt xem👤 46 người đọc

Bài nâng cao: kiểm thử API thủ công bằng Postman qua dự án bệnh án điện tử MediCare EHR — hợp đồng/schema response, mã trạng thái HTTP theo nghiệp vụ, biên tham số phân trang/ID, dữ liệu âm cho payload, phân quyền RBAC bác sĩ/điều dưỡng, idempotency và phân trang nâng cao. Hai tình huống lỗi thật (điều dưỡng sửa đơn thuốc trả 200, API 500 lộ dữ liệu bệnh nhân), 9+ mockup Postman/Jira/Kanban, FAQ và trắc nghiệm 5 câu. Chuẩn SEO, dẫn về khóa Tester CyberSoft.

1. Tóm tắt nhanh & hệ thống bạn sẽ kiểm thử

⭐ TL;DR — Kiểm thử API thủ công nâng cao bằng Postman không dừng ở 'gửi request rồi xem status 200' — nó gồm kiểm thử hợp đồng/schema, đúng mã trạng thái theo nghiệp vụ, giá trị biên tham số, dữ liệu âm, phân quyền theo vai trò, idempotency và phân trang. Bài này bám sát API bệnh án điện tử MediCare EHR của một bệnh viện thật: bác sĩ, điều dưỡng thao tác trên hồ sơ bệnh nhân và đơn thuốc qua REST API. Có 9+ mockup Postman/Jira/Kanban, 2 tình huống lỗi thật, và trắc nghiệm cuối bài.

Kiểm thử API thủ công nâng cao là kỹ năng bắt buộc với tester ở dự án doanh nghiệp, đặc biệt trong lĩnh vực y tế — nơi một API sai không chỉ gây bug hiển thị mà có thể ảnh hưởng trực tiếp tới an toàn bệnh nhân (đơn thuốc sai liều) hoặc vi phạm bảo mật dữ liệu (lộ chẩn đoán bệnh). Trong bài này, bạn sẽ làm tester cho hệ thống MediCare EHR: bệnh viện dùng REST API để bác sĩ và điều dưỡng truy cập hồ sơ bệnh án, đơn thuốc, và dữ liệu sinh hiệu của bệnh nhân qua nhiều ứng dụng (web nội bộ, app di động cho điều dưỡng, cổng liên viện).

◭ Postman GET api.medicare-ehr.vn/v1/patients/BN-88421/records?page=1&limit=20 Send RESPONSE 200 ⏱ 142 ms⬇ 3.4 KB Body · JSON { "data": [ { "id": "HS-70231", "diagnosis": "Viem phoi", "doctorId": "BS-102", "createdAt": "2026-03-11" }, { "id": "HS-70198", "diagnosis": "Tang huyet ap", "doctorId": "BS-104", "createdAt": "2026-02-02" } ], "page": 1, "limit": 20, "total": 47}
Postman: GET danh sách bệnh án của bệnh nhân BN-88421, response chuẩn có phân trang
📖 Contract Testing (kiểm thử hợp đồng API): so khớp response thật của API với một đặc tả cố định (kiểu dữ liệu, trường bắt buộc, định dạng) để phát hiện sai lệch mà kiểm thử chức năng thông thường dễ bỏ sót.

Bảy khía cạnh nâng cao bạn sẽ luyện trong bài: (1) kiểm thử hợp đồng/schema response, (2) thiết kế ca theo mã trạng thái HTTP đúng ngữ nghĩa nghiệp vụ, (3) kiểm thử biên tham số phân trang/ID/ngày tháng, (4) kiểm thử dữ liệu âm cho payload, (5) kiểm thử phân quyền theo vai trò bác sĩ/điều dưỡng, (6) idempotency cho các API có tác dụng phụ, (7) kiểm thử phân trang nâng cao (offset vs cursor). Mỗi phần đều có ví dụ Postman thật, không phải lý thuyết suông.

2. Kiểm thử hợp đồng (contract) & schema response

Kiểm thử hợp đồng trả lời câu hỏi: 'Response API có ĐÚNG hình dạng mà mọi client (web, app di động, hệ thống liên viện) đang mong đợi không?'. Khác với kiểm thử chức năng chỉ hỏi 'API có trả về dữ liệu đúng nghiệp vụ không', contract testing kiểm tra ở mức thấp hơn: kiểu dữ liệu của từng trường, trường nào bắt buộc phải có, định dạng ngày giờ, và các ràng buộc giá trị. Đây là lớp kiểm thử cực kỳ quan trọng với hệ thống nhiều client tiêu thụ cùng một API như MediCare EHR.

Hợp đồng (contract) response — GET /v1/patients/{id}/records TrườngKiểuBắt buộcRàng buộcidstringĐịnh dạng HS-#####diagnosisstringKhông null, 1–500 ký tựdoctorIdstringĐịnh dạng BS-###createdAtstring (ISO 8601)yyyy-MM-ddpagenumber≥ 1limitnumber1–100totalnumber≥ 0Contract test: so khớp schema này với response thật (JSON Schema/Postman test script), không chỉ đọc mắt thường.
Bảng hợp đồng (contract) response chuẩn của GET /v1/patients/{id}/records

Trong thực tế, đội phát triển hiếm khi cung cấp bộ JSON Schema hoàn chỉnh — tester nâng cao cần TỰ dựng bảng hợp đồng từ tài liệu API (Swagger/OpenAPI) hoặc từ response mẫu, rồi viết test script trong Postman (tab Tests) dùng pm.response.to.have.jsonSchema() hoặc kiểm tra thủ công typeof từng trường. Các lỗi hợp đồng phổ biến nhất ở hệ thống y tế: trường chẩn đoán (diagnosis) trả về null dù được đánh dấu bắt buộc, id bác sĩ trả kiểu số thay vì chuỗi mã hoá (BS-102 vs 102), và ngày tháng không theo chuẩn ISO 8601 khiến client parse sai lệch múi giờ.

◭ Postman GET api.medicare-ehr.vn/v1/patients/BN-88421/records?page=1&limit=20 Send RESPONSE 200 ⏱ 138 ms⬇ 3.1 KB Body · JSON { "data": [ { "id": "HS-70231", "diagnosis": null, "doctorId": 102, "createdAt": "11/03/2026" } ], "page": "1", "limit": 20, "total": 47}// FAIL: diagnosis=null (schema yeu cau string), doctorId la number// FAIL: createdAt sai dinh dang ISO 8601, page la string thay vi number
Postman: response VI PHẠM hợp đồng — diagnosis=null, doctorId là số, createdAt sai định dạng
💡 Lưu bảng hợp đồng (contract) vào cùng thư mục Postman collection và chạy lại nó ở MỌI lần hồi quy API — hợp đồng thay đổi âm thầm (breaking change) là nguyên nhân phổ biến khiến app di động sập mà không ai biết trước khi release.

3. Mã trạng thái HTTP: thiết kế ca theo status code

Người mới thường chỉ kiểm tra 'API có trả 200 không'. Tester nâng cao phải thiết kế ca kiểm thử sao cho MỖI tình huống nghiệp vụ ánh xạ đúng một mã trạng thái ngữ nghĩa: 200 (thành công, có body), 201 (tạo mới thành công), 204 (thành công, không body — ví dụ DELETE), 400 (payload sai định dạng), 401 (chưa xác thực/token hết hạn), 403 (đã xác thực nhưng không đủ quyền), 404 (tài nguyên không tồn tại), 409 (xung đột, ví dụ đơn thuốc đã bị huỷ), 422 (dữ liệu hợp lệ cú pháp nhưng sai logic nghiệp vụ), 500 (lỗi hệ thống). Nhầm giữa các mã này là lỗi nghiêm trọng vì client dựa vào status code để quyết định hành vi tiếp theo.

▶ Bước 1: Liệt kê toàn bộ endpoint cần test (vd PUT /v1/prescriptions/{id}), với từng endpoint liệt kê các tình huống nghiệp vụ có thể xảy ra.

▶ Bước 2: Với mỗi tình huống, tra bảng ánh xạ HTTP status để xác định mã ĐÚNG (không đoán, không copy từ endpoint khác).

▶ Bước 3: Viết ca kiểm thử Postman với assertion `pm.response.to.have.status(x)` CHÍNH XÁC theo bảng, không chấp nhận '2xx là được'.

text
ANH XA MA TRANG THAI - PUT /v1/prescriptions/{id}
Tinh huong: sua thanh cong, du quyen bac si       -> 200
Tinh huong: id don thuoc khong ton tai            -> 404 (KHONG phai 200)
Tinh huong: khong gui token / token het han        -> 401
Tinh huong: token hop le nhung sai vai tro (dieu duong) -> 403 (KHONG phai 200)
Tinh huong: don thuoc da bi huy truoc do            -> 409
Tinh huong: lieu luong am hoac rong                  -> 400
Tinh huong: loi he thong (DB timeout)                -> 500 (khong lo stack trace)
💡 Khi thấy một API trả 200 cho MỌI tình huống kể cả lỗi, đó gần như chắc chắn là dấu hiệu đội dev chưa xử lý status code đúng — báo ngay, đừng chỉ ghi nhận từng ca đơn lẻ.

4. Kiểm thử biên tham số (boundary) cho API

Mọi tham số API đều có biên: `limit` trong phân trang có min/max, `page` phải ≥1, `id` phải đúng định dạng, khoảng ngày (`from`/`to`) phải hợp lý. Kiểm thử biên nâng cao nghĩa là bạn không chỉ thử giá trị hợp lệ điển hình mà thử CHÍNH XÁC tại và ngay ngoài ranh giới cho phép — đây là nơi lỗi off-by-one (lệch 1 đơn vị) và lỗi tràn số thường ẩn náu, đặc biệt nguy hiểm khi tham số điều khiển lượng dữ liệu y tế trả về.

▶ Bước 1: Với tham số `limit` (giới hạn tối đa 100), thử: limit=1 (biên dưới hợp lệ), limit=100 (biên trên hợp lệ), limit=0 và limit=101 (ngay ngoài biên), limit=-5 (số âm).

🔒

Nội dung bị khoá

Bạn đang xem bản xem trước. Đăng nhập để mở khoá toàn bộ bài viết và tất cả tài liệu Tester/QA.

Đã xem 24% nội dung
  • Đọc trọn vẹn mọi bài viết
  • Lưu bài & ghi chú cá nhân
  • Theo dõi tiến độ đã đọc
  • Luyện phỏng vấn, ISTQB, Mock
Đăng nhập để đọc tiếp

Chưa có mã? Lấy mã qua Fanpage / Zalo CyberSoft.

0

💬 Bình luận (0)

Bạn có thể đọc mọi bình luận. Đăng nhập để bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!