[QA-QC] Performance Testing

Định nghĩa

Performance Testing là kiểm thử phi chức năng, nhằm kiểm tra tải của hệ thống khi có nhiều người dùng đồng thời

Các thông số cần kiểm tra:

  • Responsiveness (Khả năng đáp ứng): Hệ thống đáp ứng được bao nhiêu user? Bao nhiêu giao dịch/s? Duy trì trong bao lâu

  • Stability (Sự ổn định): Hệ thống có bị chậm, treo, giật, mất kết nối trong thời gian bao lâu? Nếu xảy ra sự cố thì có bị mất dữ liệu và có thể khôi phục được trạng thái ban đầu không?

  • Scalability (Khả năng mở rộng): Kiểm tra khả năng của đường mạng, hạ tầng, CSDL

  • Speed (Tốc độ): Thời gian phản hòi của hệ thống ntn

  • Resource usage (Sử dụng tài nguyên): Mức độ tiêu thụ tài nguyên

  • Reliability (Độ tin cậy): Hệ thống có thực hiện đúng thao tác nghiệp vụ không

Một số công cụ dùng để kiểm thử hiệu năng:

  • Apache JMeter

  • HP Loadrunner

  • Rational performance tester

  • Apache benchmark

  • SoapUI

Các loại kiểm thử hiệu năng:

  • Load testing: Kiểm tra cách hệ thống xử lý khối lượng tải ở mức dự kiến thông thường, tập trung vào Speed

  • Stress testing: Kiểm tra cách hệ thống hoạt động khi tải cực lớn, tập trung vào sự ổn định - Stability

  • Spike testing: Kiểm tra cách hệ thống hoạt động khi tải cực lớn với lượng người dùng tăng đột ngột, tập trung vào Speed

  • Soak testing/Endurance testing: Kiểm tra load testing trong 1 thời gian dài, tập trung vào Stability

  • Scalabity testing/Capacity testing: Kiểm tra khả năng xử lý tải của ứng dụng khi tải người dùng tăng, tập trung vào Scalability

  • Volume test: Kiểm tra hiệu năng với dữ liệu cực lớn của CSDL (Ví dụ: báo cáo, đồng bộ thông tin), tập trung vào Speed

Các thuật ngữ sử dụng trong test hiệu năng

  • Người dùng đồng thời (Concurrent user - CCU): người dùng đăng nhập vào hệ thống và có thao tác với hệ thống.

  • Response time: Thời gian phản hồi của request, tính từ khi request được gửi đi đến khi nhận về phản hồi.

  • Elapsed time: Thời gian từ khi bắt đầu gửi request đầu tiên cho đến khi nhận được phản hồi cuối cùng. Jmeter không bao gồm thời gian xử lý hoặc hiển thị bất kỳ mã code nào của client như javascript.

  • Latency time: Thời gian trễ, tính từ ngay khi gửi request cho đến khi nhận về phản hồi đầu tiên. Như vậy bao gồm cả thời gian xử lý request của server.

  • Connect time: Thời gian để thiết lập kết nối bao gồm cả thời gian bắt tay SSL. Trong jmeter thì thời gian này không tự động trừ trong latency.

  • Transaction per second (TPS): Số transaction server xử lý được trong 1 giây.

  • Throughput: Số request server xử lý được trong một đơn vị thời gian

  • Median: 50% mẫu có response time <= Median

  • 90% line: 90% mẫu có response time <= giá trị này

  • %CPU: Lượng CPU mà hệ thống chiếm dụng trong quá trình xử lý tải

  • %RAM: Lượng RAM mà hệ thống chiếm dụng trong quá trình xử lý

  • Ngưỡng: Số CCU hoặc TPS mà tại đó hệ thống vẫn xử lý được

  • Bottlenecks: nút thắt cổ chai, tại đây, hệ thống bị tắc nghẽn

Các bước kiểm thử hiệu năng

Bước

Nội dung thực hiện

Bước

Nội dung thực hiện

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

Tại bước này, cần xác định:

  • Môi trường thực hiện test là môi trường test hay môi trường thật

  • Số server? Cấu hình server

  • Cấu hình mạng?

Xác định các tiêu chí hiệu năng có thể chấp nhận

Tại bước này, cần xác định:

  • Số CCU

  • %Error

  • Responsetime

  • TPS

  • %RAM

  • %CPU

Các tiêu chí này được đưa ra dựa trên hợp đồng hoặc QL dự án hoặc dựa vào việc đo các hệ thống tương tự để đưa ra expect

Lập kế hoạch

Tại bước này, cần thực hiện:

  • Lựa chọn chức năng test

  • Xác định biến đổi giữa các người dùng (phân quyền khác nhau)

  • Xác định dữ liệu test

Cấu hình môi trường

Tại bước này, cần:

  • Chuẩn bị công cụ test: tool test

  • Chuẩn bị tài nguyên test: máy client đủ mạnh để đẩy tải

Thiết kế test script

Tạo các test script và chọn template báo cáo

Thực thi các test script

Run test script

Phân tích kết quả và viết báo cáo

Xem báo cáo và phân tích KQ => Đưa ra báo cáo KQ test hiệu năng

Jmeter


Các thành phần chính trong 1 Test Plan

Các thành phần

Định nghĩa

Các thành phần

Định nghĩa

Thread Group

Kiểm soát số lượng Threads mà JMeter sử dụng trong quá trình test

Thread Group> Samplers

Một số samplers hay dùng:

  • FTP Request/FTP Request Default: cho phép gửi yêu cầu retrieve file hoặc upload file

  • HTTP Request/HTTP Request Default: cho phép gửi yêu cầu HTTP/HTTPS đến máy chủ web

  • JDBC Request: cho phép gửi 1 yêu cầu thực thi SQL đến DB

  • Java Request: Sử dụng class java để định nghĩa luồng nghiệp vụ riêng; sau đó sử dụng java request để gọi điều khiển class đó và thu thập dữ liệu

Thread Group > Logic Controller

Logic Controller cho phép xác định thứ tự mà các Samplers trong nó thực hiện

Các Controller hay dùng:

  • Simple Controller: cho phép tổ chức các samplers cà các logic controller khác. Controller này chỉ có chức năng lưu trữ mà ko có thêm bất kỳ chức năng nào khác

  • Loop Controller: Cho phép tạo lặp lại số lần mà được chỉ định các Samplers

  • Transaction Controller: Cho phép đo thời gian tổng thể thực hiện các yếu tố kiểm tra lồng nhau

  • Recording Controller: tương tự như Simple Controller, nhưng khi recording thì nó chỉ ra nơi lưu trữ mặc định của các sampler

Thread Group > Config Elements

Cho phép tạo các giá trị mặc định và các biến được sử dụng trong các Samplers

Dùng để add hoặc modify các request tạo ra từ các Samplers

Các element hay dùng:

  • CSV Data Set Config: đọc dữ liệu từ file .csv, .txt

  • HTTP Header Manager: cho phép tùy chỉnh thông tin mà Jmeter gửi đi trong Header của request

  • HTTP cookie manager: tự động lưu trữ và gửi cookies cho các request tiếp theo

  • HHTP cache manager: được sử dụng để thêm chức năng bộ nhớ đệm cho các HTTP Request

  • HTTP Request Default: Các giá trị mặc định mà các HTTP Request sử dụng

  • Counter: Thiết lập bộ đếm, phục vụ cho việc tạo các dữ liệu thay đổi

  • JDBC Connection Configuration: Khai báo 1 kết nối đến DB

  • User Defined Variables: Khai báo biến do người dùng định nghĩa

Thread Group > Listeners

Báo cáo thực hiện các testscript

Thread Group > Timer

Element cho phép giả lập thời gian chờ giữa các request

Thread Group > Assertions

Sử dụng để thực hiện kiểm tra bổ sung trên bộ lấy mẫu

Assertions hay dùng:

  • Response Assertion: thêm các chuỗi mẫu để so sánh với các trường khác nhau của yêu cầu hoặc phản hồi

  • Duration Assertion: check thời lượng mà mỗi phản hồi đã nhận được trong 1 khoảng thời gian nhất định.

    • Bất kỳ phản hồi nào có thời gian phản hồi > Duration Assertion => Phản hồi thất bại

Thread Group > Pre processor

Hành động trước khi chạy Request

Thread Group > Post processor

Hành động sau khi chạy Request