+5

Ứng dụng xây dựng CI/CD Tester nên biết

Mayfest2023

Gần đây cái tên CI/CD thường được nhắc đến khá nhiều, làm bản thân mình cũng tò mò, và chắc hẳn bạn cũng tò mò giống mình.

Vậy, là một tester, bạn cũng nên bắt kịp "Trend" này để tích lũy thêm kiến thức của mình, kể cả cho dù bạn chưa thực sự bắt tay vào công việc Automated Testing.

Xu hướng Testops khiến tự động hóa kiểm thử hay "Automated Testing", hay ae chúng ta hay tìm từ khóa Automation Testing-> trở thành một phần quan trọng trong quá trình phát triển phần mềm hiện nay.

Nó giúp đảm bảo chất lượng và độ tin cậy của ứng dụng thông qua việc tự động thực hiện các kịch bản kiểm thử.

Tuy nhiên, việc thực hiện kiểm thử thủ công có thể tốn thời gian và công sức. Đây là lúc CI/CD và kiểm thử tự động "vào việc".

I: CI/CD là gì

CI/CD là viết tắt của Continuous Integration (Tích hợp liên tục) và Continuous Delivery (Triển khai liên tục).

Trước khi nói tới việc áp dụng xây dựng CI/CD vào automated testing, thì mình muốn cho bạn hiểu rõ CI/CD là gì, build CI/CD cả team dev, tester làm cái gì,

Dưới đây là đoạn mình đã tham khảo và thấy chính xác những gì mình muốn truyền tải, có ghi nguồn, bạn có thể đọc thêm nhưng đừng quên mục đích chính là tìm hiểu áp dụng xây dựng CI/CD và công việc automated testing của bạn nha.

1: CI là gì?

Là phương pháp phát triển phần mềm yêu cầu các thành viên của team tích hợp công việc của họ thường xuyên, mỗi ngày ít nhất một lần. Mỗi tích hợp được "build" tự động (bao gồm cả test) nhằm phát hiện lỗi nhanh nhất có thể. Cả team nhận thấy rằng cách tiếp cận này giảm thiểu vấn đề tích hợp và cho phép phát triển phần mềm nhanh hơn.

Một kịch bản CI bắt đầu bằng việc developer commit code lên repository (github chẳng hạn). Bất kỳ thay đổi nào cũng sẽ trigger một vòng đời CI. Các bước trong một kịch bản CI thường như sau:

  • Đầu tiên, developer commit code lên repo.
  • CI server giám sát repo và kiểm tra xem liệu có thay đổi nào trên repo hay không (liên tục, chẳng hạn mỗi phút 1 lần)
  • Ngay khi commit xảy ra, CI server phát hiện repo có thay đổi, nên nó nhận code mới nhất từ repo và sau đó build, chạy unit và integration test
  • CI server sẽ sinh ra các feedback và gửi đến các member của project
  • CI server tiếp tục chờ thay đổi ở repo

Mỗi lần developer làm xong task, họ phải chạy một private build (tức là chạy phần mềm trên local trước), check choác cẩn thận và commit code lên repo khi đã thấy ổn. Bước này xảy ra thường xuyên và ở bất kỳ thời điểm nào trong ngày. Việc build tích hợp sẽ không xảy ra khi những thay đổi này chưa ảnh hưởng đến repo (kiểu như bạn commit mà chưa được merge vậy).

Một trong những tuyên ngôn của CI là "Build Software at Every Change". Mục đích là để tránh những câu kiểu như "Ớ, phần này chạy trên máy em bình thường mà" 😄

Vấn đề sẽ được tìm ra sớm bằng cách build thường xuyên, và để CI hoạt động hiệu quả trong project, tốt nhất là developer phải commit code thường xuyên hơn. Đợi hơn một ngày để commit code lên repo có thể khiến việc tích hợp tốn thời gian và code mình dùng có thể không phải là code mới nhất.

image.png

Túm lại, thì lợi ích của việc sử dụng CI sẽ là:

  • Giảm thiểu rủi ro nhờ việc phát hiện lỗi và fix sớm, tăng chất lượng phần mềm nhờ việc tự động test và inspect (đây cũng là một trong những lợi ích của CI, code được inspect tự động dựa theo config đã cài đặt, đảm bảo coding style, chẳng hạn một function chỉ được dài không quá 10 dòng code ...)
  • Giảm thiểu những quy trình thủ công lặp đi lặp lại (build css, js, migrate, test...), thay vì đó là build tự động, chạy test tự động
  • Sinh ra phần mềm có thể deploy ở bất kì thời gian, địa điểm

2: CD là gì?

image.png

Trong khi Continuous Integration là quy trình để build và test tự động, thì Continuous Delivery (tạm dịch là chuyển giao liên tục) lại nâng cao hơn một chút, bằng cách triển khai tất cả thay đổi về code (đã được build và test) đến môi trường testing hoặc staging. Continuous Delivery cho phép developer tự động hóa phần testing bên cạnh việc sử dụng unit test, kiểm tra phần mềm qua nhiều thước đo trước khi triển khai cho khách hàng (production). Những bài test này bao gồm UI testing, load testing, integration testing, API testing...

Nó tự động hoàn toàn quy trình release phần mềm.

Continuous Delivery được thực hiện bằng cách sử dụng Deployment Pipeline.

Deployment Pipeline chia quy trình chuyển giao phần mềm thành các giai đoạn. Mỗi giai đoạn có mục tiêu xác minh chất lượng của các tính năng mới từ một góc độ khác nhau để kiểm định chức năng và tránh lỗi ảnh hưởng đến người dùng. Pipeline sẽ cung cấp phản hồi cho nhóm trong việc cung cấp tính năng mới. Ở góc độ trừu tượng hơn, deployment pipeline là quy trình để chuyển phần mềm từ version control đến tay người dùng. Mỗi thay đổi đến phần mềm sẽ đi qua một quy trình phức tạp để được phát hành.

image.png

Đây là các anh DEV thì sẽ hiểu rõ đến mức này nha, cái này bạn tham khảo thêm nguồn ở đây nếu thấy hứng thú, nhưng đừng quên nhiệm vụ, đọc tiếp đoạn tiếp theo ha.

https://viblo.asia/p/ci-cd-va-devops-07LKXYXDZV4

II: Áp dụng CI/CD vào kiểm thử tự động

Nó đề cập đến việc tự động hóa quá trình xây dựng, kiểm thử và triển khai ứng dụng. Khi áp dụng CI/CD vào kiểm thử tự động, các bước sau sẽ được thực hiện:

1: Tích hợp liên tục (Continuous Integration):

  • Khi có sự thay đổi trong mã nguồn, CI/CD tự động kích hoạt quy trình kiểm thử.
  • Hệ thống CI/CD (như Jenkins) tải mã nguồn mới nhất và xây dựng ứng dụng từ đó.
  • Các bước xây dựng bao gồm biên dịch, cài đặt các phụ thuộc và tạo bản build của ứng dụng.

2: Kiểm thử liên tục (Continuous Testing):

  • Sau khi xây dựng thành công, CI/CD tự động chạy các kịch bản kiểm thử tự động.
  • Các kịch bản kiểm thử tự động được viết bằng ngôn ngữ và công cụ kiểm thử như Selenium.
  • Kịch bản kiểm thử tự động tương tác với ứng dụng như một người dùng thực tế, kiểm tra các chức năng và xác nhận kết quả.

3: Triển khai liên tục (Continuous Deployment):

  • Nếu các kịch bản kiểm thử tự động thành công, CI/CD tự động triển khai ứng dụng lên môi trường thử nghiệm hoặc sản phẩm.
  • Điều này giúp đảm bảo rằng những thay đổi trong ứng dụng được triển khai một cách nhanh chóng và liên tục.

Lợi ích của việc xây dựng quy trình CI/CD trong kiểm thử tự động là:

  • Phát hiện lỗi sớm: Tự động hóa kiểm thử giúp phát hiện lỗi ngay từ giai đoạn sớm của quy trình phát triển, giúp giảm thời gian và công sức cần thiết để sửa chữa lỗi.
  • Tăng tốc độ phát triển: Quy trình CI/CD cho phép phát triển và triển khai nhanh chóng, đồng thời đảm bảo tích hợp và kiểm thử liên tục.
  • Đảm bảo chất lượng: Kiểm thử tự động giúp đảm bảo rằng ứng dụng hoạt động đúng và không gặp lỗi khi triển khai.
  • Tự động hóa lặp đi lặp lại: Quy trình CI/CD giảm thiểu sự can thiệp thủ công, tiết kiệm thời gian và tăng tính nhất quán của quy trình kiểm thử.

Tóm lại, việc xây dựng quy trình CI/CD trong kiểm thử tự động là một bước quan trọng trong việc tăng cường chất lượng và hiệu suất của quy trình phát triển phần mềm. Bằng cách tự động hóa kiểm thử và triển khai, bạn có thể đạt được sự liên tục và đáng tin cậy trong việc phát triển và triển khai ứng dụng.

Để áp dụng được cần bạn phải có 1 bộ test plan đủ tốt để cover các khả năng. không chỉ test chức năng, mà còn test về hiệu suất, bảo mật, tính sẵn sàng.

Trong CI thì ngoại trừ Unit test được làm tự động thì các loại test còn lại sẽ được làm thủ công. Nhưng với CD thì nó được tự động hết.

Chính vì thế nó yêu cầu cao hơn, khắt khe hơn vì nếu không sẽ ảnh hưởng trực tiếp đến end user.

Trước khi deploy manually thì có thể làm gì thì còn tùy vào yêu cầu dự án. Có dự án đơn giản thì chỉ cần các bước test trước không có lỗi thì sẽ đủ điều kiện, có những dự án phức tạp hơn thì có thể có thêm các bước verify chất lượng khác.

III: Các bước áp dụng thực tế xây dựng CI CD vào dự án kiểm thử:

Các bước trên cũng chỉ mới là lý thuyết cơ bản, bây giờ mình sẽ liệt kê các bước triển khai tiếp theo, cụ thể hơn chút nữa như sau:

Bước 1: Chuẩn bị môi trường

  • Đảm bảo rằng bạn đã cài đặt và cấu hình các công cụ cần thiết, bao gồm:
  • Một hệ thống quản lý phiên bản như Git để theo dõi mã nguồn.
  • Một công cụ kiểm thử tự động như Selenium để thực hiện các kịch bản kiểm thử.
  • Một máy chủ CI/CD như Jenkins để tự động hóa quy trình.

Bước 2: Thiết lập quy trình CI/CD

  • Tạo repository Git cho dự án kiểm thử tự động của bạn.
  • Thiết lập Jenkins và cấu hình kết nối với repository Git.
  • Thiết lập Jenkins để theo dõi các thay đổi trong repository và tự động kích hoạt quy trình CI/CD khi có commit mới.
  • Cấu hình Jenkins để xây dựng ứng dụng từ mã nguồn, cài đặt các phụ thuộc và tạo bản build.

Bước 3: Tự động hóa kiểm thử

  • Viết các kịch bản kiểm thử tự động bằng Selenium. Đảm bảo các kịch bản kiểm thử đủ toàn diện và bao gồm các trường hợp kiểm thử quan trọng.
  • Đảm bảo rằng các kịch bản kiểm thử có thể chạy độc lập và không phụ thuộc vào nhau.
  • Cấu trúc lại dự án để kịch bản kiểm thử nằm trong một thư mục riêng.

Bước 4: Cấu hình kiểm thử tự động trong Jenkins

  • Cấu hình Jenkins để chạy các kịch bản kiểm thử tự động sau khi xây dựng thành công.
  • Đảm bảo Jenkins được cấu hình để chạy kịch bản kiểm thử trên một môi trường tách biệt, chẳng hạn qua việc sử dụng Docker container.

Bước 5: Xử lý kết quả kiểm thử

  • Cấu hình Jenkins để xử lý kết quả kiểm thử. Ví dụ: nếu có lỗi xảy ra trong quá trình kiểm thử, Jenkins sẽ gửi thông báo cho nhóm phát triển.
  • Lưu trữ kết quả kiểm thử để có thể truy cập và theo dõi sau này.

Bước 6: Triển khai ứng dụng

  • Cấu hình Jenkins để triển khai ứng dụng sau khi quá trình kiểm thử thành công.
  • Triển khai ứng dụng lên môi trường staging hoặc môi trường thử nghiệm để tiếp tục kiểm tra.

Bước 7: Tối ưu hóa và cải thiện liên tục

  • Đánh giá kết quả kiểm thử và thu thập phản hồi từ nhóm phát triển và người dùng.
  • Dựa vào phản hồi, cải thiện kịch bản kiểm thử, bổ sung các trường hợp kiểm thử mới và tối ưu hóa quy trình CI/CD.

Lưu ý: Bài hướng dẫn này chỉ mang tính chất tổng quan và một số cấu hình chi tiết có thể khác nhau tùy theo công cụ và môi trường cụ thể của bạn. Bạn nên tìm hiểu và tuỳ chỉnh hướng dẫn này dựa trên nhu cầu và yêu cầu của dự án kiểm thử tự động của bạn.

Cái mình muốn là tìm được Senior chia sẻ câu chuyện áp dụng quy trình cho mọi người cụ thể, từ đó chúng ta có tu duy về việc tìm kiếm, việc hỏi, áp dụng thực tiễn hơn

Chúc các bạn nạp kiến thức vui vẻ nha ❤️

Có thể follow mình hoặc tìm kiếm tên mình trên phây búc để chúng ta thực sự kết nối nhen


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.