[SOFTWARE TESTING] - API Testing



- API: Application Programming Interface -> Cầu nối giữa client và server

    + API Testing thuộc business logic layer (presentation -> business logic -> data management)

    + API testing là kiểm thử trên server, không liên quan tới client

    + Tool sủ dụng: Postman, rest client,...

- Cơ chế hoạt động của API

    + Client gửi request tới server, server xử lí thông tin và gửi response lại cho client

    + Sử dụng giao thức HTTP để truyền tải dữ liệu

- Cách test API:

1. Gửi yêu cầu lên server với các tham số yêu cầu (run request): các phương thức sử dụng

    + GET: yêu cầu server đưa lại resource -> Read

    + POST: yêu cầu server tạo 1 resource mới -> Create

    + PUT/PATCH: yêu cầu server cho sửa resource -> Update

    + DELETE: yêu cầu server xóa resource -> Delete

2. Kiểm tra kết quả trả về (check response) -> so sánh kết quả thực tế với tài liệu API (kết quả mong đợi) để đưa ra kết luận

- Các phương pháp test API

    + Functional testing: kiểm tra xem API hoạt động chính xác đúng theo chức năng của nó không

    + Usability testing: API hoạt động dễ dàng không

    + Reliability testing: việc gọi và trả về kết quả có ổn định và nhất quán giữa các lần gọi hay không

    + Load testing: API hoạt động đúng khi concurrent user (người dùng truy cập đồng thời) không

    + Security testing: các vấn đề liên quan tới authentication, authorization, access control,...

- Phân biệt PUT và PATCH?

     + PUT: tạo ra một bản ghi có đầy đủ các thuộc tính của đối tượng và sau đó ghi đè lên đối tượng cần cập nhật; Nếu chúng ta gửi lên server thiếu thuộc tính thì giá trị của thuộc tính đó trong CSDL sẽ mang giá trị NULL

    + PATCH: chỉ thay đổi thuộc tính yêu cầu cập nhật

- Phân biệt GET vs POST?

    + GET

        - URL chứa params -> dễ bị tấn công vì params hiện ra ngoài đường dẫn luôn

        - Ràng buộc: chỉ chấp nhận các kí tự trong bảng mã ASCII

        - Có thể cache

        - Độ dài lên đế 2000 kí tự

    + POST

        - Body chứa params -> an toàn hơn GET

        - Không có sự ràng buộc nào về dữ liệu, thâm chí sử dụng mã nhị phân vấn được

        - Không thể cache

        - Độ dài biểu mẫu: lên tới 8MB

HTTP request (các thông tin gửi lên server) -> gồm 3 phần:

    + Request line gồm 3 phần:

        - method: get, post là 2 phương thức được sử dụng phổ biến

        - path (url): định danh resource

        - http version: phổ biến là http/1.0 hay http/1.1

    + Headers: chứa các thông tin bổ sung như Cookie, thông tin về ủy quyền, user-agent, accept-encodind -> các thông tin này phân biệt chữ hoa với chữ thường

    + Message Body -> thường chỉ có POST/PUT/PATCH mới có phần này

- Status code trong HTTP response

    + 1xx: thông tin -> yêu cầu được nhận và tiến trình đang tiếp tục xử lí

    + 2xx: thành công -> yêu cầu được chấp thuận thành công

    + 3xx: Sự điều hướng lại -> hoạt động tiếp theo phải được thực hiện mới hoàn thành yêu cầu

    + 4xx: Client error -> request chứa cú pháp không chính xác hoặc API chưa được implement

    + 5xx: Server error -> server thực hiện request không thành công

- Cookie 

    + Có thời hạn expire

    + Dung lượng 4KB

    + Truy cập được cả ở client và server -> khi client gửi request tới server, cookie của trang sẽ được thêm vào request gửi lên server

    + Sử dụng để lưu token, authentication information,...

- Local storage vs Session storage?

    + Giống:

        - Lưu trữ theo từng cặp (key - value)

        - Value lưu ở local browser nên phía server không thể truy cập được

        - Value chỉ là string, các dạng khác cần parse về string trước khi lưu vào storage

    + Khác:

        - Session storage: dữ liệu mất ngay khi close tab hoặc close browser

        - Local storage: close tab hoặc close browser thì data vẫn còn chỉ khi nào clear cache thì dữ liệu mới mất -> ứng dụng có thể chia sẻ dữ liệu giữa các tab




Nhận xét

Bài đăng phổ biến từ blog này

[DATABASE] Tìm mọi khóa của lược đồ quan hệ

[DATABASE] Phủ tối thiểu của tập phụ thuộc hàm

[DATABASE] Dạng chuẩn cao nhất của lược đồ quan hệ