Trước vào chủ đề kiểm thử API, hãy cùng tìm hiểu về API

API là gì?

API là từ viết tắt của Application Programming Interface.

Nó cho phép kết nối và trao đổi dữ liệu giữa hai hệ thống phần mềm riêng biệt. Một hệ thống phần mềm có thể nhúng các API bao gồm các hàm/thủ tục con(functions/sub-routines) mà có thể chạy bởi một hệ thống phần mềm khác.

Kiểm thử API là gì?

api_testing 1.png

Kiểm thử API là hoàn toàn khác biệt với kiểm thử GUI và các thành phần chủ yếu khác trong tầng business logic của kiến trúc phần mềm. Loại kiểm thử này không tập trung vào phần giao diện và thao tác giao diện của một ứng dụng.

Thay vì sử dụng các đầu vào(bàn phím) và đầu ra tiêu chuẩn, trong kiểm thử API, bạn có thể sử dụng một phần mềm để gửi các yêu cầu đến API, nhận đầu ra và ghi lại phản hồi của hệ thống.

Kiểm thử API yêu cầu một ứng dụng để tương tác với API. Để có thể kiểm thử một API, ban cần:

  • Sử dụng tool kiểm thử để điều khiển API
  • Viết các câu lệnh để kiểm thử API

Thiết lập môi trường kiểm thử API

  • Kiểm thử API khác với các loại kiểm thử khác vì giao diện(GUI) chưa có, nên bạn buộc phải thiết lập môi trường khởi tạo mà gọi API với các tham số yêu cầu và sau đó kiểm tra kết quả trả về.

  • Vì vậy để thiết lập môi trường kiểm thử cho API là khá phức tạp.

  • Cơ sở dữ liệu và server nên được cấu hình như yêu cầu của ứng dụng.

  • Sau khi tất cả các thiết lập đã hoàn tất, Các API Function nên được gọi để kiểm tra xem API có hoạt động hay không

Các loại đầu ra của một API

Đầu ra của API có thể là:

  1. Bất kỳ kiểu dư liệu nào
  2. Trạng thái(Pass hoặc Fail)
  3. Gọi tới một hàm API khác

Hãy cùng xem một ví dụ của mỗi loại trên

Bất kỳ kiểu dữ liệu nào

Ví dụ: Đây là một hàm API cần phải nhập hai số nguyên

Long add(int a, int b)

Các số được nhập vào như là tham số đầu vào. Đầu ra nên là tổng của hai số nguyên. Đây là đầu ra cần phải kiểm tra với kết quả dự kiến.

Cách gọi cần phải thực hiện là:

add (1234, 5656)

Ngoại lệ càn phải xử lý nếu số nhập vào vượt quá giới hạn của sô nguyên (integer)

Trạng thái(Pass hoặc Fail)

Xem xét các hàm API dưới đây:

  1. Lock()
  2. Unlock()
  3. Delete()

Chúng trả về vất kỳ giá trị như True (trong trường hợp thành công) hoặc False (trong trường hợp lỗi) như là đầu ra.

Sẽ cần nhiều hơn một test case, có thể gọi các hàm trong các đoạn mã và sau đó kiểm tra các thay đổi trong cơ sở dữ liệu hoặc giao diện của ứng dụng.

Gọi tới một hàm API/Event khác

010915_1247_Beforegoing2.png

Trong trường hợp này, chúng ta gọi một hàm API mà sẽ chuyển đến gọi một hàm khác.

Ví dụ - Hàm API đầu tiên có thể sử dụng để xóa một bản ghi chỉ định trong một bảng và hàm này sẽ gọi một hàm khác để REFRESH cơ sở dữ liệu.

Các test case cho kiểm thử API

Các test case cho kiểm thử API được dựa trên:

  • Dữ liệu trả về dựa trên điều kiện đầu vào: Điều này tương đối dễ dàng kiểm tra, như đầu vào có thể được xác định và kết quả có thể được xác thực.

  • Không trả về gì cả: Khi không có giá trị trả về, hành vị của API trên hệ thống có thể được kiểm tra

  • Kích hoạt một vài API/event/interrupt: Nếu đầu ra của một API kích hoạt các event hoặc interrupt, thì các listeners của event và interrupt nên đươc kiểm tra

  • Cập nhật cấu trúc dữ liệu: Cập nhật cấu trúc dữ liệu sẽ có một vài kết quả hoặc ảnh hưởng lên hệ thống, và chúng nên được kiểm tra

  • Chỉnh sửa các tài nguyên(resources) nhất định: Nếu API gọi chỉnh sửa một vài tài nguyên thì nó nên được xác nhận bằng cách truy cập vào các tài nguyên tương ứng

Các phương pháp tiếp cận kiểm thử API

Dưới đây là các điểm có thể giúp người dùng thực hiện các hướng kiểm thử API:

010915_1247_Beforegoing3.png

  1. Hiểu các chức năng của chương trình API và định nghĩa rõ phạm vi của phần mềm

  2. Áp dụng các kỹ thuật kiểm thử như lớp tương đương (equivalence classes), phân tích giá trị biên (boundary value analysis) và đoán lỗi (error guessing) và viết test case cho API

  3. Các tham số truyền vào cho API cần được lập kế hoạch và định nghĩa thích hợp

  4. Chạy các test case và so sánh giữa kết quả mong muốn và kết quả thực tế

Sự khác nhau giữa API testing và Unit testing

Unit testingAPI testing
Lập trình viên thực hiệnTester thực hiện
Từng chức năng được kiểm thửCác chức năng liên quan đến nhau cần được kiểm thử
Lập trình viên có thể truy cập vào source codeTester không thể truy cập vào source code
Phải kiểm tra cả UIChỉ kiểm tra các hàm API
Chỉ các chức năng đơn giảm được kiểm thửTất cả các chức năng được kiểm thử
Giới hạn phạm viPhạm vi rộng hơn
Thường được chạy trước khi buildThường được chạy sau khi build

Những điều cần kiểm tra trong kiểm thử API

Kiểm thử API nên được thực theo các phương pháp kiểm thử trong quy trình phát triển phần mềm:

  • Discovery testing: Kiểm tra các API khi truy cập các tài nguyên và xem các API truy cập các tài nguyên, có được các quyền xem, xóa và sửa hợp lệ hay không

  • Usability testing: Loại kiểm thử này kiểm tra xem API có nàm đúng chức năng và thân thiện hay không. và API được tích hợp tốt trên các nền tảng khác hay không

  • Security testing: Loại kiểm thử này bao gồm các loại xác thực được yêu cầu và xem các dữ liệu nhạy cảm có được mã hóa thông qua HTTP hoặc cả hai hay không

  • Automated testing: Kiểm thử API được nâng cao trong việc tạo ra các đoạn mã hoặc công cụ mà có thể chạy API thường xuyên

  • Documentation: Đội kiểm thử phải đảm bảo rằng các tài liệu thích hợp và cung cấp đầy đủ các thông tin để tương tác với API. Tài liệu nên là một phần khi bàn giao

Các thực hành tốt cho kiểm thử API

  • Test case nên được nhóm theo loại kiểm thử

  • Trên mỗi test case, nên bao gồm cả phần khai báo các API được gọi

  • Các tham số lựa chọn nên được liệt kê dầy đủ trong các test case

  • Nên đặt độ ưu tiên cho các API được gọi để dễ dàng test hơn

  • Mỗi test các nên được khép kín, độc lập và tránh ít phục thuộc

  • Nên tránh kiểm tra xâu chuỗi (test chaining) trong quá trình phát triển

  • Đặc biệt chú ý khi thực hiện xử lý các chức năng gọi một lần như xóa, đóng cửa sổ....

  • Gọi trình tự nên được thực hiện và lập kế hoạch tốt

  • Để đảm bảo hoàn thành các kiểm thử, tạo test case cho tất cả các tổ hợp đàu vào có thể có của API

Các loại lỗi mà kiểm thử API tìm ra

  • Lỗi do xử lý các lỗi điều kiện tạo ra

  • Các cờ chưa sử dụng

  • Thiếu hoặc lặp các chức năng

  • Các vấn đề về độ tin cậy. Khó khăn trong việc két nối và nhận được phản hồi từ API.

  • Các vấn đề về bảo mật

  • Vấn đề về xử lý đa luồng

  • Vấn đề về hiệu năng. Thời gian API phản hồi rất cao

  • Lỗi/cảnh báo không đúng

  • Xử lý không đúng các giá trị đối số hợp lệ

  • Cấu trúc dữ liệu trả về không chính xác(JSON hoặc XML)

Các tool cho kiểm thử API

Kiểm thử API và Unit đều là kiểm tra về source code nên các công cụ tương tự có thể sử dụng cho cả hai

  • SOAPUI
  • Runscope
  • Postman
  • Curl
  • Cfix
  • Check
  • CTESK
  • dotTEST
  • Eclipse SDK tool- Automated API testing

Postman REST Client

Postman REST client là một tool rất mạnh cho việc kiểm thử web service. Postman có mặt trên cả Google Chrome Pakaged App và trên ứng dụng tích hợp của trình duyệt Google Chrome. Postman có rất nhiều ưu điểm như:

  • Giao diễn dễ sử dụng

pm-main.png

  • Lịch sử, tự động gợi ý

pm-history.png

  • Dễ dàng sắp xếp và tổ chức

pm-collections.png

  • Một đặc điểm quan trọng nữa đó là phần hiển thị phản hồi(Response Viewer) rất trực quan và nhiều tiện ích

pm-viewer.png
pm-status.png

  • Có thể share và import các đoạn mã test API(collection) phù hợp cho làm việc nhóm.

postman-rest-client-share-collection-1.png
postman-rest-client-share-collection-2.png
postman-rest-client-share-collection-1.png
postman-rest-client-share-collection-2.png

Video demo:

Thử thách trong kiểm thử API

Thử thách trong kiểm thử API bao gồm:

  • Thử thách chính của kiểm thử API là kết hợp tham số, lựa chọn tham số và trình tự gọi

  • Không có giao diện để test nên gặp khó khăn trong việc nhập dữ liệu đầu vào

  • Kiểm tra đầu ra trên hệ thống khác là khá khó cho các tester

  • Các tester phải nắm rõ các yêu cầu về lựa chọn tham số và phần loại

  • Xử lý các ngoại lệ cũng cần phải được kiểm tra

  • Các tester cần có kiến thức về lập trình

Kết luận

API bao gồm tập hợp các lớp/hàm/thủ tục mà đại diện cho tầng business logic. Nếu API không được kiểm tra chính xác, nó có thể dẫn đến các vấn đề không chỉ cho ứng dụng API mà còn cho các ứng dụng gọi chúng.

Tham khảo

Link tham khảo:

http://www.guru99.com/api-testing.html

http://www.programmableweb.com/news/review-postman-client-makes-restful-api-exploration-breeze/brief/2014/01/27