gitee.com/KyleChenSource/lib-robot@v1.0.2/robottest/common/brutetest/brutetest_task.go (about) 1 package brutetest 2 3 import ( 4 "fmt" 5 6 "gitee.com/KyleChenSource/lib-robot/robottest/log" 7 ) 8 9 const ( 10 task_split_limit = 15000 // 进行拆分的case数量 11 task_split_cnt = 10000 // 拆分后每个task数量 12 ) 13 14 var ( 15 BrutetestTaskChan = make(chan *BrutetestTask, 10240) 16 ) 17 18 type BrutetestTask struct { 19 Cid int 20 Skip uint64 // 其实消息数 21 Limit uint64 // 当前任务的次数限制 22 } 23 24 func taskDispatch() { 25 for cid, cnfs := range BrutetestCaselistMap { 26 gen := cnfs[0].Generator(0, 0) 27 if gen.Count() > task_split_limit { 28 c := uint64(gen.Count()/task_split_cnt) + 1 29 p := gen.Count()/c + 1 30 for j := uint64(0); j < c; j++ { 31 skip := p * j 32 limit := (gen.Count() - skip) % (p + 1) 33 if limit == 0 { 34 break 35 } 36 BrutetestTaskChan <- &BrutetestTask{ 37 Cid: cid, 38 Skip: skip, 39 Limit: limit, 40 } 41 } 42 log.LogDebug("BrutetestTask Generator msg:%s casecnt:%d msgcnt:%d split cnt:%d", cnfs[0].MsgName, len(cnfs), gen.Count(), c) 43 } else { 44 45 BrutetestTaskChan <- &BrutetestTask{ 46 Cid: cid, 47 Skip: 0, 48 Limit: 0, 49 } 50 log.LogDebug("BrutetestTask Generator msg:%s casecnt:%d msgcnt:%d", cnfs[0].MsgName, len(cnfs), gen.Count()) 51 } 52 } 53 54 close(BrutetestTaskChan) 55 log.LogInfo("BrutetestTask Generator End, Chan Close") 56 } 57 58 func BrutetestTaskCreate(file string) (taskCnt int, err error) { 59 err = BruteTestCreate(file) 60 if err != nil { 61 return 62 } 63 64 msgCnt := 0 65 for _, cnfs := range BrutetestCaselistMap { 66 gen := cnfs[0].Generator(0, 0) 67 if gen == nil { 68 err = fmt.Errorf("BrutetestTask msg:%s casecnt:%d generator nil", cnfs[0].MsgName, len(cnfs)) 69 return 70 } 71 72 msgCnt += int(gen.Count()) 73 if gen.Count() > task_split_limit { 74 c := (int(gen.Count()/task_split_cnt) + 1) 75 taskCnt += c 76 log.LogInfo("BrutetestTask msg:%s casecnt:%d msgcnt:%d(%d) split cnt:%d", cnfs[0].MsgName, len(cnfs), gen.Count(), gen.RealCount(), c) 77 } else { 78 taskCnt++ 79 log.LogInfo("BrutetestTask msg:%s casecnt:%d msgcnt:%d", cnfs[0].MsgName, len(cnfs), gen.Count()) 80 } 81 } 82 83 log.LogInfo("BrutetestTask cnt:%d msgcnt:%d taskcnt:%d", len(BrutetestCaselistMap), msgCnt, taskCnt) 84 85 go taskDispatch() 86 87 return 88 }