Tìm hiểu về Performance Testing

performance testing

Performance Testing là gì

Performance Testing là 1 trong nhiều kiểu test mà tester nào cũng phải trải qua, nhưng nó không đơn giản và dễ hiểu như những kiểu test khác. Chúng dễ gây nhầm lẫn và đưa đến những kết luận sai lầm, ảnh hưởng 1 phần đến chất lượng của dự án.
Có nhiều định nghĩa về Performance Testing, Performance Testing là một loại kiểm thử để đảm bảo các ứng dụng phần mềm sẽ hoạt động tốt dưới khối lượng công việc dự kiến.
Các tính năng và chức năng của một hệ thống phần mềm không phải là mối quan tâm duy nhất. Hiệu năng của một ứng dụng phần mềm như:

  • Thời gian phản hồi (response time)
  • Độ tin cậy (reliability)
  • Sử dụng tài nguyên (resource usage)
  • Khả năng mở rộng (scalability).

Trong đó trọng tâm của Performance Testing là:

  • Thời gian phản hồi: xác định xem ứng dụng phản hồi nhanh hay chậm
  • Khả năng mở rộng: Xác định tải người dùng tối đa mà ứng dụng phần mềm có thể xử lý.
  • Tính ổn định: Xác định xem ứng dụng có ổn định dưới các tải khác nhau hay không.

Mục tiêu của Performance Testing không phải là để tìm lỗi, nó là hoạt động cần thiết cho việc phát triển những giải pháp tối ưu hóa hiệu năng cho phần mềm. Kiểm thử hiệu năng giúp chúng ta tránh được các tình huống không lường trước khi triển khai ứng dụng trong môi trường thực tế.

Các loại Performance Testing

Load testing: kiểm thử khả năng của ứng dụng để thực hiện theo tải người dùng dự đoán. Mục tiêu là để xác định mức độ tắc nghẽn hiệu suất trước khi ứng dụng phần mềm được phát hành trong môi trường thực tế.
Stress testing: Liên quan đến việc thử nghiệm một ứng dụng theo khối lượng công việc quá lớn để xem cách nó xử lý lưu lượng truy cập cao hoặc cách mà nó xử lý dữ liệu. Mục tiêu là để xác định được điểm giới hạn của một ứng dụng.
Capacity Testing: Mục tiêu để xác định có bao nhiêu user hoặc bao nhiêu giao dịch hoặc số lượt truy cập trên một đơn vị thời gian có thể đáp ứng các SLA (Service Level Agreement- là một thỏa thuận hay hợp đồng được thiết lập giữa khách hàng và nhà cung cấp dịch vụ) hiệu năng của hệ thống
Endurance testing: Mục tiêu để đảm bảo phần mềm có thể xử lý tải dự kiến trong một khoảng thời gian dài.
Spike testing: Mục tiêu để kiểm tra phản ứng của phần mềm đối với các thay đổi lớn đột ngột trong tải do người dùng tạo.
Volume testing: Mục tiêu là để kiểm tra hiệu suất của ứng dụng phần mềm theo khối lượng cơ sở dữ liệu khác nhau.
Scalability testing: Mục tiêu của thử nghiệm nhằm đến khả năng mở rộng của ứng dụng, để xác định hiệu quả của ứng dụng phần mềm khi “mở rộng” để hỗ trợ tăng tải người dùng, hỗ trợ cho việc lập kế hoạch bổ sung dung lượng cho hệ thống.
Reliability Testing: Là một loại kiểm thử để xác minh rằng phần mềm có khả năng thực hiện một hoạt động không có lỗi trong một khoảng thời gian nhất định trong một môi trường được chỉ định. Nó cũng chính là việc kiểm thử độ tin cậy của hệ thống đó.
Ví dụ: Xác suất mà một máy tính trong một cửa hàng hoạt động và chạy trong tám giờ mà không xảy ra lỗi là 99% => điều này được gọi là độ tin cậy.
Bạn cần tự tìm hiểu các kiểu test trên thông qua các câu hỏi như sau:

  • Mục tiêu của kiểu test?
  • Cách thức thực hiện test?
  • Thực hiện test trong bao lâu?

Đối tượng của Performance Testing

Kiến trúc của web app và mobile app gồm có hai phần: Client và Server.
Performance Testing là test hiệu năng của server. Vì vậy đối tượng test là SERVER

Các tiêu chí đánh giá:

Các tiêu chí để đánh giá hiệu năng server một ứng dụng có nhiều, nhưng đối với một Tester không chuyên Performance thì chỉ nên tập trung vào hai tiêu chí quan trọng nhất:

  • Response time: Thời gian tính từ lúc send request đến khi nhận hết response
  • Through put: Số lượng transaction (request được xử lý) trong một đơn vị thời gian (second/ minute)

Một sai lầm phổ biến là thường diễn ra: Đánh giá hiệu năng của server thông qua Concurrent User
Ví dụ: “Test chức năng login xem chịu tải được bao nhiêu user”.
Server không trực tiếp xử lý user mà nó xử lý request do user tạo ra, do đó user chỉ là gián tiếp tác động đến server. Bạn có thể kết luận 1 hệ thống đáp ứng được bao nhiêu user với điều kiện:

  • Các user thực hiện số request giống hệt nhau.
  • Bạn chỉ thực hiện test 1 scenario duy nhất.
  • Cả team + khách hàng tự nhìn nhận đó là đủ, không yêu cầu gì thêm.

Dù bao nhiêu điều kiện đi chăng nữa thì đó vẫn là sai.

Các bước quy trình Performance Testing

Phương pháp được áp dụng để kiểm tra hiệu năng có thể khác nhau nhưng mục tiêu của những quá trình kiểm thử hiệu năng vẫn giữ nguyên. Nó có thể giúp chứng minh rằng hệ thống đáp ứng một số tiêu chí hiệu năng được xác định trước. Hoặc nó có thể giúp so sánh hiệu năng của hai hay nhiều hệ thống phần mềm. Hoặc nó cũng có thể giúp xác định các thành phần của hệ thống nào đang làm suy giảm hiệu năng của nó.
Quy trình kiểm thử hiệu năng cơ bản:

  1. Xác định môi trường kiểm thử:

Chuẩn bị sẵn sàng môi trường thử nghiệm vật lý, môi trường sản xuất và công cụ kiểm tra sẵn có. Nắm rõ về cấu hình phần cứng, phần mềm và mạng được sử dụng trong quá trình kiểm thử trước khi bắt đầu. Nó sẽ giúp tạo ra bộ Test case kiểm thử hiệu năng hiệu quả hơn đồng thời nó cũng sẽ giúp xác định các khó khăn mà người thử nghiệm có thể gặp phải trong quá trình kiểm thử hiệu năng.

  1. Xác định các tiêu chí hiệu năng:

Bao gồm các mục tiêu và ràng buộc cho thông lượng, thời gian phản hồi và phân bổ nguồn lực. Nó cũng cần thiết để xác định các tiêu chí thành công của dự án. Tester cần xác định được các tiêu chí và mục tiêu hiệu năng tối thiểu cần đạt của hệ thống bởi vì thông thường các thông số của dự án sẽ không bao gồm nhiều hoặc không có những tiêu chí hiệu năng đủ lớn. Việc sử dụng một ứng dụng tương tự để so sánh là một cách hay để thiết lập tiêu chí hiệu năng.

  1. Lập kế hoạch và thiết kế kiểm thử hiệu năng:

Xác định cách sử dụng có khả năng khác nhau giữa những người dùng cuối và xác định các tình huống chính để kiểm tra tất cả các trường hợp sử dụng có thể. Nó là cần thiết để mô phỏng một loạt các người dùng cuối, kế hoạch dữ liệu thử nghiệm hiệu suất và phác thảo những số liệu sẽ được thu thập.

  1. Cài đặt môi trường kiểm thử:

Cài đặt môi trường, công cụ, tài nguyên cần thiết trước khi thực hiện test

  1. Triển khai test design:

Tạo test cases kiểm thử hiệu năng theo test design

  1. Thực hiện test:

Thực thi và theo dõi kết quả thực thi

  1. Phân tích, điều chỉnh và kiểm tra lại:

Hợp nhất, phân tích và chia sẻ kết quả kiểm tra. Sau đó, tinh chỉnh và kiểm tra lại để xem có cải thiện hay giảm hiệu suất hay không. Vì các cải tiến thường tăng lên nhỏ hơn với mỗi lần kiểm tra lại, dừng lại khi bị tắc nghẽn do CPU gây ra. Sau đó, bạn có thể có tùy chọn xem xét tăng tốc độ xử lý của CPU hay không.

Công cụ Performance Testing

Jmeter: Là phần mềm mã nguồn mở sử dụng 100% ngôn ngữ Java, được thiết kế để kiểm thử tải (Load testing) web and app của máy chủ.

LoadRunner: là công cụ kiểm thử hiệu năng cho phép tìm ra những lỗi về khả năng thực thi bằng việc phát hiện nguyên nhân, chỗ làm cho phần mềm chạy chậm hoặc không đúng yêu cầu. Đây là công cụ mạnh với giải pháp kiểm tra tải, phát hiện và đưa ra giải pháp cải tiến. Ứng dụng LoadRunner sẽ giúp giảm thời gian viết test script đến 80%, đó là nhờ nó cung cấp chức năng tự động phát sinh script mô tả lại các tình huống muốn kiểm tra.

LoadView-Testing: là công cụ kiểm thử hiệu năng cho phép thiết lập đường cơ sở thời gian phản hồi theo số lượng người dùng tải cụ thể, xác định điểm tắc nghẽn hiệu suất khi số lượng người dùng đồng thời tăng lên, xác định được giới hạn trên của các hệ thống hiện tại để lập kế hoạch cho hiệu năng trong tương lai, tăng hiệu năng lên mức cao trên môi trường test để thấy được cách xử lý dữ liệu và điểm giới hạn hiệu năng của hệ thống.

LoadStorm: là công cụ có khả năng chịu tải rất tốt, có thể kiểm tra hiệu năng của app thông qua lượng traffic và user. Điểm đặc biệt ở công cụ này là nó có thể thiết lập hàng trăm nghìn, thậm chí hàng triệu user để khai thác lỗ hổng trong ứng dụng. Mặt khác, tester có thể dễ dàng điều chỉnh kịch bản test khi sử dụng công cụ này.