top of page

Tổng quan về kiểm thử hiệu năng (Performance testing)

  • Ảnh của tác giả: Thuy Nguyen
    Thuy Nguyen
  • 3 thg 8, 2023
  • 6 phút đọc

Đã cập nhật: 13 thg 8, 2023

Một quy trình kiểm thử phần mềm lý tưởng bao gồm sự kết hợp của nhiều kỹ thuật kiểm thử khác nhau để đạt được phần mềm chất lượng cao dựa trên 2 cơ sở: “Khả năng vận hành” và “Hiệu quả”.

  • Khả năng vận hành (Operability): liên quan đến việc kiểm tra chức năng (Functional testing)

  • Hiệu quả (Efficiency): liên quan đến việc kiểm tra hiệu suất (Performance testing)

Performance testing:

Là một kỹ thuật kiểm thử phi chức năng thực hiện trên một hệ thống để đo một vài thuộc tính phản ánh hiệu suất hoạt động của hệ thống; giúp đo lường, xác nhận và xác minh thời gian phản hồi, độ ổn định, khả năng mở rộng, tốc độ và độ tin cậy của hệ thống trong môi trường giống như sản xuất.


Mục tiêu là xác định và loại bỏ các tắc nghẽn hiệu suất khỏi một ứng dụng.


Thuộc tính điển hình:

  • Response time: thời gian phản hồi của trang web + Response time thấp → good: hệ thống phản hồi nhanh + Response time cao → bad: hệ thống phản hồi chậm

  • Throughput: số requests mà server có thể xử lý được trong 1 đơn vị thời gian (đồng thời). + Đơn vị: requests/s - rps - requests per second + Throughput cao → good; Throughput thấp → bad

Phân biệt: Functional testing và Performance testing

Functional testing:

  • Nhằm xác minh tính chính xác của phần mềm với các đầu vào xác định so với đầu ra dự kiến.

  • Tập trung vào việc đánh giá một tính năng là pass hay fail; có hoạt động đúng yêu cầu hay không.

Performance testing:

  • Nhằm xác minh hành vi của hệ thống ở các điều kiện tải khác nhau.

  • Không chú trọng vào việc pass/fail; chú trọng vào việc đánh giá tốc độ của một hệ thống là nhanh hay chậm.

  • Thường thực hiện sau khi 1 chức năng hoạt động ổn định → tập trung vào tốc độ của hệ thống xem có ổn định hay không.

  • Thường test những tính năng chính, luồng chính của 1 module chức năng/hệ thống xem có tính năng nào bị chậm hay cần ưu tiên cải thiện performance không.

  • Khi thực hiện performance test sẽ thường không sử dụng các khái niệm: pass/fail, test case. Cũng có test case nhưng sẽ define test case theo luồng tính năng chính: step để thực hiện một luồng chức năng ↔ khác với test case trong functional test

Performance test type:

Có rất nhiều loại kiểm thử hiệu năng, bên dưới chỉ bao gồm những loại thường được thực hiện:

1) Load testing

Load testing là một loại kiểm tra hiệu suất của ứng dụng ở mức sử dụng bình thường và cao điểm. Khi được yêu cầu thực hiện performance test nhưng chưa được chỉ định rằng sẽ test loại nào thì chúng ta thường thực hiện load testing.

  • Load testing đánh giá hoạt động của ứng dụng để tìm ngưỡng tải tối đa (maximum load) mà hệ thống vẫn có thể xử lý tốt (xác định max capacity).

  • Thực hiện mô phỏng nhiều người dùng đồng thời và tăng giảm số lượng người dùng đồng thời trong từng khoảng thời gian một để xác định được maximum load (max capacity) xử lý được là bao nhiêu.

Như đã nói, hai thuộc tính điển hình của performance testing là “response time” và “throughput” thì ở đây Load testing là đi tìm xem throughput tối đa có thể xử lý được là bao nhiêu. Ví dụ: Số lượng người dùng cùng lúc, số lượng gao dịch, số lượng yêu cầu, ...

2) Stress testing

Stress testing được sử dụng để tìm cách phá vỡ hệ thống. Thử nghiệm đánh giá hoạt động của ứng dụng để tìm ngưỡng tải vượt quá giới hạn có thể xử lý của hệ thống (xác định breaking point : là điểm lớn hơn max capacity; điểm mà hệ thống sập/báo lỗi.

Mục đích để xác định:

  • Đến mức nào thì hệ thống sập hẳn (báo lỗi)?

  • Nếu sau đó dừng lại việc gửi lượng lớn request cùng 1 lúc thì hệ thống có tự recover (hồi phục) lại không?

  • Một số cty sẽ có hệ thống dự phòng: tức là khi hệ thống chính bị overload thì hệ thống dự phòng sẽ bật và san tải cho hệ thống chính. Vậy trong trường hợp bị overload thì hệ thống dự phòng có được bật không?


3) Volume testing

Volume testing được thực hiện để xác minh rằng hiệu suất của ứng dụng không bị ảnh hưởng bởi khối lượng dữ liệu đang được ứng dụng xử lý. Để thực hiện volume testing thì một khối lượng dữ liệu khổng lồ sẽ được nhập vào cơ sở dữ liệu.

Mục định thực hiện là để:

  • Xác định sự cố có thể xảy ra với lượng lớn dữ liệu

  • Tìm ra điểm mà tại đó tính ổn định của hệ thống bị suy giảm

  • Giúp xác định dung lượng của hệ thống

Ví dụ:

Một trang web của một trường học mới hoặc một trường đại học có lượng dữ liệu nhỏ để lưu trữ ban đầu, nhưng sau 5-10 năm, dữ liệu lưu trữ trong cơ sở dữ liệu của trang web nhiều hơn.

⇒ Khi đó cần thực hiện volume testing để xem trang web còn hoạt động ổn định với lượng dữ liệu ngày càng lớn không.



4) Endurance testing

Edurance testing (kiểm tra độ bền) nhằm đánh giá hoạt động của hệ thống khi hệ thống phải chịu ngưỡng tải tối đa trong một thời gian dài (nhiều giờ), từ đó tập trung đánh giá resource/tài nguyên của hệ thống xem nó có đáp ứng đủ không (xác định rủi ro về memory leak, khả năng tự giải phóng bộ nhớ của hệ thống, băng thông, ...)

  • Thời gian thực hiện tải: chạy test tối thiểu 8h

  • Tập trung vào kiểm tra độ bền của hệ thống: thường tập trung vào test tài nguyên của hệ thống (ram, CPU ...)

  • Chỉ chạy khoảng 70-80% người dùng đồng thời so với ngưỡng capacity

5) Spike testing

Spike testing là việc kiểm tra để xác minh xem hệ thống có hoạt động trong điều kiện sử dụng đột ngột và ồ ạt hay không. Đánh giá hoạt động của ứng dụng để xác định ngưỡng vượt quá công suất tối đa của hệ thống trong 1 khoảng thời gian ngắn (xác định max capacity).

Thường áp dụng cho các hệ thống TMĐT: black friday, flash sale - lượng người dùng tăng đột biến trong khoảng thời gian ngắn

Thông thường các công ty sẽ không bỏ ra chi phí để xử lý trường hợp này (do tốn tài nguyên, …)


6) Scalability testing

Scalability testing là việc kiểm tra khả năng mở rộng của hệ thống. Trong đó các ứng dụng và cơ sở hạ tầng được kiểm tra hiệu suất theo khối lượng công việc tăng hoặc giảm.

Ứng dụng có thể có sự gia tăng bất ngờ về số lượng người dùng, mức sử dụng CPU hoặc bộ nhớ cần được giải quyết. Bằng cách xác định độ bền của phía máy chủ (server) và sự xuống cấp của phía máy khách (client), tổ chức sau đó có thể thực hiện các biện pháp cần thiết để tạo trải nghiệm tốt nhất cho người dùng trong khi tối ưu hóa chi phí cơ sở hạ tầng.

Một số thuộc tính điển hình khi thực hiện Scalability testing:

  • User/Number-Related Performance: Hiệu suất liên quan đến người dùng/số

  • Response time: Thời gian phản hồi

  • Memory usage: Mức sử dụng bộ nhớ đề cập đến dung lượng RAM được sử dụng

  • Throughput: Số request có thể được xử lý trong một khoảng thời gian nhất định

  • CPU usage: Mức sử dụng CPU

  • Network usage: Mức sử dụng mạng. Việc sử dụng mạng có thể được đo bằng byte và gói nhận được trên mỗi đơn vị thời gian

  • Screen transition: Chuyển đổi màn hình, nghĩa là khả năng hệ thống chuyển đổi từ một giao diện duy nhất sang một giao diện khác trên tất cả các thiết bị.


Performance testing procedure:

Quy trình thực hiện kiểm tra hiệu năng bao gồm:

  1. Identify test environment: Xác định môi trường test là Production / dev / staging / server beta, ...

  2. Plan & design tests: Lập kế hoạch và thiết kế thử nghiệm: Test type sẽ áp dụng? Test nghiệp vụ nào?

  3. Identify performance acceptance criteria: Xác định tiêu chí đáp ứng của KH

  4. Configure test environment: Cấu hình môi trường thử nghiệm. Chú ý bỏ capcha chống robot trong 1 số hệ thống; ...

  5. Implement test design: Viết test script và unit test để đảm bảo test script hoạt động

  6. Excute tests: Thực hiện test

  7. Analyze and report: Phân tích kết quả thử nghiệm


P/s: Bài viết là kiến thức lý thuyết (chưa đầy đủ) dựa trên quá trình học và tìm hiểu của mình. Vui lòng tìm hiểu thêm! 🙇‍♀️

Comments


© 2023 by ThuyNguyen ・hoctestdao

bottom of page