API Testing | What, Why, How, Tools, Challenges & Best Practices
Trước khi đi sâu vào tìm hiểu về API Testing thì chúng ta hãy cùng nhau tìm hiểu về khái niệm API. API là gì? API là viết tắt của Application Programming Interface (giao diện lập trình ứng dụng), là phần mềm trung gian cho phép 2 ứng dụng giao tiếp với nhau. Mỗi khi sử dụng các ứng dụng, chẳng ...
Trước khi đi sâu vào tìm hiểu về API Testing thì chúng ta hãy cùng nhau tìm hiểu về khái niệm API.
API là gì?
API là viết tắt của Application Programming Interface (giao diện lập trình ứng dụng), là phần mềm trung gian cho phép 2 ứng dụng giao tiếp với nhau. Mỗi khi sử dụng các ứng dụng, chẳng hạn như Facebook, các ứng dụng gửi tin nhắn tức thì hoặc kiểm tra thời tiết trên điện thoại... đồng nghĩa với việc bạn đang sử dụng API.
Ví Dụ Về API
Khi sử dụng ứng dụng trên thiết bị di động, ứng dụng sẽ kết nối Internet và gửi dữ liệu tới máy chủ. Sau đó máy chủ lấy dữ liệu, diễn giải dữ liệu, thực hiện các hành động cần thiết và gửi dữ liệu trở lại thiết bị của bạn. Ứng dụng giải thích dữ liệu và hiển thị các thông tin đọc được cho bạn. Và nó được gọi là API.
Để giải thích rõ hơn, tham khảo ví dụ dưới đây:
Thử tưởng tượng bạn đang ở trong một nhà hàng, và menu có 1 loạt các món ăn để bạn lựa chọn. Nhà bếp là một phần của hệ thống, thực hiện nhiệm vụ chuẩn bị các món mà bạn đặt. Cái còn thiếu ở đây là người để truyền đạt món ăn mà bạn yêu cầu tới nhà bếp và mang đồ ăn ra cho bạn. Đó chính là người phục vụ hoặc có thể nói là API. Người phục vụ sẽ truyền đạt các yêu cầu của bạn tới nhà bếp và mang đồ ăn ra cho bạn.
Trong mô hình kiến trúc ba tầng cổ điển:
-
Tầng dữ liệu (Data Tier) : Bao gồm cơ sở dữ liệu và các file hệ thống, là nơi truy xuất/lưu trữ dữ liệu.
-
Tầng Logic : được coi là bộ não của ứng dụng, xử lý dữ liệu giữa các lớp, điều phối ứng dụng, xử lý các lệnh và đưa ra các quyết định logic.
-
Tầng hiển thị (Presentation Tier) : Giao diện người dùng, dịch các tác vụ thành thứ mà người dùng có thể hiểu.
Tầng logic là API. Đây là nơi bao gồm tất cả các logic nghiệp vụ. Nó có trách nhiệm lấy thông tin từ các giao diện người dùng khác nhau (UIs), thực hiện các phép tính và các giao dịch trên lớp cơ sở dữ liệu và sau đó hiển thị các kết quả trở lại giao diện người dùng. Trong một số trường hợp, tầng logic của ứng dụng có độ phức tạp hơn thế nhiều và sử dụng đa công nghệ không phải là hiếm (như máy chủ web, hàng đợi thông báo, ...) Ví dụ về thế giới thực: Bạn đặt một dịch vụ của Uber hoặc Grab với một địa chỉ đích. Những ứng dụng này sau đó cần phải giao tiếp với dịch vụ bản đồ, các dịch vụ giao thông và thời tiết và các ứng dụng chuyên biệt khác để hướng dẫn đặt chỗ và để cho bạn có 1 chuyến đi hoàn hảo. Trong thế giới hiện đại, liên kết với nhau, chúng ta coi như là tất cả những hệ thống khác nhau này có thể nói chuyện với nhau một cách liền mạch, trong thực tế điều đó sẽ không thể có nếu không có API.
Trong API định nghĩa tập các phương thức, định dạng dữ liệu và các giao thức mà nó mong đợi, và bên tiêu dùng API (được gọi là máy khách) sẽ sử dụng các quy tắc này để làm việc với API, miễn là nó tuân thủ các quy tắc thì sẽ luôn có thể sử dụng API mà không phải lo lắng về bất cứ điều gì. Có những tình huống mà API là sản phẩm cuối cùng - API công khai. Ví dụ : Một trình tìm kiếm Internet đơn giản sẽ tiết lộ hàng ngàn API công khai cho bất kỳ thứ gì từ GPS hoặc các giải pháp lập bản đồ để định vị một đài phát thanh.
Ví dụ về 1 số ông lớn API:
- Google Maps API : Chúng được thiết kế chủ yếu cho việc sử dụng điện thoại di động và máy tính để bàn với sự trợ giúp của giao diện flash và JavaScript.
- Amazon Advertising API: API quảng cáo giúp truy cập vào sản phẩm để khám phá các tính năng, hỗ trợ đưa ra các quảng cáo phù hợp với từng đối tượng người dùng.
- Twitter: API dành cho Twitter thường có hai loại, một để truy cập dữ liệu và một cho tương tác và tìm kiếm trên Twitter.
- YouTube: API này được sử dụng cho YouTube bao gồm nhiều chức năng khác nhau : video, phát trực tuyến, trình phát, v.v.
API Testing là gì?
Kiểm thử API hoàn toàn khác với Kiểm thử GUI, kiểm thử API chủ yếu tập trung vào lớp logic nghiệp vụ của kiến trúc phần mềm chứ không tập trung vào giao diện của ứng dụng.
Thay vì sử dụng đầu vào (bàn phím) và đầu ra người dùng chuẩn, thì trong kiểm thử API, bạn sử dụng phần mềm để gửi các cuộc gọi đến API, nhận đầu ra và ghi lại phản hồi của hệ thống.
API Testing được sử dụng để kiểm thử:
- Functional (Chức năng) : API trả về phản hồi chính xác (theo định dạng mong muốn) cho một loạt các yêu cầu khả thi, tức là đầu ra từ ứng dụng / cơ sở dữ liệu đầu tiên là chính xác, được cấu trúc tốt và hữu ích cho một ứng dụng khác. Phản hồi có thể là : trạng thái Pass/Fail, dữ liệu, thông tin hoặc cuộc gọi đến một API khác.
- Load (Tải) : kiểm tra khả năng xử lý một lượng lớn cuộc gọi và khả năng phản ứng chính xác với các trường hợp biên : giới hạn xảy ra lỗi và các đầu vào cực đoan không mong muốn.
- Performance (Hiệu năng) : Phản hồi trong một khoảng thời gian có thể chấp nhận được.
- Security (Bảo mật) : Kiểm tra : xác thực bắt buộc, quyền, kiểm soát truy cập, dữ liệu nhạy cảm được truyền qua mạng an toàn không và phản hồi (để đảm bảo an toàn cho hệ thống) tới các cuộc tấn công bảo mật tiềm ẩn.
Kiểm thử API liên quan đến việc kiểm tra trực tiếp các API (trong sự cô lập), và một phần trong các giao dịch đầu cuối của quá trình kiểm thử tích hợp. Ngoài các API RESTful, các giao dịch này bao gồm nhiều loại thiết bị đầu cuối như dịch vụ web, ESB, cơ sở dữ liệu, mainframe, giao diện người dùng web và ERP. Kiểm thử API được thực hiện trên các API được sử dụng trong ứng dụng (có thể bao gồm cả các API của bên thứ ba). Ảo hóa dịch vụ được sử dụng kết hợp với kiểm thử API để tách biệt các dịch vụ đang thử nghiệm cũng như mở rộng truy cập môi trường thử nghiệm bằng cách mô phỏng các API / dịch vụ không thể truy cập để thử nghiệm.
Why API Testing?
Các API bây giờ là giao diện chính cho logic ứng dụng. Các nhóm Agile và DevOps làm việc với các vòng lặp ngắn và các vòng phản hồi nhanh nhận thấy rằng các kiểm tra GUI đòi hỏi phải làm lại một số bước đáng kể để bắt kịp với sự thay đổi thường xuyên. Các thử nghiệm ở lớp API thì ít "giòn" và dễ bảo trì hơn. Đó là lý do tại sao kiểm thử API ngày một phổ biến và được ưa chuộng đễn vậy.
Các loại API
Qua nhiều năm, các API đã phát triển từ các thư viện mã đơn giản mà các ứng dụng có thể sử dụng để chạy mã trên cùng một máy tính, đến các API từ xa có thể được sử dụng để cho phép mã trên một máy tính gọi mã được lưu trữ ở một nơi khác. Dưới đây là danh sách nhanh các công nghệ API phổ biến:
- Cổng TCP / IP
- Cuộc gọi thủ tục từ xa (RPC)
- Kiến trúc môi giới yêu cầu đối tượng chung (CORBA)
- Java Remote Method Invocation (RMI) và Enterprise Java Beans (EJBs)
- Mô hình đối tượng thành phần phân tán của Microsoft (DCOM) - còn được gọi là ActiveX
- Dịch vụ web (SOAP rồi REST)
Các dịch vụ web SOAP sử dụng ngôn ngữ định nghĩa dịch vụ Web (WSDL) và giao tiếp bằng cách sử dụng các yêu cầu HTTP POST. Về cơ bản, chúng là một sự tuần tự hóa các cuộc gọi đối tượng RPC thành XML mà sau đó có thể được chuyển tới dịch vụ web. XML được chuyển tới các dịch vụ web SOAP cần phải khớp với định dạng được chỉ định trong WSDL.
RESTful API (còn được gọi là một dịch vụ web RESTful) là một API web được thực hiện bằng cách sử dụng các nguyên tắc HTTP và REST. Không giống như các dịch vụ web dựa trên SOAP, không có chuẩn "chính thức" cho các API web RESTful. Điều này là do REST là một kiểu kiến trúc, không giống như SOAP, là một giao thức. Thông thường các dịch vụ web REST trưng ra các hoạt động của chúng như là một loạt các “tài nguyên” duy nhất tương ứng với một URL cụ thể. Mỗi phương thức HTTP chuẩn (POST, GET, PUT và DELETE) sau đó ánh xạ vào bốn hoạt động CRUD (Tạo, Đọc, Cập nhật và Xóa) cơ bản trên mỗi tài nguyên. Các dịch vụ web REST có thể sử dụng các phương thức tuần tự hóa dữ liệu khác nhau (XML, JSON, RSS, v.v.).