feat: support multi-machine collaborative distributed load testing #1193

This commit is contained in:
xucong053
2022-07-25 21:14:58 +08:00
committed by 徐聪
parent ab12707fcf
commit 0ab2017f93
29 changed files with 3354 additions and 171 deletions
+11 -5
View File
@@ -155,9 +155,9 @@ func (r *Rendezvous) setReleased() {
}
func initRendezvous(testcase *TestCase, total int64) []*Rendezvous {
tCase := testcase.ToTCase()
var rendezvousList []*Rendezvous
for _, step := range tCase.TestSteps {
for _, s := range testcase.TestSteps {
step := s.Struct()
if step.Rendezvous == nil {
continue
}
@@ -188,16 +188,20 @@ func initRendezvous(testcase *TestCase, total int64) []*Rendezvous {
return rendezvousList
}
func waitRendezvous(rendezvousList []*Rendezvous) {
func (r *Rendezvous) updateRendezvousNumber(number int64) {
atomic.StoreInt64(&r.Number, int64(float32(number)*r.Percent))
}
func waitRendezvous(rendezvousList []*Rendezvous, b *HRPBoomer) {
if rendezvousList != nil {
lastRendezvous := rendezvousList[len(rendezvousList)-1]
for _, rendezvous := range rendezvousList {
go waitSingleRendezvous(rendezvous, rendezvousList, lastRendezvous)
go waitSingleRendezvous(rendezvous, rendezvousList, lastRendezvous, b)
}
}
}
func waitSingleRendezvous(rendezvous *Rendezvous, rendezvousList []*Rendezvous, lastRendezvous *Rendezvous) {
func waitSingleRendezvous(rendezvous *Rendezvous, rendezvousList []*Rendezvous, lastRendezvous *Rendezvous, b *HRPBoomer) {
for {
// cycle start: block current checking until current rendezvous activated
<-rendezvous.activateChan
@@ -241,6 +245,8 @@ func waitSingleRendezvous(rendezvous *Rendezvous, rendezvousList []*Rendezvous,
if rendezvous == lastRendezvous {
for _, r := range rendezvousList {
r.reset()
// dynamic adjustment based on the number of concurrent users
r.updateRendezvousNumber(int64(b.GetSpawnCount()))
}
} else {
<-lastRendezvous.releaseChan