Mình nghe nói đến docker từ năm 2017 nhưng lúc đó cũng chỉ là vịt nghe sấm, cũng cố đọc mấy bài về docker nhưng vẫn chưa mường tượng là sẽ làm thế nào và docker giúp gì cho testing. Mới đến gần đây khi team mình định xây dựng CI pipeline, thì mình mới nghiên cứu lại về docker và lần này mình đã hiểu hơn về docker. Mình quyết định viết bài này để nói đến những tác dụng mà docker có thể đem lại cho development nói chung và testing nói riêng.
Nội dung bài viết
I. Docker là gì?
Link docker: https://www.docker.com/
Docker lấy ý tưởng từ việc hàng hóa được ship từ cảng về, hàng được đóng trong các container khác nhau. Vì đóng trên các container riêng rẽ, nên 2 container ở bên cạnh như là hoàn toàn tách biệt, 1 cái có thể chứa rượu và 1 cái có thể chứa ô tô. Việc đóng hàng riêng rẽ như vậy giúp cho 1 con tàu thủy, trong vòng 1 lần có thể ship cả ngàn loại hàng hóa khác nhau mà ko phải lo hàng này ảnh hưởng hàng kia.
Trong phần mềm, chúng ta đã quá quen thuộc với việc cài đặt và deploy phần mềm. Khi chúng ta có 3 môi trường khác nhau, chúng ta phải lặp đi lặp lại việc setup môi trường và config ở 3 nơi, chưa kể đến việc môi trường 3 nơi này có những sự khác biệt nhau dẫn đến sự không đồng nhất, gây ra những lỗi rất khó fix cho team. Ngày trước để hạn chế những lỗi này, người ta thường sử dụng các Virtual Machine (VM) để đồng nhất về mặt môi trường nhưng chưa hạn chế vấn đề về resource tốn khá nhiều và việc configuration tốn nhiều thời gian, và rất có khả năng human mistakes sẽ xảy ra.
Lấy ý tưởng từ các container, docker giúp cho quá trình phát triển trở nên dễ dàng hơn, khi đồng nhất các config về 1 nơi và đảm bảo application khi run trên docker ở môi trường nào cũng sẽ giống hệt nhau. Và 1 host có thể run được nhiều application 1 lúc mà không sợ app này ảnh hưởng app khác, đây là đặc tính isolated của container.
II. Docker giúp được gì cho testing
Docker mang lại nhiều giá trị cho team như đã nói ở trên, luôn đảm bảo môi trường đồng nhất từ Local, Staging, Production. Ngoài ra, docker còn mở ra các cách thức khác nhau giúp cho team tester có thể xây dựng được automation test flow dễ dàng hơn. Vì sao lại như thế?
Trước đây, khi tester làm automation chỉ biết sử dụng đến Jenkin (hoặc các tool CI khác) để có thể trigger run test tự động theo giờ, còn việc run trong bao lâu thì chưa control được. Bạn có thể nói là bạn có thể run parallel để giảm thời gian run test, nhưng nếu bạn có quá nhiều test thì sao, và bạn có nhiều browser phải test thì sao?
Đó là lúc docker nhảy vào, giải quyết bài toán. Docker không hạn chế việc tạo ra bao nhiêu container, điều này giúp bạn có thể xác định 1 kiểu run test trên 1 container và run nhiều container song song. Ví dụ: run smoke test trên 1 container với chrome, và run feature test trên 1 container với firefox… Tất cả những test này chạy parallel, giúp giảm thiểu nhiều thời gian run test. Trong lúc run auto UI test, bạn cũng có thể setup 1 container để chạy api test. Wow, save time and get rapid feedback!
III. Kết luận
Docker sẽ giúp automation test tiến thêm 1 bước nữa, quá trình phát triển phần mềm sẽ được hưởng lợi từ việc giảm thời gian run test và có được feedback sớm. Tuy nhiên, docker là 1 thứ tương đối mới so với tester, cũng sẽ phải mất 1 thời gian để làm quen và học cách sử dụng. Trong các bài sau, mình sẽ viết thêm về docker cũng như 1 vài sample để run 1 vài loại test trên docker như selenium webdriver, serenity bdd, rest-assured…Stay tuned!
Hình ảnh tham khảo từ sách: Docker in practice