19/11/2018, 19:43

Interface Testing là gì? Các loại, chiến lược và công cụ?

Giới thiệu về Interface testing: Khi một ứng dụng, một phần mềm hay một trang web được phát triển, có các thành phần cấu tạo nên nó (ví dụ: server, database,...). Kết nối tích hợp và tạo điều kiện cho sự kết nối giữa các thành phần này được gọi là interface. Nói một cách đơn giản, một interface ...

Giới thiệu về Interface testing:

Khi một ứng dụng, một phần mềm hay một trang web được phát triển, có các thành phần cấu tạo nên nó (ví dụ: server, database,...). Kết nối tích hợp và tạo điều kiện cho sự kết nối giữa các thành phần này được gọi là interface.

Nói một cách đơn giản, một interface là một phần mềm bao gồm một bộ lệnh, message, ....

Bài viết này sẽ giúp bạn có một cái nhìn tổng quan hoàn chỉnh về Interface testing cùng với nhu cầu, các loại, chiến lược, checklist và một số tool của nó theo một cách đơn giản để làm phong phú thêm kiến thức của bạn về các khái niệm.

Với một máy tính, một interface có thể là các API, web service, ... Sự giao tiếp giữa các thành phần khác nhau của một phần mềm hoặc một ứng dụng hoặc một website có thể ảnh hưởng đến hiệu suất tổng thể, do đó giao tiếp này, tức là interface cũng cần được test và xác nhận.

Việc kiểm thử được thực hiện để kiểm chứng rằng interface functionality được gọi là interface testing.

2 thành phần phổ biến của Interface testing bao gồm:

  • Giao tiếp giữa web server và application server
  • Giao tiếp giữa database server và application server

Khi nào, và tại sao nên kiểm thử Interface?

Dưới đây là 3 phase của Interface testing trong một vòng đời giao tiếp:

1) Cấu hình và phát triển:

Khi một interface được cấu hình, và mỗi lần việc phát triển bắt đầu, các cấu hình cần được xác minh theo requirement.

2) Validation:

Khi kết thúc việc phát triển, interface cần được xác thực và xác minh, nó có thể được thực hiện như một phần của unit testing.

3) Bảo trì:

Khi toàn bộ sản phẩm đã sẵn sàng, được deploy và hoạt động, sự giao tiếp cần được theo dõi cho hiệu suất của nó và bất kỳ vấn đề mới được sản xuất do sự thay đổi hoặc giảm hiệu suất.

Khi chúng ta bắt đầu phát triển một interface, chúng ta cần đảm bảo rằng chúng ta đang không sản xuất bất kỳ một defect nào trong code và vì thế cần phải kiểm thử interface để xác minh rằng việc thêm code mới không gây thêm bất kỳ một lỗi mới nào. Điều đó sẽ giúp bạn xác minh được interface có bị lỗi hay không theo yêu cầu.

Khi chúng ta đã hài lòng với interface, chúng ta xác thực nó cho luồng công việc dự kiến, data, ... Chúng ta có thể chạy performance, test với dữ liệu lớn và kiểm tra xem interface đáp ứng tốt như thế nào. Nó sẽ tiết kiệm nhiều thời gian để fix defect sau đó.

Tóm lại, Interface testing được thực hiện để:

  • Kiểm tra xem việc thực thi server có đúng không.
  • Xử lý lỗi được thực hiện đúng cách, và các thông báo lỗi thích hợp được hiển thị cho các truy vấn được thực hiện bởi ứng dụng hoặc phần mềm.
  • Để kiểm tra kết quả khi kết nối tới máy chủ được reset.
  • Để kiểm tra độ bảo mật khi các thành phần giao tiếp với nhau.
  • Để kiểm tra mức độ ảnh hưởng của lỗi mất kết nối giữa các thành phần.

Các loại Interface Testing:

Interface testing về cơ bản được thực hiện trên lớp messaging layer của kiến trúc hệ thống. Nó chủ yếu liên quan đến việc kiểm tra REST API hoặc SOAP web service với JSON hoặc XML.

Các loại Interface testing liên quan đến các hoạt động dưới đây:

  • Unit Testing: test chức năng của mỗi hoạt động riêng rẽ (trong một function)
  • Functional Testing: test chức năng của các kịch bản rộng hơn liên quan đến tạo test case, validation, hồi quy, ...
  • Load Testing: xác định hiệu suất dưới tải, chủ yếu sử dụng các test case chức năng.
  • Security Testing: test cơ chế bảo mật và nó bao gồm test thâm nhập cũng như kiểm soát truy cập xác nhận, mã hóa, ...
  • Phát hiện lỗi chạy thời gian: Theo dõi một ứng dụng về các vấn đề như: cuộc đua thời gian chạy, rò rỉ nguồn lực, ...
  • Workflow testing: nó được thực hiện để đảm bảo nếu interface xử lý luồng workflow của bạn như mong đợi.
  • Individual Systems: việc test này được thực hiện để xác thực tính riêng tư của từng hệ thống. Ví dụ như hệ thống billing và hệ thống quản lý hàng tồn nên được thực hiện riêng rẽ.

Chiến lược hoặc Cách tiếp cận của Interface testing

Giống các loại testing khác, Interface testing cũng quan trọng không kém vì nó đảm bảo các chức năng liền mạch, hiệu suất, ... của các ứng dụng và hệ thống dữ liệu khác nhau, bằng cách xác minh sự kết nối giữa database, mạng và hệ thống.

Interface testing trở nên cực kỳ quan trọng khi chúng ta xác minh sự phụ thuộc của ứng dụng vào các ứng dụng khác.

Dưới đây là một vài step đảm bảo Interface testing thành công:

1) Xác định yêu cầu:

Trước khi tạo test Interface, việc cần thiết là hiểu ứng dụng. Vì vậy hãy cố gắng tìm các câu trả lời cho các câu hỏi, ví dụ như mục đích của Interface là gì? Workflow của hệ thống hoặc ứng dụng là gì? Các chức năng và tính năng của Interface là gì?

Định nghĩa tất cả các câu trả lời sẽ giúp bạn hiểu được yêu cầu, tìm ra những điểm phức tạp của ứng dụng, và sau đó tạo các test case phù hợp. Thông thường, QA bị miss nó, và sau đó nó dẫn tới nhầm lẫn về yêu cầu hoặc test không đúng.

2) Đầu ra mong đợi:

Bây giờ, chúng ta biết và hiểu yêu cầu tốt rồi, chúng ta sẽ xác định đầu ra mong đợi của việc test. Không chỉ là Pass hay Fail, nó có thể là một vài dữ liệu, gọi đến API khác, ... Nó có thể, không chỉ phức tạp mà còn rủi ro để đo lường kết quả của kết quả mong đợi.

Vì vậy hãy cố gắng tìm những kết quả có thể bằng cách thảo luận với developer.

3) Khởi đầu nhỏ:

Với Interface testing, chúng ta không thể trực tiếp tạo ra những test case lớn, hãy tạo những test case nhỏ hoặc các cuộc gọi tương đối đơn giản. Ít nhất, trong một chức năng nhỏ, tạo test code nhỏ và xác minh nếu đầu ra là đúng mong đợi hay không.

4) Cố gắng tự động:

Việc viết code để test một interface có thể nhàm chán.

Bạn sẽ không chỉ tốn thời gian viết coe mà còn mất thời gian để hiểu format, style, ngôn ngữ lập trình sử dụng cho việc phát triển và sau đó bạn sẽ phải đảm bảo code của bạn không tạo ra vấn đề gì cho ứng dụng hoặc hệ thống.

Vì vậy, tốt nhất là nghiên cứu và tìm một số công cụ tự động để tiết kiệm thời gian của bạn. Nó sẽ dễ dàng và cũng là một quá trình để tiết kiệm thời gian.

5) Xác định điểm bắt đầu và kết thúc:

Trước khi thực thi test, chúng tôi luôn luôn quyết định điểm bắt đầu (entry) và kết thúc (exit) của việc test, cũng như quyết định cách toàn bộ quá trình kiểm thử bắt đầu và kết thúc. Tương tự, chúng tôi cũng cần đo lường mức độ hiệu suất của interface testing.

Để làm điều đó, chúng ta cần tìm câu trả lời cho 2 câu hỏi dưới đây:

  • Thời gian hoàn thành mong đợi của một inteface test là gì?
  • Thời gian hoàn thành thực tế của một interface test là gì?

Bước này liên quan đến các điểm bắt đầu và kết thúc của một interface test sẽ giúp bạn tìm thấy mức độ hiệu suất của việc test. Nó cũng giúp bạn có được quyết định về kế hoạch kiểm tra.

Sự khác nhau giữa Interface testing, Integration và Component Testing

STT Component testing Interface testing Integration Testing
1 Test một thành phần riêng lẻ để xác minh kết quả mong đợi được gọi là component testing Test một interface để xác minh kết quả mong đợi được gọi là interface testing Khi tất cả hoặc một vài module hoặc thành phần được tích hợp để hoạt động chung, sau đó test được thực hiện để xác minh chức năng từ đầu đến cuối của các thành phần được tích hợp được gọi là Integration testing
2 Một thành phần có thể là bất kỳ cái gì, ví dụ: 1 màn hình, 1 module login, ... Interfaces là các dịch vụ web phổ biến, API, chuỗi kết nối, ... Tích hợp có thể là một trường hợp sử dụng hoàn thiện như cho một ứng dụng ngân hàng, login và thêm người thụ hưởng,...
3 Việc testing là tương đối dễ dàng Việc testing là khó khăn và tẻ nhạt Việc testing là hơi dễ dàng nhưng lâu
4 Có thể test thủ công hoặc tự động Hầu hết là test tự động Có thể test thủ công hoặc tự động
5 Việc test bao gồm cả code và GUI của ứng dụng hoặc hệ thống Việc test chỉ được thực hiện với code, không có GUI Việc test bao gồm cả code và GUI, nhưng hầu hết là GUI

Checklist for Interface Testing

Dưới đây là một vài điểm checklist cần quan tâm của Interface Testing:

  • Lỗi 4xx và 5xx nên bao gồm trong việc test bởi vì nó sẽ giúp bạn xác minh xử lý lỗi của phía server và client, lý tưởng, một message thích hợp nên được hiển thị hơn là một lỗi code.
  • Xác thực người dùng bằng cách sử dụng xác thực HTTP.
  • Xác minh tất cả các phương thức được sử dụng trong API hoặc web service như GET, PUT, POST, ...
  • Xác minh việc chuyển đổi từ định dạng JSON sang XML và ngược lại.
  • Xác minh các hoạt động hàng loạt trên một interface có đúng với kết quả mong đợi không.
  • Xác minh time zone của API có khớp với đặc tả của time zone của một khu vực địa lý không.
  • Xác minh nếu truy cập trái phép vào interface thì có thông báo lỗi thích hợp không.
  • Xác minh lỗi kết nối được xử lý đúng chưa.
  • Xác minh nếu một số thành phần bị xóa khỏi ứng dụng thì sau đó interface không tương tác với các thành phần đó nữa.

Best Tools for Interface Testing

Khi các công ty chuyển sang DevOps, tích hợp liên tục và triển khi liên tục, thì việc phản hỏi testing cần nhanh hơn bao giờ hết. Trước khi bạn sẵn sàng giao ứng dụng của bạn, bạn cần đả bảo rằng interface đã được test tốt. Test thủ công interface có thể rất tẻ nhạt, phức tạp và tốn thời gian.

Cách tốt nhất để thực hiện test interface là sử dụng tự động và gộp interface testing vào kế hoạch test tự động của bạn.

Do đó, danh sách các tool dưới đây sẽ giúp bạn hoàn thiện việc test interface nhanh nhất có thể. Tuy nhiên, cá nhân tôi khuyên bạn nên sử dụng SoapUI nhưng mọi yêu cầu đều khác nhau nên chúng ta hãy xem xét 5 công cụ tốt nhất như sau:

1) REST-Assured

Cho ai đang làm việc với Java, REST – Assured là công cụ phù hợp nhất. Thực tế, nó là công cụ tốt nhất cho API testing với Java, bởi vì việc xác thực Rest web service trong Java là khá khó khăn. Nó được thiết kế cho mục đích test, nên nó có thể dễ dàng tích hợp với vài Java-based framework.

Nó có nhiều chức năng có sẵn, do đó bạn không cần phải viết mã từ đầu. Công cụ này tích hợp tốt với Serenity framework và bạn có theere tạo ra các test report tuyệt vời.

2) Postman

Một vài tester không thích sử dụng ngôn ngữ lập trình giống nhau như của IDE. Nên Postman là lưạ chọn tốt nhất cho tự động. Nó cũng là lưạ chọn tốt nhất cho việc test interface khám phá.

Postman is một REST-client đơn giản và có thể nhanh chóng tận dụng Chrome plugin. Nó có sẵn một phiên bản gốc, cái có thể sử dụng cho Mac, Linux và Windows. Nó có UI giúp cho việc xây dựng request và response nhận được.

3) SoapUI

Nếu team của bạn chỉ làm việc với API testing, thì SoapUI là lựa chọn tốt nhất. Nó là công cụ kiểm thử chức năng hoàn chỉnh dành riêng cho API testing. Nó cũng hỗ trợ kiểm thử theo hướng dữ liệu, nơi dữ liệu có thể được truyền vào với dạng CSV hoặc excel. Nó cũng có một bản mất phí được gọi là SoapUI Pro cung cấp các tính năng tốt hơn và cải thiện hơn cho test web service.

Nếu bạn muốn thêm code mở rộng cho một số workflow hoặc tính năng đặc biệt, hãy sử dụng Groovy cho script. Bạn cũng có thể tạo biến toàn cục và sử dụng nó cho toèn bộ test của mình thay vì sử dụng từng biến cho từng đoạn test.

4) JMeter

JMeter được sử dụng rộng rãi cho load test và nó cũng có thể được dùng để test interface. JMeter hỗ trợ record và playback và nó tạo ra báo cáo HTML giúp dễ dàng đọc và hiểu. JMeter tương thích với các file CSV nên nó cho phép tạo các tham số duy nhất để thử nghiệm.

Nó dễ dàng tích hợp với Jenkins để các test của bạn có thể bao gồm trong CI. Nếu bạn mốn sử dụng cùng một công cụ cho test interface và load test thì JMeter là một lưạ chọn xứng đáng.

5) Fiddler

Fiddler giúp bạn check và sử dụng HTTP request. Nó có nhiều tính năng giúp bạn debug các issue của website, với những mở rộng của nó, bạn có thể làm nhiều hơn nữa. Nó cũng là một công cụ tốt cho kiểm thử bảo mật vì nó có thể cấu hình để giải các yêu cầu mã hóa và sau đó sửa đổi các yêu cầu cho mục đích thử nghiệm.

Một trong các extension của Fiddler là APITest extension, nó giúp xác minh hành vi web của interface. Để kiểm tra interface sâu hơn thì bạn có thể sử dụng thư viện FiddlerCore.Net để tạo cơ sở hạ tầng kiểm tra interface.

KẾT LUẬN

Interface testing là một phần rất quan trọng cho các ứng dụng có quy mô lớn, và đó là điều phải làm. Ngay cả các ứng dụng mà CI thường xuyên follow cũng trở nên quan trọng để thực hiện Interface testing.

Interface testing khá phức tạp và không minh bạch, vì vậy một chiến lược thích hợp nên được thiết kế để thực hiện việc test. Ngoài ra, hãy nhớ lấy đầu vào từ team phát triển vì họ hiểu code tốt hơn.

Cách tốt nhất và đơn giản nhất để thực hiện kiểm thử là tự động và tích hợp bộ test trong CI để tiết kiệm thời gian, và đạt được kết quả nhanh hơn.

Link tham khảo: https://www.softwaretestinghelp.com/what-is-interface-testing/

0