Load Testing - Tại sao cần thiết cho phần mềm của bạn?
1. Lời mở đầu
Chào các bạn, cũng khá lâu rồi mình mới quay lại viết bài (ét ô ét), nhìn tên bài viết các bạn lại tưởng sau khoảng thời gian ngụp lặn mình chuyển qua làm Tester nhưng không hề, mình vẫn làm Dev nhé Thực ra gần đây mình cùng anh em trong team có phát triển một ứng dụng cho phép kiểm tra độ chịu tải và hiệu suất của một hệ thống/dịch vụ. Trong quá trình phát triển thì cũng mò mẫm và tìm hiểu được một số loại kiểm thử. Ở bài viết này, mình sẽ chia sẻ những gì mà mình biết được về những loại kiểm thử này dưới góc nhìn của một ông dev xem sao nhé :v
2. Load Testing là gì?
2.1 Bài toán đặt ra
Giả sử rằng một gymer cao to đen hôi muốn kiểm tra khả năng nâng tạ của mình và quyết định tăng trọng lượng tạ lên bằng cách thử thêm vài cục tạ vào và nâng lên vai. Người ta có thể coi đây là một loại "Load Testing" trong thể thao, vì gymer đó đang kiểm tra khả năng chịu tải của cơ thể mình
Hoặc chúng ta có thể xem xét một trang web bán hàng trực tuyến. Để đảm bảo rằng trang web có thể xử lý được một lượng lớn người dùng cùng một lúc, nhà phát triển cần sử dụng phương pháp nào để đánh giá khả năng chịu tải của trang web? Để giải quyết bài toán này, nhà phát triển có thể tạo một kịch bản test để mô phỏng hoạt động của người dùng trên trang web. Ví dụ, kịch bản tải này có thể giả lập 1000 người dùng đăng nhập cùng lúc, thực hiện các thao tác trên trang web như tìm kiếm sản phẩm, xem chi tiết sản phẩm, thêm vào giỏ hàng, và thanh toán.
Khi thực hiện các kịch bản test trên, gymer hay nhà phát triển có thể đánh giá hiệu suất của bản thân cũng như của trang web trong điều kiện tải cao. Kết quả của kiểm thử có thể cho thấy sức khỏe của bản thân hay chính xác là thời gian phản hồi của trang web, số lượng người dùng đồng thời tối đa mà trang web có thể xử lý, và các vấn đề khác liên quan đến hiệu suất.
Dựa vào kết quả trên, gymer có thể điều chỉnh lượng tạ cho phù hợp, cũng như nhà phát triển có thể điều chỉnh cấu hình hệ thống hoặc tối ưu hóa mã nguồn để tăng cường khả năng chịu tải của trang web và đảm bảo rằng nó có thể xử lý được số lượng người dùng lớn cùng một lúc.
2.2. Load Testing
Dựa vào bài toán trên, chắc bạn cũng hình dung ra được phương án kiểm thử được sử dụng là gì đúng không?
Load Testing (kiểm thử tải) là một quá trình kiểm thử phần mềm được thực hiện để đo lường khả năng của một hệ thống hoặc ứng dụng trong điều kiện tải cao. Mục đích của load testing là đánh giá khả năng chịu tải của hệ thống, bao gồm khả năng xử lý số lượng lớn yêu cầu từ người dùng, khả năng đáp ứng nhanh chóng, độ ổn định, và các thời gian phản hồi.
Trong quá trình kiểm thử, các kịch bản tải được tạo ra để mô phỏng hoạt động của người dùng thực tế trên hệ thống. Số lượng người dùng được mô phỏng có thể từ vài chục đến hàng ngàn, tuỳ thuộc vào mục đích của kiểm thử.
Các kết quả của load testing cung cấp thông tin về hiệu suất của hệ thống, giúp nhà phát triển và quản trị viên hệ thống tìm ra các vấn đề tiềm ẩn và điều chỉnh cấu hình hệ thống để tối ưu hóa hiệu suất và khả năng chịu tải của ứng dụng.
Load testing là một phần quan trọng của kiểm thử phần mềm và đóng vai trò quan trọng trong việc đảm bảo chất lượng của phần mềm và tăng cường trải nghiệm người dùng.
3. Các loại kiểm thử trong Load Testing
Load Testing bao gồm một số loại kiểm thử cụ thể. Các loại kiểm thử này đều có mục đích khác nhau và được sử dụng trong các trường hợp khác nhau để đảm bảo rằng hệ thống có thể hoạt động ổn định và đáp ứng được yêu cầu của người dùng trong mọi tình huống. Chúng ta sẽ tìm hiểu về các loại kiểm thử này.
3.1 Smoke Testing
Smoke Testing (hay còn gọi là Sanity Testing) là một loại kiểm thử cơ bản trong Load Testing. Kỹ thuật này nhắm vào các tính năng chính và đảm bảo rằng hệ thống đã hoạt động một cách cơ bản mà không có lỗi nghiêm trọng nào.
Smoke Testing thường được thực hiện trước khi tiến hành kiểm thử chính thức, để đảm bảo rằng các tính năng cơ bản hoạt động như mong đợi trước khi dành nhiều thời gian và công sức vào kiểm thử chi tiết hơn.
Ví dụ, giả sử rằng một công ty phát triển phần mềm đã hoàn thành việc triển khai một ứng dụng di động mới. Trước khi bắt đầu kiểm thử chi tiết, họ quyết định thực hiện Smoke Testing đơn giản để đảm bảo rằng các tính năng chính của ứng dụng đều hoạt động đúng cách.
Các bước cơ bản của Smoke Testing có thể bao gồm:
- Kiểm tra tính năng đăng nhập: Kiểm tra xem liệu người dùng có thể đăng nhập thành công vào ứng dụng hay không. Nếu đăng nhập thành công, có thể kiểm tra các tính năng cơ bản khác như xem thông tin cá nhân hoặc thay đổi mật khẩu.
- Kiểm tra tính năng tìm kiếm: Thực hiện một số tìm kiếm đơn giản để đảm bảo rằng kết quả được trả về chính xác.
- Kiểm tra tính năng đặt hàng: Thực hiện một đơn hàng đơn giản và đảm bảo rằng thông tin đơn hàng và thanh toán được xử lý đúng cách.
Nếu Smoke Testing không gặp phải lỗi nghiêm trọng nào, công ty phát triển phần mềm có thể tiếp tục thực hiện kiểm thử chi tiết hơn để đảm bảo tính ổn định và chất lượng của ứng dụng. Nếu Smoke Testing gặp phải lỗi nghiêm trọng, công ty phát triển có thể sửa chữa lỗi và tiến hành lại Smoke Testing cho đến khi không còn lỗi nào còn tồn tại.
Tóm lại, Smoke Testing là một bước quan trọng trong quá trình kiểm thử của Load Testing để đảm bảo rằng hệ thống có thể hoạt động đúng cách và không gây ra lỗi nghiêm trọng cho người dùng.
3.2 Load Testing (For Performance)
Load Testing (For performance) là loại kiểm thử nhằm đánh giá hiệu suất của một ứng dụng hoặc hệ thống khi chịu một tải lớn. Mục đích của kiểm thử này là để xác định giới hạn tải tối đa mà ứng dụng hoặc hệ thống có thể chịu đựng được mà vẫn đảm bảo hiệu suất ổn định.
Để thực hiện kiểm thử Load Testing (For performance), chúng ta cần tạo ra một kịch bản test mô phỏng hành vi của người dùng trên ứng dụng hoặc hệ thống đó. Kịch bản này có thể giả lập một số lượng người dùng truy cập và thực hiện các hoạt động trên ứng dụng hoặc hệ thống, chẳng hạn như tìm kiếm sản phẩm, đăng nhập, đăng ký, thêm sản phẩm vào giỏ hàng, thanh toán và v.v.
Trong quá trình kiểm thử, chúng ta sẽ tăng dần số lượng người dùng đồng thời truy cập vào ứng dụng hoặc hệ thống và theo dõi hiệu suất của nó. Các thông số được theo dõi có thể bao gồm thời gian phản hồi, tốc độ xử lý yêu cầu, số lượng người dùng tối đa mà hệ thống có thể xử lý được, số lượng lỗi xảy ra và v.v.
Ví dụ, nếu chúng ta muốn kiểm thử hiệu suất của một trang web xem phim chẳng hạn, chúng ta có thể tạo ra một kịch bản test với số lượng người dùng đồng thời tăng dần từ 10, 100, 1000, 10000 hoặc hơn nữa và theo dõi hiệu suất của trang web trong trường hợp giờ cao điểm hoặc thấp điểm. Kết quả của kiểm thử này có thể giúp chúng ta đánh giá được số lượng người dùng tối đa mà trang web có thể xử lý được mà vẫn đảm bảo hiệu suất ổn định. Nếu trang web không đáp ứng được yêu cầu, chúng ta có thể tìm ra nguyên nhân và đưa ra các biện pháp tối ưu hóa để nâng cao khả năng chịu tải của trang web.
3.3 Stress Testing
Stress Testing là một loại kiểm thử trong Load Testing nhằm mục đích đánh giá khả năng chịu tải của hệ thống trong điều kiện áp lực cao, đặc biệt là trong tình huống không thể dự đoán trước được. Trong Stress Testing, các kịch bản test được thiết kế để tăng tải lên hệ thống đến mức cao nhất có thể, để kiểm tra xem hệ thống có thể xử lý được tải lớn như thế nào và xem liệu nó có thể hoạt động ổn định trong điều kiện áp lực cao. Và liệu hệ thống của bạn có phục hồi mà không cần can thiệp thủ công sau khi bài kiểm tra đánh giá kết thúc hay không.
Ví dụ, một trang web thương mại điện tử trong cần kiểm tra hệ thống trước ngày Black Friday có thể phải đối mặt với một lượng rất lớn người dùng truy cập và thực hiện các giao dịch mua sắm cùng một lúc. Để làm điều này, họ có thể thực hiện Stress Testing bằng cách tạo ra một kịch bản test mô phỏng số lượng người dùng lớn đột ngột truy cập vào hệ thống của họ, đồng thời tăng dần lượng tải cho đến khi hệ thống không thể chịu nổi nữa.
Kết quả của Stress Testing sẽ cho biết được ngưỡng giới hạn của hệ thống và giúp họ có phương án nâng cấp hệ thống hoặc tối ưu hóa mã nguồn để đảm bảo khả năng chịu đựng của hệ thống trong các tình huống tải cao như vậy.
3.4 Spike Testing
Spike Testing trong Load Testing là kiểm thử khả năng chịu tải của hệ thống khi có tải lượng người dùng tăng đột ngột lên một mức cao hơn so với tải lượng bình thường, và giữ nguyên ở mức tải lượng cao đó trong một thời gian rất ngắn. Nó cũng nhằm đánh giá khả năng tự phục hồi của hệ thống khi gặp tình huống như vậy.
Spike Testing là một biến thể của Stress Testing. Tuy nhiên, khác với Stress Testing, Spike Testing không tăng dần tải lượng người dùng, mà tăng đột ngột và giữ ở mức tải lượng cao trong một thời gian rất ngắn. Kết quả của kiểm thử này sẽ giúp đánh giá khả năng chịu tải của hệ thống khi đối mặt với tình huống đột ngột.
Ví dụ, một trang web bán hàng có thể phải đối mặt với một đợt giảm giá lớn hoặc một sản phẩm hot mới được tung ra. Trong trường hợp này, tải lượng truy cập trang web sẽ tăng đột ngột và duy trì ở mức tải lượng cao trong một thời gian ngắn. Spike Testing sẽ giúp kiểm tra khả năng chịu tải của trang web khi đối mặt với tình huống đó. Các kịch bản test trong Spike Testing có thể giả lập vô số người dùng đăng nhập và thực hiện các thao tác trên trang web trong một khoảng thời gian ngắn và ngưng truy cập, để đánh giá hiệu suất của trang web trong tình huống đó.
Thành công hay thất bại của Spike Testing phụ thuộc vào kỳ vọng của bạn về hệ thống. Các hệ thống thường phản ứng theo 4 cách khác nhau:
-
Excellent: Hiệu suất hệ thống ổn định trong khi lưu lượng truy cập tăng. Thời gian phản hồi giống nhau trong khi lưu lượng thấp và lưu lượng cao.
-
Good: Thời gian phản hồi chậm hơn, nhưng hệ thống không tạo ra bất kỳ lỗi nào. Tất cả các yêu cầu đều được xử lý.
-
Poor: Hệ thống tạo ra lỗi trong khi lưu lượng truy cập tăng, nhưng phục hồi về bình thường sau khi lưu lượng truy cập giảm.
-
Bad: Hệ thống sẽ gặp sự cố và không phục hồi sau khi lưu lượng truy cập giảm.
3.5 Soak Testing
Soak Testing là một loại kiểm thử hiệu năng, được sử dụng để đánh giá khả năng của hệ thống hoạt động ổn định trong một thời gian dài, thường là từ vài giờ đến vài ngày hoặc thậm chí cả tuần. Trong kiểm thử Soak Testing, một tải lượng lớn và liên tục được đưa vào hệ thống để kiểm tra khả năng của hệ thống trong điều kiện sử dụng thực tế.
Mục đích chính của Soak Testing là xác định khả năng của hệ thống để chịu tải lớn và liên tục trong một thời gian dài. Kiểm thử Soak Testing cũng giúp phát hiện các vấn đề như rò rỉ bộ nhớ, lỗi hệ thống và vấn đề khác liên quan đến việc sử dụng lâu dài.
Ví dụ: Một ứng dụng web thương mại điện tử đang chuẩn bị cho một tuần lễ thời trang lớn và dự kiến sẽ có lượng khách hàng truy cập đồng thời lớn hơn bình thường. Để đảm bảo rằng hệ thống của mình hoạt động ổn định trong điều kiện này, nhóm phát triển quyết định thực hiện kiểm thử Soak Testing. Họ sử dụng công cụ kiểm thử để tạo ra một lượng truy cập lớn và liên tục vào ứng dụng trong vòng 1 tuần, kiểm tra khả năng chịu tải của hệ thống và đảm bảo rằng nó có thể hoạt động ổn định trong thời gian dài như vậy. Sau khi hoàn thành kiểm thử, nhóm phát triển có thể tinh chỉnh hệ thống của họ để cải thiện hiệu suất và đảm bảo rằng hệ thống sẵn sàng cho tuần lễ dự kiến.
4. Tổng kết
Có thể nhiều bạn còn nhầm lẫn Load Testing với Performance Testing, mới đầu mình cũng tưởng rằng 2 thằng này là 1 chỉ có cách gọi khác nhau nhưng thực tế thì chúng khác nhau hoàn toàn. Load Testing chỉ là một trong các phương pháp để thực hiện Performance Testing mà thôi. Cụ thể Performance Testing là gì và chúng có gì khác nhau thì mình sẽ trình bày ở một bài viết khác nhé
Tổng kết lại, Load testing là một phương pháp kiểm thử hệ thống để đảm bảo rằng ứng dụng của bạn có thể xử lý được lưu lượng truy cập lớn từ người dùng. Khi tiến hành Load testing, chúng ta có thể chọn một trong các loại kiểm thử như Smoke testing, Stress testing, Spike testing, Soak testing, v.v. để đánh giá hiệu suất của ứng dụng trong các trường hợp khác nhau.
Qua các loại kiểm thử này, chúng ta có thể tìm ra được mức tải tối đa mà hệ thống của chúng ta có thể xử lý được, đồng thời xác định được các vấn đề về hiệu suất có thể xảy ra và tìm ra giải pháp để khắc phục. Bằng cách tiến hành kiểm thử này, chúng ta có thể nâng cao chất lượng sản phẩm của mình, tăng tính sẵn sàng của hệ thống và đáp ứng được nhu cầu của người dùng một cách tốt nhất.
Do đó, việc thực hiện Load testing và các loại kiểm thử trong Load testing là rất quan trọng trong quá trình phát triển sản phẩm. Nếu bạn đang phát triển ứng dụng, hãy đảm bảo rằng bạn đã tiến hành kiểm thử hiệu suất trước khi tung sản phẩm của mình ra thị trường để đảm bảo rằng nó có thể hoạt động tốt trong các tình huống khác nhau và đáp ứng được nhu cầu của người dùng.
Bài viết này cũng chỉ được chia sẻ dưới góc nhìn của một Developer, không mang tính chuyên môn cao như Tester, tuy nhiên có thể nó sẽ dễ tiếp cận với các Developer khác hơn. Mong mọi người cùng tham khảo và đưa ra các ý kiến cải thiện.
5. Tài liệu tham khảo
https://k6.io/docs/test-types/introduction/
Cảm ơn các bạn đã dành thời gian đọc bài viết này
All rights reserved