API Testing - Phần 2: API Testing + CRUD với Postman
Bài đăng này đã không được cập nhật trong 4 năm
1. API Testing với Postman
Postman (getpostman.com) là Môi trường phát triển API tinh vi và được sử dụng rộng rãi, lý tưởng cho hầu hết các thử nghiệm API:
- Phiên bản cơ bản là miễn phí
- Có sẵn cho Windows, MacOS hoặc Linux
- Giao diện gọn gàng và rõ ràng
- Không yêu cầu rất nhiều bước thiết lập
Tạo collection và request đầu tiên
- Khi bạn cài đặt và chạy Postman, bạn sẽ thấy màn hình đăng nhập. Ở cuối trang, nhấp vào "Skip signing in and take me straight to the app". Nếu bạn không thấy nút để bỏ qua, bạn có thể đăng ký và đăng nhập
- Khi khởi chạy, bạn sẽ thấy màn hình Create New
- Chọn “Request” để tạo ra một request cơ bản
- Với lần thử nghiệm đầu tiên, hãy tạo ra một collection mới bằng cách nhấn vào nút “Create Collection” gần dưới cùng của cửa sổ Save Request và cung cấp cho nó một cái tên như “First Collection”
- Sau đó click vào checkbox để lưu lại
- Tiếp theo, nhập tên Request và nhấn Save
Gửi GET request
Bây giờ là thời gian để tạo yGET request đầu tiên của bạn.
- Nhập URL đầy đủ của resource bạn muốn yêu cầu (ví dụ: https://example.com) vào trường được gắn nhãn là "Enter request URL" và click Send:
- Chế độ xem mà bạn sẽ thấy được phân tách thành khu vực yêu cầu ở trên cùng, gồm Params, Authorization, Headers và các tab khác.
- Vùng response ở phía dưới, bao gồm Cookies, Headers và các tab khác. Theo mặc định, phần response body sẽ được hiển thị ở phía dưới, trong một hình thức khá đẹp.
- Để tạo một request khác, click vào biểu tượng +. Sau này, bạn có thể chọn "Save" để lưu trữ các request mới trong cùng một collection (hoặc bất kỳ thứ gì khác).
2. CRUD với Postman
CRUD trong lập trình máy tính là bốn hoạt động cơ bản của lưu trữ liên tục.
- Create: PUT, POST
- Read: GET
- Update: PUT, POST, PATCH
- Delete: DELETE
Rõ ràng có một sự mâu thuẫn đang diễn ra giữa PUT, POST và PATCH. Trong thế giới thực, nó phụ thuộc vào API (hoặc dịch vụ web trực tuyến), phương thức nào sẽ được sử dụng khi nào. Nhưng lý tưởng là:
- PUT sẽ được sử dụng để cập nhật tài nguyên theo cách không cần thiết: nhiều request giống hệt nhau phải luôn có cùng kết quả, giống như GET.
- GET request giống nhau sẽ luôn dẫn đến cùng một kết quả - cùng một response
- POST sẽ tạo ra một resource và sẽ không dẫn đến kết quả tương tự. Vì vậy, nếu bạn gọi nó nhiều lần, nhiều resource sẽ được tạo (nếu được phép)
- PATCH có nghĩa là áp dụng một bản cập nhật một phần cho resource. Nhưng chỉ khi nó đã tồn tại. Vì vậy, không giống như PUT, nó sẽ không tạo ra một mục mới nếu resource được chỉ định không tồn tại
Lỗi thường gặp khi chọn phương thức HTTP
Mặc dù nhiều quyết định trên thuộc về các nhà phát triển, có một lỗi phổ biến liên quan đến việc lựa chọn chính xác phương thức HTTP: nếu trong quá trình kiểm thử của bạn, bạn sẽ thấy bất kỳ yêu cầu GET nào yêu cầu xác thực (chúng tôi sẽ đề cập đến vấn đề này sau), đó rất có thể là một vấn đề bạn nên báo cáo. Nó có thể có tác động bảo mật đáng kể, bởi vì các yêu cầu GET, như được chỉ định trong Giao thức HTTP, được cho là không ổn định và an toàn. Các trình duyệt web mong đợi nó là như vậy và do đó ít hạn chế hơn. Phương thức HTTP an toàn có nghĩa là mọi yêu cầu sử dụng phương pháp an toàn không thể sửa đổi hoặc thay đổi tài nguyên.
Sau đây, chúng ta hãy xem xét các ví dụ cho từng phương thức.
GET
- Trong ví dụ này, tạo một request mới (click vào nút + ở trên cùng), theo mặc định, đó sẽ là một yêu cầu GET.
- Để yêu cầu nội dung của tệp văn bản đơn giản với Postman, chỉ cần nhập URL đầy đủ và click vào Send để gửi request.
- Nội dung của tệp sẽ được hiển thị trong phần Response ở phía dưới:
- Kiểm tra tab "Headers", là nơi hiển thị danh sách đầy đủ các tiêu đề phản hồi:
- Trong phần phản hồi, Postman cũng sẽ hiển thị mã trạng thái HTTP (200 OK) và bên cạnh đó là thời gian thực hiện cho yêu cầu (46 mili giây), cũng như kích thước phản hồi (575 Byte):
- Kết quả được trả về trong ví dụ này là văn bản đơn giản
one,two,three,four
- là danh sách bốn từ đó ở định dạng CSV. CSV là viết tắt của "comma-separated values" - các giá trị được phân tách bằng dấu phẩy. Nó được sử dụng để lưu trữ một danh sách các giá trị riêng lẻ, được phân tách bằng một dấu phẩy ở giữa chúng. - Vui lòng lưu trữ yêu cầu GET này trong collection của bạn dưới dạng: "GET file example", trước khi bạn chuyển sang yêu cầu PUT tiếp theo.
PUT
- Phương pháp khác để tạo một request mới mà không cần phải nhập lại tất cả đầu vào là click chuột phải vào tab của một request hiện có và chọn "Duplicate Tab" từ menu. Hãy làm điều này ngay bây giờ và thay đổi phương thức yêu cầu thành "PUT".
- Sau đó chọn "Save As…" từ danh sách dropdown bên cạnh nút Save để lưu request mới vào collection của bạn:
- Tiếp theo hãy điền vào URL - nơi bạn muốn đẩy dữ liệu lên (cái này sẽ được gọi là "endpoint" hay "API endpoint").
- Chọn "Body" tab trong phần request. Nó sẽ cho phép bạn chọn content-type. Theo mặc định, nó sẽ được đặt thành "none" vì không có nội dung thông điệp. Thay đổi điều đó bằng cách chọn "raw", là content-type của phần body và nhập dữ liệu CSV
a, b, c, d
trong trường văn bản mới xuất hiện khi bạn đã chọn content-type.
- Khi bạn đã thiết lập xong, bấm Send.
- Sau đó quay lại request trước đó của bạn ("GET file example") và gửi lại yêu cầu đó để xác minh rằng dữ liệu đã được cập nhật. Bây giờ nó sẽ hiển thị dữ liệu CSV mà bạn vừa gửi trong phản hồi:
- Bây giờ, nếu bạn chỉ muốn sửa đổi một mục CSV, ví dụ: bạn muốn thay thế
c
bằngthree
, thì bạn có thể sử dụng phương thức PATCH.
Patch
Cú pháp để vá các bản ghi có thể khác nhau rất nhiều giữa các API hoặc dịch vụ web. Bạn sẽ tìm hiểu về các chi tiết sau này trong khóa học này, các API có thể sử dụng các tiêu chuẩn như JSON, XML hoặc thậm chí các định dạng độc quyền.
- Lưu ý rằng giống như trong ví dụ PUT request ở trên, PATCH sử dụng văn bản thuần cho dữ liệu thông điệp.
- Khi bạn sao chép yêu cầu dữ liệu của PUT request, hãy thay đổi đường dẫn thành patchdata.php, phương thức HTTP thành "PATCH", và sửa đổi body text (
2 = Charlie
). - Sau đó bấm Send để gửi nó, và có được kết quả như hình.
- Hãy nhớ sử dụng Save as… để lưu trữ nó như một new request, và đừng ghi đè lên bản gốc.
- Nếu bạn yêu cầu dữ liệu sau đó với “GET file example” request, thì nó sẽ giống như sau:
- Hãy nhớ lưu yêu cầu PATCH mới vào collection của bạn, trước khi bạn chuyển sang phương thức tiếp theo.
Trong ví dụ này, PATCH endpoint cho phép chúng tôi cập nhật các mục cụ thể của danh sách CSV thành giá trị mới. Như các tham số, nó dự kiến các chỉ số mà bạn muốn sửa đổi, cũng như giá trị mới.
0 = Text
có nghĩa là bạn muốn cập nhật mục nhập đầu tiên (nó bắt đầu đếm từ 0) và đặt nó thành giá trị: "Text"- Khi bạn gửi cái này, danh sách sẽ thay đổi từ
a, b, c, d
trước đó thànhText, b, c, d
- Khi bạn gửi cái này, danh sách sẽ thay đổi từ
- Nếu bạn điền
2 = Charlie
- Sẽ đặt dữ liệu CSV thành giá trị mới:
a, b, Charlie, d
- Chỉ mục là
2
, hoặc mục thứ ba trong danh sách CSV và giá trị mới là Charlie
- Sẽ đặt dữ liệu CSV thành giá trị mới:
* Đây là yêu cầu PATCH hoàn chỉnh để thay đổi mục nhập thứ ba (hãy nhớ rằng các chỉ mục như thế này thường bắt đầu đếm bằng 0) của danh sách CSV thành giá trị mới `Charlie`
POST
- Tạo một yêu cầu mới với POST làm phương thức HTTP và sử dụng định dạng "form-data" của cơ sở dữ liệu cho request body.
- Nhập hai key: "firstname" và "city", và điền vào bất kỳ giá trị nào bạn muốn.
- Yêu cầu đầy đủ sẽ trông như thế này:
- Khi bạn gửi yêu cầu bằng cách click vào nút Send, nó sẽ hiển thị xác nhận trong phản hồi và trong ví dụ này, phản hồi cũng chứa dữ liệu đã gửi:
- Bạn có thể nhận thấy nút “Code” rồi.
- Khi bạn click vào nó, bạn sẽ thấy các tùy chọn để chuyển đổi dữ liệu yêu cầu thành các định dạng khác nhau để xuất:
* Nếu bạn chọn "HTTP", từ dropdown ở trên cùng bên trái, bạn sẽ thấy yêu cầu http dạng raw - dạng chính xác mà máy chủ sẽ nhận được.
* Ngoài ra còn có các tùy chọn để cho phép Postman tạo các đoạn mã cho các ngôn ngữ lập trình khác nhau như PHP, Java, Python...
DELETE
Trong trường hợp này, bạn có thể:
- Gọi DELETE endpoint với một chỉ mục như được mô tả trước đây, để xóa một mục cụ thể khỏi danh sách
- Hoặc chỉ gọi nó mà không có bất kỳ tham số nào để xóa toàn bộ danh sách
Thử xóa một số mục theo các bước sau:
- Tạo một yêu cầu mới và lưu nó trong collection của bạn dưới dạng "DELETE data".
- Một lần nữa, sử dụng phần raw Body và nhập chỉ mục trong danh sách mà bạn muốn xóa.
- Từ ví dụ trước, dữ liệu trong danh sách phải là a, b, Charlie, d.
- Nếu bạn gửi yêu cầu DELETE với chỉ mục 1, sẽ là xóa mục nhập thứ hai, và danh sách kết quả sẽ trở thành: a, Charlie, d.
- Trong trường hợp bạn có kết quả khác, trước tiên hãy gửi yêu cầu PUT trước đó, để khôi phục các giá trị ban đầu:
- Yêu cầu DELETE hoàn chỉnh:
- Để xác minh rằng yêu cầu đã thành công, hãy gọi lại yêu cầu GET một lần nữa:
--Còn tiếp --
Nguồn tham khảo:
Dịch từ: https://www.utest.com/academy/tracks/28/courses/api-testing-with-postman
All rights reserved