Tổng số sample sau khi chạy xong thì nhiều gấp mấy lần mình

Chuyên đề thảo luận về Performance Testing
Forum rules
Chuyên đề này chỉ thảo luận về Performance Testing.
Để có kết quả nhanh, các bạn nên search trước khi tạo chủ đề mới.
Post Reply
triendovan
Fresher Tester
Posts: 26
Joined: Fri 07 Oct, 2011 3:42 pm
Contact:

Tổng số sample sau khi chạy xong thì nhiều gấp mấy lần mình

Post by triendovan »

Hi all,
Mình đang sử dụng jmeter để test performance.Có 1 vấn đề : Tổng số sample sau khi chạy xong thì nhiều gấp mấy lần mình config .
Vi du :
-Minh có 1 request post data lên server và config 16 thread cho 1s chay xong request
-Chọn forever và chay khoang 1 gio
=> sau khi chạy xong mình xem report thì tổng số sample chay xong lại nhiều gấp mấy lần mình tính toán ( Vi du : mình chỉ muốn chạy khoảng 9000 sample nhưng nó lại chạy và hiển thị trong report đến 35000 sample )
-> vậy là trong 1 giay jmeter có thể chạy hơn 16 threads do mình config ? Mọi người biết lý do thì nói mình hiểu với
Thanks,
DT



harano
Jr. Tester
Posts: 58
Joined: Fri 20 Apr, 2012 10:43 am
Contact:

Re: Tổng số sample sau khi chạy xong thì nhiều gấp mấy lần m

Post by harano »

Xin chao @triendovan,

Mình xin góp một vài ý để trả lời cho câu hỏi của bạn:
-Minh có 1 request post data lên server và config 16 thread cho 1s chay xong request
Ở đây, nếu bạn sử dụng jmeter, thì việc bạn config một số threads nào đó chạy trong một khoảng thời gian nhất địnhIMPOSSIBLE
Việc số threads đó chạy trong bao lâu, nó phụ thuộc vào nhiều yếu tố, và đặc biệt là phía server, server xử lý nhanh, thì nó sẽ xong nhanh, server xử lý chậm, thì nó sẽ xong chậm. Có lẽ bạn đang nhầm lẫn, bạn đang config cho 16 threads cùng xuất phát và run trong 1s, chứ không có nghĩa trong 1s đó là nó run xong.

Thêm nữa, mình tin là bạn đang nhầm lẫn giữa một số khái niệm: threads, users, sample và request... Mình sẽ giải thích thêm cho bạn:

- Threads (hay còn có thể hiểu là users): đươc run song song và độc lập, không liên quan gì đến nhau.
- Sample (là khái niệm trong JMeter, hay còn gọi đơn giản là request): nó là những gì mà threads/users thực hiện

Lấy ví dụ: Cần thực hiện những thao tác: login, mua sản phẩm, và logout. Nếu có 2 users, thì rõ ràng 2 users (threads) đó là độc lập, khác biệt, và có thể cùng làm song song những action giống nhau. User A login tại khoản A, mua sản phẩm A1, và logout, tương tự trong thời gian đó, User B cũng có thể login tài khoản B, mua sản phẩm B1, và logout.
Vậy ở đây, UserA và UserB là 2 users (threads) độc lập, và những action login, mua sản phẩmlogout là những request (hay còn gọi là samples)

Nhìn hình minh hoạ bên dưới:
Thread 1 (UserA): --Login A-->----Mua A1-->--Logout-->
Thread 2 (UserB): ---Login B--->--Mua B1-->----Logout---->
(Chiều dài mũi tên đại diện cho thời gian mỗi request run được)

Và hình minh hoạ ở trên là cho 1 lần run duy nhất. Còn một khái niệm nữa, đó là Loop: Loop được "hoạt động" bên trong mỗi 1 thread (user), nó giúp thread/user đó lặp đi lặp lại những thao tác có bên trong thread/user.

Lấy ví dụ run với 2 threads, và Loop (lặp 3 lần), ta có hình minh hoạ bên dưới:
T1 (UserA): --LogA-->----MuaA1-->--Logout-->[loop1]-LogA->---Mua A1-->--Logout-->[loop2]---LogA--->----Mua A1--->---Logout--->[loop3]
T2 (UserB): ---LogB--->--MuaB1-->----Logout---->[loop1]---LogB--->--MuaB1-->----Logout---->[loop2]---LogB--->--MuaB1-->----Logout---->[loop3]

Qua hình minh hoạ trên có thể thấy, trong mỗi một thread (user), BẮT BUỘC các sampler phải được run hết 1 lượt, thì loop tiếp theo mới được run, cứ thế , cứ thế run tiếp...

Giả sử, 3 requests LogA, MuaA1 và Logout run xong chỉ trong vòng ~300ms (mình nhắc lại một lần nữa, là những request này run xong, run trong bao lâu, nó là chuyện của server, mình KHÔNG THỂ control được là nó phải run trong bao lâu nhé), vậy thì trong 1s, chẳng phải là thread 1 đã run được xong 3 loops (3 samples theo ví dụ trên) sao? Và ở đây mình có tới 2 threads, nó chạy song song, giả sử thời gian run của Thread 2 cũng same same vậy, thì bây giờ, trong một giây, chúng ta đã có tới 18 samples được run, và chỉ với 2 threads, đúng chứ?

Giả sử, 3 request LogA, MuaA1 và Logout run xong trong vòng 500ms, vậy mỗi giây thread 1 run được 6 samples, và thread 2 cũng run được tầm đó. Nên 2 threads sẽ run được ~12 samples trong 1s.

Qua 2 "giả sử" trên, có thể thấy rõ, mỗi 1 giây, run được bao nhiêu samples, nó phụ thuộc hoàn toàn vào server, nhanh hay chậm...còn threads thì run song song và độc lập với nhau.

Trong trường hợp của bạn, bạn chỉ có 1 request duy nhất, và run với 16 threads, cộng thêm loop forever (loop forever ở đây có thể hiểu: mỗi thread nó run xong, nó loop, cứ vậy, loop vô tận cho đến khi hết thời gian hoặc mình stop), mình minh hoạ nó như sau:

T1 : --request POST-->---request POST-->-request POST-->----request POST---->-request POST->----request POST---->-request POST--->...
T2 : ---request POST-->----request POST---->-request POST->--request POST-->---request POST---->request POST---->-request POST--->...
T3 : -request POST->----request POST---->-request POST--->--request POST-->---request POST-->-request POST-->----request POST---->...
...
T16 : -----request POST->----request POST---->-request POST--->--request POST-->---request POST-->-request POST-->----request POST-->...

Và tuỳ vào thời gian mỗi request POST đó run bao lâu, mà mỗi giây tổng số samples là bao nhiêu...nếu nó chỉ mất 100ms để run request POST đó thì sẽ khác, mà nếu nó mất 500ms để run mỗi request thì sẽ khác nữa...và nếu nó mất 1s để run mỗi requests đó thì lại là một chuyện khác nữa...we never known.

Tuy nhiên, dựa vào kết quả của bạn 35000 samples --> có thể suy ra là 16 threads, mỗi threads sẽ run được ~2187 samples trong 1h = 3600s
=> mỗi samples run xong cần 3600/2187 = 1,6s
Bạn có thể tự kiểm tra lại detail từng request của bạn, xem response time của nó có phải ~1,6s không nhé.

Chi tiết hơn về các khái niệm Threads, User, Loop, Requests...bạn có thể tham khảo ở đây: https://jmetervn.com/2016/10/20/thread-group-in-jmeter/
Nếu bạn muốn trao đổi thảo luận về JMeter, bạn có thể join group Skype theo link này: https://join.skype.com/M3Xkc5RVm5qL

Thanks,
harano



Post Reply

Return to “Performance Testing - Kiểm thử hiệu năng”