Mình vừa nhận được câu hỏi từ 1 bạn học viên.
Thiệt là 1 câu hỏi hóc búa, mình tìm mãi trên mạng mà không có 1 lời giải thích nào về cái graph trên, không hiểu JMeter tạo ra nó để làm gì và công thức tính là gì. Sau 3 ngày nghiền ngẫm thì mình đã debug được cách JMeter tính toán cái này cái chart này và giờ mình sẽ chia sẻ lại với các bạn.
Sau khi run test non-GUI thì kết quả lại được save vào file .jtl
hoặc csv
và từ file kết quả này data sẽ được tính toán và tạo thành các chart/graph khác nhau.
Lưu ý: Mỗi 1 dòng trong file csv sẽ được gọi là 1 sample.
Step 1: Chia toàn bộ sample thành 2 loại: Success và Failure
Step 2: Với mỗi loại trên, sẽ tìm ra các interval của mỗi sample
Công thức của nó như sau:
private Long getTimeInterval(Sample sample) { long time = sample.getEndTime(); return time - (time % parent.getGranularity()); }
Ví dụ: 1 sample có timeStamp = 1730260564249 và elapsed = 2185
EndTime = 1730260564249 + 2185 = 1730260566434
parent.getGranularity() = 1000
(mặc định của chart này là 1000ms, ko lấy từ config granularity trong config của user.properties đâu)Interval = 1730260566434 - (1730260566434 % 1000) = 1730260566000
Nên nhớ, trong lập trình thì “%” là phép chia lấy phần dư.
Step 3: Đếm số lượng request có cùng interval và save thông tin này vào 1 cái map.
Trong cái map trên, bạn sẽ nhìn thấy mỗi thời điểm interval sẽ có số lượng request kết thúc cùng nhau. Ví dụ: 1730261351000=4 có nghĩa là tại thời điểm 1730261351000 có 4 request.
Step 4: Sau đó JMeter sẽ gộp những sample có mà interval cùng nhau vào 1 chỗ. Tìm elapse time của các sample này, sắp xếp từ thấp đến cao, sau đó tìm ra median (trung vị) của list elapse time.
Trong cái map trên, mình thấy có 4 interval mà có số lượng 4 request.
1730261351000=4 1730260900000=4 1730261279000=4 1730261317000=4
Mình dò ngược vào file result csv, lấy được các elapse time của bọn nó.
Mình lấy các elapse time được bôi đỏ, sắp xếp theo thứ tự từ thấp đến cao.
Như bạn đã thấy con số trung vị của nó là 6628ms, và nó chính là cái đã show ra trên cái graph trên.
- Trục X (dọc) là thể hiện median response time
- Trục Y (ngang) chính là số lượng request có cùng interval. Trong cái map mình show ở trên thì chỉ có 1, 2, 3, 4 thôi, không có 5, do đó ở hình này chỉ thấy 1, 2, 3, 4 thôi. Và vì cũng ko có 2.5 nên tại mốc 2.5 không có điểm nào được vẽ.
Kết luận, cái này không phải là throughput của hệ thống mà bạn thường nghĩ, nếu bạn nhìn vào cái 4 req/s kia mà xác định throughput là 4 req/s là sai chắc luôn. Throughput được thể hiện ở biểu đồ hit per second.
Hiện tại, mình cũng chưa biết được ý nghĩa của graph này, lúc nào biết mình sẽ edit lại bài viết sao. Thế thôi, chào các bạn. 😀