Chương 2. Xây dựng ứng dụng SOML trên microservices
2.4. Kiểm thử trong microservices
Các microservice trong kiến trúc microservices chỉ thực hiện một chức năng duy nhất của hệ thống, điều này đảm bảo các microservice trong hệ thống luôn ổn định, ít có thay đổi và khi kiểm thử trong kiến trúc microservices ta cần kiểm thử ở nhiều môi trường khác nhau. Sử dụng kiểm thử tự động sẽ là giải pháp tối ưu cho các hệ thống xây dựng trên kiến trúc microservices. Kiểm thử tự động là quá trình kiểm tra hệ thống với dữ liệu đầu vào và đầu ra đã xác định trước một cách tự động. Việc áp dụng kiểm thử tự động sẽ mang lại rất nhiều ưu điểm như nâng cao hiệu quả, tăng độ tin cậy, cải thiện chất lượng sản phẩm, tốc độ kiểm thử nhanh và đặc biệt là giảm chi phí cho hệ thống trong khâu kiểm thử. Kiến trúc microservices áp dụng mô hình kiểm thử kim tự tháp của Mike Cohn để kiểm thử tự động các hệ thống được xây dựng trên nó.
2.4.1. Mô hình kiểm thử kim tự tháp Mike Cohn
Mô hình kiểm thử kim tự tháp do Mike Cohn đề xuất vào năm 2010 nhằm liệt kê các mức kiểm thử cần để thực hiện quá trình kiểm thử tự động trong hệ thống (Hình 2.18).
Hình 2.18.Mô hình kiểm thử kim tự tháp Mike Cohn (14)
(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices
Theo mô hình kiểm thử kim tự tháp của Mike Cohn thì sẽ có ba mức chính để kiểm thử tự động một hệ thống, đó là: giao diện (UI), dịch vụ (service) và đơn vị (unit). Theo Mike Cohn có hai chiến lược để kiểm thực hiện kiểm thử trong mô hình kiểm thử kim tự tháp là từ trên xuống dưới (Top-Down) và từ dưới lên trên (Bottom Up).
Chiến lược kiểm thử từ trên xuống dưới thực hiện kiểm thử từ mức giao diện người dùng đến mức dịch vụ và cuối cùng là kiểm thử đơn vị. Áp dụng chiến lược này giúp hệ thống nhanh chóng có phiên bản kiểm thử các chức năng chính và có thể thẩm định tính dùng được của hệ thống sớm. Tuy nhiên chiến lược kiểm thử từ trên xuống chỉ thích hợp cho các hệ thống độc lập vì nếu các hệ thống có mối liên hệ với nhau khi áp dụng kiểm thử từ trên xuống sẽ rất khó mô tả các dịch vụ ở mức thấp.
Chiến lược kiểm thử từ dưới lên trên có trình tự thực hiện các mức kiểm thử ngược lại so với chiến lược kiểm thử từ trên xuống. Trong chiến lược kiểm thử này, Mike Cohn đề xuất việc kiểm thử bắt đầu từ mức thấp nhất của kim tự tháp là kiểm thử đơn vị sau đó di chuyển lên kiểm thử dịch vụ và cuối cùng là giao diện người dùng. Ưu điểm của chiến lược này chính là tăng tính tin cậy cho kiểm thử tự động, khắc phục được các nhược điểm của chiến lược kiểm thử từ trên xuống.
Trong SOML tôi thực hiện kiểm thử từng microservice trong SOML dựa trên chiến lược kiểm thử từ dưới lên trong mô hình kiểm thử kim tự tháp Mike Cohn.
Sau đó tôi sẽ thực hiển kiểm thử tích hợp các microservice trong SOML. Để kiểm thử mỗi microservice trong SOML, đầu tiên tôi sẽ kiểm thử đơn vị cho mỗi hành vi trong mỗi microservice sau đó là kiểm thử từng microservice mà chưa gắn giao diện người dùng vào micoservice đó. Cuối cùng tôi dùng kiểm thử đầu cuối (end to end) để kiểm thử microservice đó khi có giao diện người dùng. Việc kiểm thử đầu cuối này sẽ được lặp lại khi tôi thực hiện kiểm thử tích hợp cả hệ thống.
2.4.2. Kiểm thử đơn vị
Kiểm thử đơn vị được thực hiện đồng thời với quá trình xây dựng các microservice trong kiến trúc microservices. Tại mỗi microservice, kiểm thử đơn vị chỉ kiểm thử một hành vi duy nhất trong mỗi microservice. Vì vậy việc viết mã kiểm thử cho kiểm thử đơn vị sẽ rất nhanh chóng và dễ dàng.
Trong SOML các mã kiểm thử đơn vị sẽ được gắn trực tiếp vào mỗi misrocervice để kiểm thử từng hàm nhỏ nhất trong nó. Ví dụ để kiểm thử đơn vị trong Stories services tôi thực hiện kiểm thử đơn vị các hành vi trong
microservice này. Các hành vi đó bao gồm: tạo story (create), sửa story (edit, update), xóa story (delete), hiển thị một story (show) và hiển thị danh sách các story (list) (Hình 2.19).
Hình 2.19.Kiểm thử đơn vị trong Stories service 2.4.3. Kiểm thử dịch vụ
Kiểm thử dịch vụ thực hiện kiểm thử các dịch vụ mà không quan tâm đến các giao diện người dùng của các dịch vụ đó. Trong microservices ta có thể thực hiện kiểm thử dịch vụ cho mỗi microservice một cách độc lập như vậy việc kiểm thử sẽ nhanh chóng xác định và sửa các lỗi trong các microservice.
(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices
Hình 2.20.Kiểm thử dịch vụ trong Stories service
Theo hình 2.20, trong SOML tôi cũng tiến hành kiểm thử dịch vụ cho mỗi microservice một cách độc lập. Mỗi microservice sẽ được kiểm thử ở mức dịch vụ mà không cần quan tâm đến các giao diện người dùng của microservice đó.
Tuy nhiên, các microservice trong SOML vẫn cần phải được kiểm thử lại với dữ liệu thật và trong các tình huống tín hiệu mạng thấp thời gian dành cho kiểm thử dịch vụ sẽ bị tăng lên.
2.4.4. Kiểm thử đầu cuối
Kiểm thử đầu cuối chính là kiểm thử ở mức giao diện trong mô hình kiểm thử kim tự tháp. Kiểm thử đầu cuối thực hiện kiểm thử hoạt động tổng thể của ứng dụng bằng cách kiểm thử quá trình thực hiện chức năng từ đầu đến cuối quá trình xử lý, đi từ giao diện đến giao tiếp với nguồn dữ liệu. Trong microservices việc áp dụng kiểm thử đầu cuối cho mỗi microservice là tiến hành kiểm thử tất cả quá trình thực hiện mỗi microservice từ API đến các thao tác trên cơ sở dữ liệu của chúng. Như vậy trong phạm vi một microservice có thể thấy kiểm thử đầu cuối chính là kiểm thử hệ thống cho microservice đó. (Hình 2.21)
Hình 2.21.Kiểm thử đầu cuối trong Stories service 2.4.5. Kiểm thử tích hợp
Trong kiến trúc microservices ta có thể sử dụng phương pháp kiểm thử đầu cuối để kiểm thử tích hợp các microservice trong hệ thống (Hình 2.22)
Hình 2.22.Kiểm thử tích hợp
Sau khi đã kiểm thử cho từng microservice trong hệ thống chúng ta sẽ tiến hành kiểm thử tích hợp bằng cách kiểm thử đầu cuối cho toàn hệ thống. Việc kiểm thử đầu cuối cho mỗi microservice thì rất đơn giản nhưng khi tích hợp
(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices(LUAN.van.THAC.si).phat.trien.phan.mem.dua.tren.microservices
chúng lại thì lại rất khó khăn, đặc biệt là với các hệ thống lớn có nhiều microservice. Để khắc phục điều đó trong SOML, tôi thực hiện quá trình tích hợp liên tục (continuous integration) để thực hiện kiểm thử tích hợp. Mỗi khi hoàn thành một microservice nào tôi thực hiện triển khai và tích hợp nó vào hệ thống và thực hiện kiểm thử tích hợp microserice đó với các micorservice mà nó phụ thuộc trong hệ thống. Ưu điểm của phương pháp này là nhanh chóng phát hiện được lỗi nhưng nó lại cần phải có thêm một đội ngũ nhân viên để thực hiện việc này và mối quan hệ giữa các microservice trong hệ thống phải được xác định rõ ràng ngay từ đầu.
Ở chương 2, tôi đã trình bày các bước thiết kế, xây dựng hệ thống trên kiến trúc microservices từ mô hình hóa các microservice, triển khai và kiểm thử và áp dụng vào thiết kế, xây dựng ứng dụng mạng xã hội SOML. Chương tiếp theo, dựa trên các kiến thức về kiến trúc microservices và kinh nghiệm xây dựng ứng dụng SOML trên kiến trúc microservice tôi sẽ đưa ra một số phân tích, đánh giá về ưu nhược điểm của kiến trúc microservices và khả năng áp dụng kiến trúc microservices trong xây dựng và phát triển phần mềm.