Những vấn đề cần nắm vững khi thực hiện performance testing

Trước tiên phải nói là kiến thức ở đây là sự tập hợp kiến thức của mình với 3 nguồn chính:

  1. Từ khoa-hoc-jmeter-online (giáo viên là anh Vũ Trần) – Đã ngừng dạy
  2. Từ group skype Jmeter
  3. Từ sách và internet (phía cuối post có list sách mình đã tham khảo)

Vì kiến thức mình có được 1 phần rất lớn đến từ lớp học nên mình cũng không thể chia sẻ kiến thức ở lớp học ở blog của mình được. Mình chỉ có thể viết guideline để hướng dẫn các bạn tự học, và nếu bạn muốn học có trình tự, đảm bảo hiểu đúng thì nên đăng ký lớp học của anh Vũ Trần (ông ấy rất cần tiền để mua sữa cho con. :D).

I. Mở đầu:

Performance Test 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. Nó 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 project cũng như ảnh hưởng xấu khi PM đánh giá tester.

Việc nhầm lẫn thường xảy ra khi tester thường bị yêu cầu thực hiện Perf Test khi trong đầu còn chưa có tí kiến thức nào cả, chỉ kịp đọc 1-2 bài viết, xem mấy cái video hướng dẫn sử dụng Jmeter ở trên mạng rồi kỳ cạch làm theo. Và thế là tưởng như đã hiểu về Perf Test rồi. 🙁 Bên cạnh đó còn là việc rất nhiều người cả khách hàng, PM, dev và tester hiểu sai —> đưa yêu cầu sai + cách thực hiện sai –> kết quả không có giá trị.

Performance Testing không phải thứ học trong ngày 1, ngày 2 được. Bạn cần thời gian để học và thực hành rất rất nhiều.

Phần dưới là các đầu mục quan trọng mà bạn (nếu muốn học Perf đúng) nên nghiên cứu kỹ càng.

II. Các vấn đề liên quan đến Performance Testing

1. Đối tượng của Performance Test

Bạn nào mới làm tester có thể chưa biết nhưng bạn nào làm tầm 6 tháng trở lên là biết kiến trúc của web app và mobile app gồm có 2 phần: Client và Server.

Perf Test là test hiệu năng của server. –> đối tượng test là SERVER.

Vậy nên, đừng bạn nào hỏi là”Jmeter test perf cho web, có test được cho mobile ko?“. Miễn là nó thuộc dạng Client-Server và protocol giữa 2 cái đó là protocol mà Jmeter có support, thì test được tất.

Câu hỏi nhỏ: theo bạn thì các tools chuyên test Perf như Jmeter sẽ làm thế nào để thực hiện test? (hãy trả lời ở phần comment nhé)

2. Các kiểu test

Có rất nhiều kiểu:

  • Load Test
  • Stress Test
  • Spike Test
  • Endurance (Soak) Test
  • Scalability Test
  • Volume Test

Ơ thế còn “Performance Test” là kiểu test gì? –> Nó chẳng phải là 1 kiểu test cụ thể nào cả, nó là 1 thuật ngữ dùng chung có tất cả các kiểu test trên.

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?

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

Các tiêu chí để đánh giá hiệu năng server 1 ứng dụng có nhiều, nhưng đối với 1 Tester không chuyên Perf thì chỉ nên tập trung vào 2 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
  • Throughput: Số lượng transaction (request được xử lý) trong 1 đơn vị thời gian (second / minute)

Câu hỏi nhỏ: theo bạn thì thời gian load 1 page ở tool Jmeter và Chrome có bằng nhau không? vì sao?

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ụ như: “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. 🙁

4. Các bước từ đầu đến cuối của một quá trình test

Nhìn thì có vẻ khiếp nhưng cũng không khó hiểu lắm, trong đó có 2 mục quan trọng là:

  • Create Test Plan
  • Analyze Report

Hãy đảm bảo rằng bạn có 1 cái test plan chuẩn trước khi chạy đến hỏi “Mọi người ơi, cách phân tích báo cáo như thế nào nhỉ?”

Vậy thì làm thế nào để có được 1 cái test plan chuẩn? Câu hỏi đau đầu. haizzz

Test Plan được xây dựng dựa theo kiểu test mà bạn đang thực hiện. Nhìn chung test plan gồm các 2 phần:

  • Xây dựng test script run đúng, không lỗi
  • Config các tham số theo kiểu test mà bạn thực hiện (cái này bạn phải tự trả lời được sau khi tìm hiểu về các kiểu test ở phía trên)

Làm thế nào để xây dựng test script run đúng ko lỗi? –> Đó là lúc chúng ta sử dụng tool để build test script.

III. Sử dụng tool Jmeter cho Perf Test:

Jmeter chắc ai cũng biết nhưng giỏi Jmeter thì chắc cũng chẳng có nhiều người. Mình cũng chẳng phải hạng giỏi, chỉ biết sử dụng những cái cơ bản, nên phần này mình không hướng dẫn gì nhiều, chỉ viết guideline để mọi người tự tìm hiểu tiếp.

1. Các thành phần của Jmeter

Jmeter có những thành phần sau:

  1. Samplers
  2. Logic Controllers
  3. Listeners
  4. Configuration Elements
  5. Assertions
  6. Timers
  7. Pre Processors
  8. Post-Processors
  9. Miscellaneous Features

Vậy, phải học những phần nào? –> xin thưa là học hết, mỗi phần lại có khoảng 10 phần nhỏ nữa, chịu khó mà học. Nói thật là mỗi phần chính kia, chỉ cần học 1-2 phần nhỏ là được, không có sức để học hết tất cả đâu. :)))))

2. Xây dựng test script

Có 2 kiểu xây:

  1. Xây tay: tự build các thành phần test plan.
  2. Xây máy: record lại step khi thực hiện trên browser hoặc mobile.

Cách xây chuẩn nhất là: sử dụng recording để record lại hết tất cả các request, tránh bị miss request nào đó. Vì việc recording sẽ lưu lại mọi tham số dưới dạng giá trị nên script run lại sẽ bị lỗi (ví dụ: token hết hạn, datetime invalid, email đã tồn tại …). Sau đó, ta tự chỉnh sửa test script để điều chỉnh các tham số, tạo ra các biến dynamic để script run không còn lỗi.

3. Thực hiện run test

Run Test ở Jmeter có 2 loại:

  • Run bằng GUI: được sử dụng để verify test script xem đã ổn chưa, còn chỗ nào bị lỗi nữa không.
  • Run bằng non-GUI: đây mới thực sự là run test performance. Vì sao cần run bằng non-GUI thì đọc bài này.

Chú ý:

  • Nên có phương án để dọn rác cho DB sau mỗi lần run vì sau mỗi lần dữ liệu được tạo mới là khá nhiều
  • Nên chú ý đến máy chạy Jmeter, có đủ CPU, RAM và network để run với số lượng thread mà bạn muốn hay ko
  • Nếu số lượng threads cần tạo ra lớn thì nên sử dụng Distributed testing.

4. Export & Analyze Report

Có nhiều loại report trong Jmeter được gọi chung là listener. Nếu bạn chỉ là beginner thì chỉ nên tập trung vào HTML report, có đầy đủ chart và các thông tin cần thiết. Để tạo ra được HTML report thì các bạn tự tìm hiểu. Nếu bạn đã tìm hiểu được Jmeter 1 thời gian và muốn monitor các chỉ số ngay khi thực hiện run test, bạn có thể follow bài viết này.

Để phân tích report đúng:

  • Hiểu rõ kiểu test đang được thực hiện
  • Kết hợp với các tiêu chí test nói ở trên
  • Xem biểu đồ ở HTML report (tập trung vào các chart liên quan trực tiếp tới tiêu chí test)
  • Xem biểu đồ trạng thái của server ở những mốc quan trọng và đối chiếu với HTML report

Dưới đây là 1 số sách mình đã tham khảo:

  1. Pro Apache JMeter: Web Application Performance Testing (link)
  2. JMeter Cookbook (link)
  3. Master Apache JMeter From load testing to DevOps.(link)
  4. The Art of Application Performance Testing: From Strategy to Tools (link)

5 2 votes
Article Rating
Subscribe
Notify of
guest
21 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Nguyễn Hường
Nguyễn Hường
5 years ago

Bài rất hay. Rất mong các bài tiếp theo của anh.
Anh chia sẻ giúp em khóa học của anh Vũ Trần được không? Em search mà không ra. Em cảm ơn ạ.

Nguyen Ngan
Nguyen Ngan
5 years ago

Em cảm ơn anh ạ. Bài viết mở đầu của anh rất hay và thú vị ạ. 😀 😀 😀

Truyền
Truyền
5 years ago

Cũng may là có đọc bài này :v

Nhien Vu
Nhien Vu
5 years ago

Bài của anh rất hữu ích, em cũng tự học hết phần cơ bản nhưng về analyze report và xác định những thông số như thế nào là chuẩn thì chưa có kinh nghiệm

Thu Hiền
Thu Hiền
5 years ago

bài viết rất hữu ích, em cảm ơn ạ!

jmetervietnam
5 years ago

Nay mới biết được blog của Jang Idol. Cảm ơn về bài viết hữu ích <3

Nguyen Hang
Nguyen Hang
5 years ago

Chào anh Giang,

Bài viết của anh rất hay. Em cũng làm về jmeter khá nhiều nhưng hiện em đang gặp vấn đề với giao thức RTSP (test web view camera realtime) chưa xử lý được. Anh có kinh nghiệm gì về phần này anh có thể chia sẻ cho em được không ạ :D.

trackback

[…] bài này, mình đã có nói về cách tạo script của load test, nó phụ thuộc vào bạn có bao […]

Le Duc Nghia
Le Duc Nghia
3 years ago

Dear anh Giang!

Anh share em skype anh Vũ Trần đc không ạ

Superman
Superman
1 year ago

Hi a. Giang
Bài viết của a rất hay. Nhưng em có thắc mắc ở phần xây dựng test script:

(Web) ở page em cần test có đến cả trăm request: .js, ảnh (gif, png, webp,…), mp4, json, html, css, và các API GET info,… —> vậy thì test script của em có cần phải có đủ tất cả những request đó như trên browser hay không? hay là em chỉ cần có những API chính thôi. (ví dụ như là page mua hàng, thì chỉ cần API GET thông tin sản phẩm và 1 API khi click mua)
Mong a giải đáp giúp em với ạ, cảm ơn a rất nhiều.

Last edited 1 year ago by Superman
P.anh
P.anh
29 days ago

dạ cho em hỏi JMetter test được AI không ạ