Đánh giá performance dựa vào số lượng request đến server

Tiếp theo trong Jmeter Series mình sẽ hướng dẫn cho các bạn cách tạo test plan JMeter test API performance.

API là viết tắt của Application Programming Interface (giao diện lập trình ứng dụng). API được xem là cầu nối cho phép trao đổi dữ liệu giữa các ứng dụng với nhau.

Việc test performace API là rất cần thiết trước khi release sản phẩm. Kết quả test sẽ cho biết server đáp ứng được bao nhiêu lượt truy cập cùng một lúc trong khoảng thời gian ngắn mà không để xảy ra tình trạng lỗi, dữ liệu vẫn hiển thị tốt trên thiết bị của người dùng.

❤ Kiểm thử hiệu năng là một quá trình kiểm thử một phần hoặc cả hệ thống nhằm xác định độ ổn định, tốc độ, khả năng mở rộng và đáp ứng của nó theo từng khối lượng công việc nhất định.

Theo ISTQB Glossary thì “kiểm thử hiệu năng” là quá trình kiểm thử để xác định hiệu quả hoạt động của một thành phần hoặc một hệ thống. Và “hiệu năng” là mức độ sử dụng tài nguyên, thời gian và khả năng mà một thành phần hoặc hệ thống thực hiện các chức năng của nó.

Mục tiêu của kiểm thử hiệu năng thường bao gồm đánh giá kết quả xử lý của ứng dụng, tốc độ xử lý, tốc độ truyền dữ liệu, mức sử dụng băng thông mạng, số lượng người dùng đồng thời tối đa có thể xử lý được, mức sử dụng bộ nhớ, hiệu quả khối lượng công việc và thời gian phản hồi các yêu cầu. Một số tập trung chính của kiểm thử hiệu năng thường là:

  • Tốc độ xử lý – Xác định xem hệ thống có phản hồi đủ nhanh một số yêu cầu hay không
  • Độ ổn định – Xác định xem hệ thống có ổn định dưới các mức tải khác nhau không
  • Khả năng mở rộng – Xác định số lượng người dùng tối đa mà hệ thống phần mềm có thể xử lý được.

Một số lý do cần kiểm thử hiệu năng

Khi đánh một hệ thống phần mềm, không chỉ các tính năng và chức năng được hỗ trợ mà hiệu suất làm việc (hiệu năng) của nó như thời gian phản hồi, độ tin cậy, mức sử dụng tài nguyên và khả năng mở rộng, cũng rất được quan tâm.

Tuỳ vào hệ thống bạn đang phát triển, thời gian cho phép, hay yêu cầu của khách hàng mà lý do thực hiện kiểm thử hiệu năng sẽ khác nhau. Dưới đây là một số lý do kiểm thử hiệu năng thường gặp:

  • Nhằm xác định xem hệ thống ứng dụng có đáp ứng các yêu cầu về hiệu suất hay không (ví dụ: hệ thống có thể xử lý tối đa 3.000 người dùng đồng thời hay không).
  • Nhằm để xác định vị trí gây thắt nút cổ chai trong toàn bộ hệ thống ứng dụng.
  • Nhằm để xác định xem mức hiệu năng mà nhà cung cấp phần mềm công bố/thông báo có thực sự đúng hay không.
  • Nhằm so sánh hai hoặc nhiều hệ thống với nhau để xác định hệ thống hoạt động tốt hơn.
  • Để đo lường sự ổn định trong các sự kiện cao điểm (ví dụ: khi mở bán vé xem ca nhạc của một ca sĩ nổi tiếng).

Mục tiêu của kiểm thử hiệu năng không phải là tìm lỗi trong phần mềm mà là tìm và loại bỏ các điểm tắc nghẽn làm giảm hiệu suất làm việc của hệ thống.

Khi thực hiện kiểm thử hiệu năng, chúng ta sẽ cung cấp thông tin cho các bên liên quan (bao gồm khách hàng, PM và QA Manager) về tốc độ, tính ổn định và khả năng mở rộng của hệ thống để họ đưa ra quyết định về cách xử lý tiếp theo, ví dụ như vẫn phát hành phần mềm hay cần phải khắc phục các vấn đề hiệu năng (như xử lý mô-đun gây ra thắt nút cổ chai đã xác định được trong quá trình kiểm thử hiệu năng) trước khi đưa sản phẩm ra thị trường.

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

Tuỳ vào loại kiểm thử hiệu năng bạn đang triển khai, các bước thực hiện cụ thể sẽ khác nhau. Dưới đây là các bước thực hiện kiểm thử hiệu năng thường gặp:

  1. Xác định môi trường kiểm thử và công cụ cần thiết (tools)
  2. Xác định tiêu chí hiệu năng được chấp nhận (dựa vào yêu cầu của khách hàng)
  3. Lên kế hoạch và thiết kế các trường hợp kiểm thử (test case)
  4. Chuẩn bị môi trường và công cụ (bao gồm viết script – kịch bản)
  5. Thực hiện kiểm thử hiệu năng (chạy các kịch bản)
  6. Giải quyết các vấn đề và kiểm thử lại

1. Xác định môi trường kiểm thử và công cụ cần thiết (tools)

Xác định môi trường thực tế mà hệ thống sẽ được triển khai, môi trường kiểm thử và các công cụ kiểm thử phù hợp dựa vào yêu cầu của khách hàng hoặc/và PM (quản lý dự án/sản phẩm).

Bạn cần có bảng thống kê và so sánh các thông số kỹ thuật về phần cứng, phần mềm, cơ sở hạ tầng, và cấu hình của hệ thống trên môi trường kiểm thử và môi trường thực tế (production) để đảm bảo tính nhất quán. Theo kinh nghiệm của mình thì có một số kịch bản sẽ được thực hiện trên môi trường thực tế để giảm thời gian và chi phí cho việc giả lập nếu thực hiện trên môi trường kiểm thử (ví dụ môi trường staging), tuy nhiên cần lưu ý về dữ liệu khách hàng và giảm thiểu hoặc tránh làm gián đoạn hoạt động của khách hàng/người dùng.

2. Xác định tiêu chí hiệu năng được chấp nhận

Sau các buổi họp với khách hàng và PM, bạn cần phải xác định rõ (và có sự xác nhận của các bên liên quan thì càng tốt) các mục tiêu (goals), ngưỡng xử lý (thresholds), và các ràng buộc khác (constraints) mà qua đó cho thấy kiểm thử đã hoàn tất.

Thường thì các tiêu chí này sẽ được đề cập trong tài liệu mô tả yêu cầu hệ thống (SRS – software requirement specifications), ngoài ra thì người thực hiện kiểm thử hiệu năng (performance tester) cần đề xuất bổ sung các trường hợp hay kịch bản cần kiểm thử và so sánh hiệu năng của hệ thống với các tiêu chí bên ngoài.

3. Lên kế hoạch và thiết kế các trường hợp kiểm thử (test case)

Sau khi đã có đủ thông tin, bước tiếp theo bạn sẽ cần lập kế hoạch kiểm thử. Hãy suy nghĩ về mức độ sử dụng rộng rãi khác nhau, sau đó nghĩ ra các kịch bản kiểm thử phù hợp cho các trường hợp sử dụng khả thi. Thiết kế các trường hợp kiểm thử phù hợp và phác thảo các số liệu cần kiểm tra. Ví dụ như dự đoán các con số (load – tải) về số lượng yêu cầu (request) đồng thời trong kiểm thử tải (load testing).

4. Chuẩn bị môi trường và công cụ (bao gồm viết script – kịch bản)

Khi bạn đã có kế hoạch sơ bộ hoặc chi tiết trong tay rồi, bạn cần phải chuẩn bị môi trường các sớm càng tốt, để khi gặp vấn đề gì thì chúng ta cũng sẽ khắc phục sớm và không gây ảnh hưởng đến tiến độ của toàn bộ dự án.

Bạn cần xây dựng (chuẩn bị) môi trường kiểm thử, thường sẽ cần sự trợ giúp hoặc phối hợp với developer (lập trình viên) và DevOps (nhân viên quản lý và vận hành hệ thống) để thực hiện các hoạt động này. Bên cạnh đó, bạn cũng cần phải viết các kịch bản cho các trường hợp kiểm thử của mình. Ví dụ, nếu bạn sử dụng JMeter để kiểm thử tải (load testing) thì bạn sẽ sử dụng java để lập trình các bước gọi lên server/api theo một trình tự nhất định theo kịch bản.

Ví dụ một kịch bản kiểm thử trong JMeter

Đánh giá performance dựa vào số lượng request đến server

5. Thực hiện kiểm thử hiệu năng (chạy các kịch bản)

Sau khi mọi thứ đã được chuẩn bị xong bao gồm môi trường kiểm thử, các kịch bản trong công cụ kiểm thử hiệu năng, và hệ thống hoặc các mô-đun cần kiểm thử đã được phát triển và deploy lên môi trường cần thiết, chúng ta sẽ thực hiện/chạy các trường hợp kiểm thử và ghi nhận kết quả.

6. Giải quyết các vấn đề và kiểm thử lại

Sau khi thực hiện kiểm thử, dựa vào các báo cáo, cả nhóm sẽ cùng nhau phân tích xác định vị trí của mô-đun hay cụm chức năng gây chậm hệ thống sẽ được sửa chữa. Thường thì nhóm developer sẽ chịu trách nhiệm xử lý nếu lỗi thuộc về phần mềm như thuật toán xử lý không được tối ưu, và DevOps sẽ xử lý nếu lỗi hiệu năng thuộc về cơ sở hạ tầng.

Sau khi mọi sự cố hoặc một số sự cố nghiêm trọng nhất đã được khắc phục, bạn cần chạy lại kịch bản trên (các bước thực hiện tương tự như lúc thực hiện kiểm thử hiệu năng lần trước) để xác định xem những lỗi hiệu năng đã thực sự khắc phục hoàn toàn hay chưa.

Một số mẹo trong kiểm thử hiệu năng

Qua nhiều năm làm kiểm thử phần mềm, mình rút ra được kinh nghiệm quý báu là môi trường kiểm thử đặc biệt là kiểm thử hiệu năng phải thật càng giống môi trường thực tế càng tốt. Vì nếu các môi trường này không giống nhau, thì các hoạt động kiểm thử đã thực hiện có thể không đánh giá chính xác hiệu suất làm việc của hệ thống khi triển khai vào sử dụng thực tế. Sau đây là một số mẹo giúp bạn thực hiện kiểm thử hiệu năng tốt hơn:

  • Nên tách riêng môi trường kiểm thử hiệu năng với môi trường khác
  • Nên tìm các công cụ đáp ứng/phù hợp với yêu cầu kiểm thử hiệu năng của bạn
  • Nên thực hiện các kịch bản kiểm thử nhiều lần để có được số liệu chính xác hơn
  • Không thay đổi hay hiệu chỉnh môi trường kiểm thử giữa các lần kiểm thử để bảo đảm kết quả đáng tin cậy

Một số loại kiểm thử hiệu năng thông dụng

  • Load testing – Kiểm thử tải: Kiểm tra khả năng hoạt động của ứng dụng với tải khác nhau (tải là số lượng người dùng hoặc yêu cầu được gửi đến hệ thống). Mục tiêu chính là để xác định (dò tìm) mức tải tối đa mà hệ thống có thể xử lý được.
  • Stress testing – Kiểm thử áp lực: Kiểm thử để đánh giá một hệ thống ứng dụng dưới các khối lượng công việc cực lớn để đánh giá và quan sát cách hệ thống xử lý lưu lượng truy cập cao hoặc khối lượng dữ liệu lớn. Mục tiêu chính là để xác định “điểm phá vỡ” của một ứng dụng – là thời điểm mà hệ thống còn hoạt động được dù rất chậm, chuyển sang trạng thái không hoạt động. Cũng có thể để đánh giá xem thời gian hệ thống tự phục hồi trạng thái hoạt động bình thường của một hệ thống nhằm đảm bảo tính liên tục trong hoạt động kinh doanh
  • Endurance testing – Kiểm thử sức chịu đựng: Được thực hiện để đảm bảo phần mềm có thể xử lý tải dự kiến liên tục trong một khoảng thời gian dài.
  • Spike testing – Kiểm thử đột biến: Kiểm tra phản ứng của hệ thống phần mềm đối với các đột biến lớn đột ngột về tải do người dùng tạo ra. Ví dụ trong một đợt mở bán vé livestream của một ca sĩ hay nhóm nhạc nổi tiếng, hoặc trận bóng đá, dự kiến có hàng chục ngàn người đang “chen nhau” mua vé. Số lượng truy cập khổng lồ này chỉ có thể xảy ra vài lần trong năm nhưng nếu không đánh giá hoặc tìm ra được ngưỡng này thì hệ thống của bạn sẽ luôn trong tình trạng không truy cập được vào thời điểm cần thiết.
  • Volume testing – Kiểm thử khối lượng: Kiểm thử để đánh giá thời gian phản hồi và hành vi của hệ thống khi có một số lượng lớn dữ liệu trong cơ sở dữ liệu. Mục tiêu là đánh giá hiệu năng của hệ thống phần mềm (ứng dụng web hoặc trên thiết bị điện thoại) dưới các khối lượng dữ liệu khác nhau.
  • Scalability testing – Kiểm thử khả năng mở rộng: Các hoạt động kiểm thử được thực hiện để xác định khả năng mở rộng của một hệ thống/sản phẩm phần mềm. Mục tiêu chính là để xác định tính hiệu quả của hệ thống trong việc “mở rộng quy mô” để hỗ trợ việc tăng lượng người dùng. Loại kiểm thử này giúp lập kế hoạch bổ sung hoặc tự động tăng khả năng (bao gồm CPU, RAM – bộ nhớ tạm, và dung lượng lưu trữ) cho hệ thống phần mềm của bạn khi lượng người dùng tăng lên.

Các thông số thường gặp trong kiểm thử hiệu năng

Tuỳ thuộc vào phạm vi kiểm thử, loại hệ thống đang được kiểm thử (ví dụ như ứng dụng web hoặc ứng dụng mobile) mà các tham số đo lường hay thông tin cần được thu thập và giám sát trong sẽ khác nhau. Dưới đây là các thông số/thông tin chung thường được thu thập và giám sát trong quá trình kiểm thử hiệu năng:

  • Processor usage – Sử dụng bộ xử lý: khoảng thời gian mà bộ xử lý (CPU) dành để thực hiện các luồng xử lý.
  • Memory usage – Sử dụng bộ nhớ: lượng bộ nhớ tạm (RAM) được sử dụng để thực hiện các yêu cầu. Qua đó đánh giá hiệu suất của hệ thống để tối ưu chúng.
  • Disk I/O – Ghi/đọc ổ đĩa: khoảng thời gian ổ đĩa bận thực hiện yêu cầu đọc hoặc ghi.
  • Disk queue length – Độ dài hàng đợi đĩa: trung bình số lượng yêu cầu đọc và ghi được xếp hàng đợi cho đĩa đã chọn trong một khoảng thời gian.
  • Bandwidth – Băng thông: hiển thị số bit trên giây (bit/giây – thể hiện tốc độ đường truyền mạng) được sử dụng trong quá trình thực hiện kiểm thử.
  • Network output queue length – Độ dài hàng đợi đầu ra của mạng: độ dài hàng đợi đầu ra của các gói tin. Khi có nhiều hơn 1 hàng đợi, nghĩa là đang có sự chậm trễ và tắc nghẽn.
  • Response time – Thời gian phản hồi: thời gian từ khi người dùng thực hiện yêu cầu cho đến khi nhận được thông tin phản hồi đầu tiên từ hệ thống (server).
  • Throughput – Thông lượng: đo số lượng yêu cầu trên một đơn vị thời gian, thường là giây. Thể hiện tổng số lượng yêu cầu/đơn vị thời gian trong một khoảng thời gian
  • Hits per second – Lượt truy cập mỗi giây: Số lượt truy cập/yêu cầu được gửi đến máy chủ trong mỗi giây. Thường được đo lường trong quá trình kiểm thử tải.
  • Thread counts – Số lượng luồng: Số lượng luồng hiện đang chạy và hoạt động sẽ thể hiện “sức khoẻ” của hệ thống.

Các công cụ kiểm thử hiệu năng phổ biến

Hiện có rất nhiều công cụ kiểm thử hiệu năng cho các ứng dụng web và mobile. Việc chọn công cụ phù hợp sẽ phụ thuộc vào một số yếu tố như loại ứng dụng mà bạn cần kiểm thử, loại giao thức được hỗ trợ, chi phí, yêu cầu về phần cứng, v.v… Dưới đây là một số công cụ kiểm thử hiệu năng phổ biến. Lưu ý: thứ tự liệt kê của chúng không phản ánh điều gì.

1. Apache JMeter

Một trong những công cụ kiểm thử hiệu năng hàng đầu được sử dụng rộng rãi để kiểm thử tải của máy chủ (ứng dụng web). JMeter có thể được sử dụng để kiểm thử tải, phân tích và đo lường hiệu năng của nhiều loại dịch vụ, tập trung vào các ứng dụng web. Xem thêm chi tiết tại đây https://jmeter.apache.org

2. BlazeMeter

Được thiết kế và xây dựng bởi các kỹ sư đam mê mã nguồn mở. BlazeMeter giúp bạn kiểm thử hiệu năng, kiểm thử tải với quy mô lớn ngay trực tiếp trong IDE (Integrated Development Environment – môi trường phát triển tích hợp) của bạn. BlazeMeter tập hợp nhiều yếu tố cần thiết như hiệu suất cao, đầy đủ chức năng, không cần lập trình, kiểm thử và giám sát API, tạo dữ liệu kiểm thử và cũng giúp mô phỏng các dịch vụ cần thiết. Xem thêm chi tiết tại https://www.blazemeter.com

3. LoadRunner Professional

Là công cụ kiểm thử hiệu năng phổ biến nhất trên thị trường hiện nay, tuy nhiên chi phí hơi cao. Công cụ này có khả năng mô phỏng hàng trăm nghìn người dùng, giúp kiểm thử tải cho các ứng dụng để xác định hành vi của chúng theo từng mức tải cụ thể. Xem thêm chi tiết https://www.microfocus.com/en-us/products/loadrunner-professional/overview

Chi phí của LoadRunner Cloud hiện tại vào thời điểm đăng bài này (2023/05/02)

Đánh giá performance dựa vào số lượng request đến server

Xem thêm tại đây https://aws.amazon.com/marketplace/pp/prodview-h5bb6or53i3po

4. K6 Open Source

Grafana K6 là một công cụ kiểm thử tải (mã nguồn mở) giúp đánh giá hiệu năng của các hệ thống web một cách dễ dàng và hiệu quả, dành cho các bạn rành về kỹ thuật. K6 miễn phí, lấy lập trình viên (developer) làm trung tâm và có thể mở rộng thêm. K6 giúp bạn kiểm tra độ tin cậy và hiệu năng của hệ thống đang phát triển, đồng thời nắm bắt các sự cố và các lỗi liên quan đến hiệu năng sớm hơn. K6 được phát triển bởi Grafana Labs và cộng đồng. Xem thêm chi tiết https://k6.io

Trên đây là một số thông tin và kiến thức hữu ích về kiểm thử hiệu năng, hi vọng có thể giúp bạn có nền tảng cơ bản để học nâng cao về kiểm thử hiệu năng.