Hiện nay, khi mà các sản phẩm phần mềm ra đời ngày càng nhiều, thì tính năng của sản phẩm không còn là mối quan tâm duy nhất nữa. Người ta còn quan tâm đến nhiều khía cạnh khác như performance (hiệu năng), security (bảo mật), usability (tính khả dụng),… Giữa hàng loạt sản phẩm có tính năng tương tự nhau, sản phẩm nào đẹp hơn, dễ sử dụng hơn, nhanh hơn, an toàn hơn,.. thì sẽ thu hút được nhiều người dùng. Để đảm bảo performance cho các hệ thống, tester cần thực hiện performance testing (kiểm thử hiệu năng). Vậy performance testing là gì, thực hiện như thế nào?
Performance testing là một test type, thuộc non-functional testing. Performance testing được thực hiện nhằm xác định mức độ đáp ứng về tốc độ, độ ổn định, độ tin cậy và khả năng mở rộng của hệ thống. Mục tiêu của performance testing không phải tìm ra lỗi, cũng không có khái niệm Pass/Fail. Performance testing tập trung vào việc tìm ra các vấn đề liên quan đến hiệu năng (bottleneck) của hệ thống, từ đó có các phương án để cải thiện. Chỉ thực hiện performance testing sau khi đã hoàn thành functional testing, tức là các chức năng của hệ thống đã hoạt động đúng như mong đợi. Hai thông số cần quan tâm nhất khi thực hiện performance testing là response time và throughput.
Performance testing gồm 6 types:
Load testing được thực hiện để đánh giá hành vi của hệ thống khi tăng tải (số người dùng đồng thời - concurrent users/CCU, số lượng transaction/request/…), để xác định mức tải tối đa (maximum load/ngưỡng) mà hệ thống có thể xử lý. Tip để tìm ra ngưỡng nhanh nhất là qua mỗi lần test thì tăng gấp đôi số lượng request đồng thời đẩy vào hệ thống. Ví dụ:
Nếu ở lần 3 mà hệ thống bị overload thì lần 4 sẽ giảm một nửa số lượng request đã tăng ở lần 3, tức là:
Stress testing được thực hiện để đánh giá hành vi của hệ thống khi tải vượt ngưỡng, tìm ra điểm chết và đánh giá khả năng phục hồi lại của hệ thống.
Spike testing được thực hiện để đánh giá hành vi của hệ thống khi tải tăng cao đột ngột trong thời gian ngắn. Một số trường hợp trong thực tế cần thực hiện spike testing:
Endurance testing được thực hiện trong thời gian dài để đánh giá việc sử dụng tài nguyên (memory) của hệ thống. Thông thường, sẽ chạy với 70-80% ngưỡng của hệ thống trong thời gian nhiều hơn 8h.
Scalability testing được thực hiện để đánh giá khả năng mở rộng của hệ thống. Khả năng mở rộng của hệ thống là khả năng hệ thống đáp ứng được việc tăng tải theo lịch trình. Đánh giá khả năng mở rộng của hệ thống là xác định thời điểm hệ thống không thể mở rộng được nữa và nguyên nhân, để có các phương án cải thiện, nâng cấp. Ví dụ: Hệ thống X có thể đáp ứng tối đa cho 3000 users. Theo lịch trình dự kiến:
Vậy thì cần có phương án cải thiện hệ thống trước năm thứ 3. Nếu tối ưu phần mềm vẫn không thể đáp ứng được thì cần nâng cấp server, nhưng nâng cấp như thế nào để hiệu quả và tối ưu chi phí? Có hai loại nâng cấp (scaling):
Về bản chất thì đây vẫn là Load testing, xác định ngưỡng của hệ thống hiện tại và hệ thống sau khi tối ưu phần mềm, nâng cấp server.
Volume testing được thực hiện với lượng data trong database rất lớn để đánh giá tốc độ xử lý, load data của hệ thống, tìm ra điểm có thể xảy ra sự cố. Ví dụ:
Vậy là chúng ta đã có cái nhìn tổng quan về performance testing. Phần tiếp theo sẽ bắt đầu trải nghiệm performance testing với tool Jmeter nhé =))