Sơ lược về API Testing

Chúng ta đang sống trong một thời đại trí tuệ tuyệt vời, nơi sự tiến bộ chuyển động với tốc độ chóng mặt. Chúng ta được kết nối với thế giới và tất cả mọi thứ. API (Application Programming Interface) là anh hùng không được biết đến trong thế giới kết nối đó. Dưới đây là những điều bạn cần biết về API và kiểm thử API đóng một vai trò quan trọng như thế nào.

API là gì?

Các API được sử dụng để tích hợp các hệ thống với nhau. Bạn có thể tạo sẵn dữ liệu cho các hệ thống khác truy cập thông qua API hoặc chấp nhận dữ liệu từ các hệ thống khác. Đây là cách các thiết bị và ứng dụng khác nhau nói chuyện với nhau và chia sẻ thông tin.

Các công ty thành công như Facebook, YouTube và Twitter sử dụng API để ứng dụng của họ có thể giao tiếp với các chương trình của bên thứ ba. Thông thường, API hoạt động tương tự như cách hoạt động của bất kỳ trang web nào. Yêu cầu (request) được gửi từ client tới server và kết quả phản hồi (response) thông qua giao thức http.

Ví dụ như người phục vụ trong một nhà hàng. Người phục vụ nhận yêu cầu - request (đơn đặt hàng) từ khách hàng (client) và chuyển nó đến nhà bếp (là server) và nhận thức ăn (phản hồi - response) từ bếp cho khách hàng. API thực hiện chính xác những điều đó. Một API là một sứ giả đưa ra yêu cầu của bạn và nói với các hệ thống những gì cần làm và sau đó trả về phản hồi cho bạn.

API testing là gì?

API testing là một loại kiểm thử phần mềm liên quan đến việc kiểm thử các giao diện lập trình ứng dụng (APIs) một cách trực tiếp và là một phần của kiểm thử tích hợp để xác định xem hệ thống có đáp ứng các yêu cầu về tính năng, độ tin cậy, hiệu suất và bảo mật. Vì các API không có GUI nên kiểm thử API được thực hiện ở tầng nghiệp vụ (bussiness layer) . Trong quá trình kiểm thử API, dữ liệu được trao đổi từ XML hoặc JSON thông qua các yêu cầu và phản hồi HTTP ( HTTP requests and responses). Đây là những công nghệ độc lập và sẽ làm việc với nhiều ngôn ngữ lập trình và công nghệ khác nhau.

So sánh API testing và GUI testing

API testing phù hợp hơn cho test automation và test liên tục (đặc biệt trong Agile và DevOps) so với GUI testing. Bởi vì:

  • Độ phức tạp của hệ thống: GUI testing không thể xác minh đầy đủ các fuctional path và API / service liên quan đến kiến trúc đa nhiệm. API được coi là giao diện ổn định nhất cho hệ thống được test.
  • Các chu kỳ release ngắn với các vòng phản hồi nhanh: Các nhóm Agile và DevOps làm việc với các vòng lặp ngắn (short iterations) và các vòng phản hồi nhanh (fast feedback loops) thấy rằng GUI testing  yêu cầu làm lại đáng kể để theo kịp sự thay đổi thường xuyên. Testing ở lớp API ít hơn và dễ bảo trì hơn.

Vì những lý do này, chúng ta nên tăng API testing và giảm sự phụ thuộc vào GUI testing. API testing được khuyến nghị cho phần lớn các automation test và thử nghiệm càng nhiều càng tốt. GUI testing sau đó được dành riêng để xác thực các trường hợp ở system level, mobile testing, và usability testing.

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

API

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:

API

  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 testing API testing
Lập trình viên thực hiện Tester 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 code Tester không thể truy cập vào source code
Phải kiểm tra cả UI Chỉ 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 vi Phạm vi rộng hơn
Thường được chạy trước khi build Thườ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ó là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


3 lý do chúng ta cần kiểm thử API

1. Kiểm thử ứng dụng sớm và không cần giao diện người dùng

Khi bạn tìm thấy lỗi càng muộn thì càng mất nhiều thời gian, công sức để fix nó. API testing đưa người kiểm thử tham gia sớm vào vòng đời phát triển sản phẩm. Với API testing, bạn có thể bắt đầu kiểm thử ứng dụng sớm ngay cả khi không có giao diện người dùng. Điều này giúp xác định và khắc phục sớm các vấn đề trong vòng đời phát triển, nếu không thì sẽ tốn kém để khắc phục khi được xác định trong quá trình kiểm thử GUI. Ưu điểm của việc kiểm thử API là rất nhiều logic có thể được kiểm tra mà không bị phụ thuộc vào UI.

2. Để có được một chiến lược kiểm thử tự động tuyệt vời và giảm chi phí.

Nếu chúng ta hiểu được "Kim tự tháp Tự động hoá" ( Automation pyramid), chúng ta có thể đưa ra một chiến lược tự động hóa hiệu quả.

Khái niệm kim tự tháp được Mike Cohn phát triển và đã được mô tả trong cuốn sách "Thành công với Agile". Tầng thứ nhất của kim tự tháp là Unit test. Thực hiện unit test là cách nhanh nhất và mang lại kết quả cao nhất. Tầng thứ 2 là kiểm thử API dựa trên service layer. Cuối cùng, ở đỉnh của kim tự tháp là kiểm thử UI.

Đi từ tầng dưới kim tự tháp lên trên, chi phí liên quan đến việc tạo ra và duy trì các phương pháp kiểm thử, thời gian thực hiện kiểm thử, phạm vi kiểm thử sẽ tăng lên. Các kim tự tháp tự động (Automation pyramid) nói rằng bạn nên làm nhiều hơn nữa kiểm thử tự động thông qua Unit test và API hơn là kiểm thử dựa trên GUI. Sự thành công của Agile rất phụ thuộc vào phản hồi (feedback) sớm. Trong các thực tiễn, việc tích hợp liên tục, thời gian kiểm thử hồi quy GUI và nhận lại phản hồi quá dài. Kiểm tra giao diện người dùng rất tốn kém để phát triển và duy trì. Một sự thay đổi nhỏ trong giao diện người dùng cũng có thể dẫn đến việc thực hiện kiểm thử lại rất nhiều.

Trong một số trường hợp, người kiểm thử bắt buộc phải thực hiện tự động hoá ở tầng UI. Tuy nhiên, kiểm thử có thể chậm và tốn nhiều chih phí. Đây là một trong những lý do khiến nhiều công ty thất bại trong nỗ lực thực hiện chiến lược tự động hoá hiệu quả.

API Testing


3. Phát triển phần mềm theo phương pháp Agile và giảm việc thực hiện kiểm thử hồi quy bằng tay

Theo một cuộc khảo sát gần đây của VersionOne, 95% người được hỏi cho biết tổ chức của họ sử dụng phương pháp Agile. Agile không chỉ sử dụng ở những công ty startup và những nhóm phát triển sản phẩm nhỏ. Lý do chính để áp dụng Agile thay vì phương pháp truyền thống là đẩy nhanh việc phân phối sản phẩm và chấp nhận những thay đổi. Agile cũng đã tăng tần số mà các ứng dụng được phát hành, do đó đã tạo ra nhu cầu ngày càng tăng về những phương pháp mới để nhanh chóng kiểm tra chúng. Kiểm tra tự động hóa đã trở thành một yếu tố quan trọng để duy trì tính nhanh chóng. Vì vậy, cần thiết cho các đội Agile tăng mức độ kiểm thử API và giảm sự phụ thuộc của họ vào việc kiểm tra GUI.

Tự động hóa API có thể giảm đáng kể áp lực của kiểm thử hồi quy của nhóm QA. Bằng cách tích hợp kiểm thử tự động API , nhóm QA có thể cung cấp phản hồi nhanh về chất lượng ứng dụng ngay khi được triển khai (deploy). Điều này cung cấp một đánh giá nhanh chóng về hệ thống trước khi kiểm thử GUI. Kiểm thử tự động API yêu cầu code ít hơn và cung cấp kết quả kiểm tra nhanh hơn và phạm vi kiểm tra tốt hơn. API được ổn định sớm và không thay đổi thường xuyên như giao diện người dùng.

API testing là một hình thức thử nghiệm phần mềm độc đáo và đặc biệt có giá trị đối với các doanh nghiệp nắm bắt quá trình hội nhập liên tục. Việc xây dựng trường hợp kiểm thử API trong quá trình phát triển bất kỳ phần mềm hoặc dịch vụ nào có những lợi ích sâu rộng trong các đội, tất cả đều là cách khách hàng trải nghiệm sản phẩm. Làm phần mềm mà khách hàng mục tiêu của bạn sẽ yêu thích là điều thiết yếu cho sự thành công của doanh nghiệp và bằng cách kiểm thử API một cách nghiêm túc và thường xuyên, là một cách đáng tin cậy để đạt được nó.

Postman là một ứng dụng Google Chrome giúp bạn tạo, lưu, gửi yêu cầu HTTP (HTTP request) và kiểm tra dữ liệu phản hồi ( request) . Nó giúp tự động hoá quá trình tạo ra các yêu cầu API và kiểm tra các phản hồi API, cho phép thiết lập một quy trình làm việc rất hiệu quả. Hầu hết các lập trình viên và người kiểm thử đều quen thuộc với Postman. Tuy nhiên, nhiều người sử dụng nó chỉ để kiểm tra phản hồi cho các dịch vụ mà họ đang làm việc trên. Họ không biết về các tính năng mạnh mẽ mà Postman đưa ra như: Collections, Tests and Pre-request scripts. Bài viết này sẽ ra một cái nhìn tổng quát của Postman .

API Testing

Lý do chính tôi thích Postman là vì khả năng tự động hóa mạnh mẽ của nó. Hơn nữa, việc học tập để sử dụng nó là rất dễ dàng và ứng dụng cung cấp một giao diện người dùng rất trực quan để kiểm tra yêu cầu máy chủ của bạn.Nó sẽ xác nhận hợp lệ mỗi lần nếu đáp ứng đúng. Viết test trên Postman được thực hiện dễ dàng bằng các đoạn mã JavaScript, cho phép cả những tester thiếu kinh nghiệm kiểm thử một cách hiệu quả.

Postman là hệ thống thời gian thực giúp lập trình viên và QA kiểm thử API dễ dàng hơn. Postman giúp làm giảm áp lực khi thực hiện kiểm thử hồi quy của nhóm QA. Việc tự động hoá kiểm thử API giúp tiết kiệm thời gian hơn là tự động hoá kiểm thử UI. Ưu điểm chính của tự động hóa API là chúng ta có thể truy cập vào ứng dụng mà không có giao diện người dùng. Điều này cung cấp một đánh giá ban đầu về tổng thể sức mạnh hệ thống trước khi bắt tay vào kiểm thử GUI.

Bằng cách tích hợp tự động hoá kiểm thử API, nhóm QA có thể cung cấp phản hồi nhanh về chất lượng của ứng dụng ngay khi được triển khai.


Bài viết được dịch lại từ nguồn:

About the author

  • Anh Tester

    Đường dẫu khó chân vẫn cần bước đi
    Đời dẫu khổ tâm vẫn cần nghĩ thấu