优化压测机器人代码

This commit is contained in:
liwei1dao 2023-09-07 15:45:42 +08:00
parent 10e8095c9a
commit ef8cecd870
9 changed files with 88 additions and 11 deletions

View File

@ -62,3 +62,10 @@ type MessageResp struct {
resp proto.Message
errdata *pb.ErrorData
}
type Pipeline struct {
Module string //模块名
Exenum int32 //执行次数
CurrNum int32 //当前已执行次数
ErrNotStop bool //遇到错误是否中断
}

View File

@ -28,7 +28,22 @@ func (this *ModuleRobot_Chat) Receive(robot IRobot, stype string, message proto.
//机器人执行流
func (this *ModuleRobot_Chat) DoPipeline(robot IRobot) (err error) {
var (
errdata *pb.ErrorData
usermodule *ModuleRobot_User
)
usermodule = robot.GetModule(comm.ModuleUser).(*ModuleRobot_User)
if _, errdata = robot.SendMessage("chat", "send", &pb.ChatSendReq{
Avatar: usermodule.user.Avatar,
Uname: usermodule.user.Name,
Ulv: usermodule.user.Lv,
Channel: pb.ChatChannel_World,
Ctype: pb.ChatType_Text,
Content: fmt.Sprintf("你好!我是%s", robot.Account()),
}); errdata != nil {
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
return
}
return
}

View File

@ -1,6 +1,9 @@
package robot
import (
"errors"
"fmt"
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
"google.golang.org/protobuf/proto"
@ -23,7 +26,17 @@ func (this *ModuleRobot_GM) Receive(robot IRobot, stype string, message proto.Me
//机器人执行流
func (this *ModuleRobot_GM) DoPipeline(robot IRobot) (err error) {
var (
errdata *pb.ErrorData
)
if _, errdata = robot.SendMessage("gm", "cmd", &pb.GMCmdReq{Cmod: "bingo:attr,gold,1000000"}); errdata != nil {
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
return
}
if _, errdata = robot.SendMessage("gm", "cmd", &pb.GMCmdReq{Cmod: "bingo:attr,diamond,1000000"}); errdata != nil {
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
return
}
return
}

View File

@ -33,7 +33,31 @@ func (this *ModuleRobot_Shop) Receive(robot IRobot, stype string, message proto.
//机器人执行流
func (this *ModuleRobot_Shop) DoPipeline(robot IRobot) (err error) {
var (
errdata *pb.ErrorData
usermodule *ModuleRobot_User
)
usermodule = robot.GetModule(comm.ModuleUser).(*ModuleRobot_User)
if _, errdata = robot.SendMessage("shop", "getlist", &pb.ShopGetListReq{
SType: pb.ShopType_DiamondShop,
}); errdata != nil {
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
return
}
for _, v := range this.goods[pb.ShopType_DiamondShop] {
if v.LeftBuyNum > 0 && usermodule.user.Diamond >= int64(v.Consume[0].N) {
if _, errdata = robot.SendMessage("shop", "buy", &pb.ShopBuyReq{
ShopType: pb.ShopType_DiamondShop,
Gid: v.Gid,
BuyNum: 1,
}); errdata != nil {
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
return
}
break
}
}
return
}

View File

@ -17,7 +17,7 @@ type (
RobotName string //机器人名称
RobotStart int32 //机器人初始下标
RobotLog bool
Pipeline []string //执行流水线
Pipeline []Pipeline //执行流水线
}
)

View File

@ -31,8 +31,10 @@ type Robot struct {
curreq string //当前请求
await chan *MessageResp
modules map[core.M_Modules]IModuleRobot
pipeline []string //执行流水线
cycle bool
pipeline []Pipeline //执行流水线
statistics []*RobotStatistics
wtaskerror error
}
func (this *Robot) Account() string {
@ -246,11 +248,24 @@ func (this *Robot) run() {
module IModuleRobot
err error
)
for _, v := range this.pipeline {
module = this.modules[core.M_Modules(v)]
if err = module.DoPipeline(this); err != nil {
log.Debug("[机器人 执行异常]", log.Field{Key: "Account", Value: this.account}, log.Field{Key: "module", Value: v}, log.Field{Key: "err", Value: err.Error()})
break
for this.cycle {
this.cycle = false
for _, v := range this.pipeline {
if v.CurrNum < v.Exenum {
module = this.modules[core.M_Modules(v.Module)]
if err = module.DoPipeline(this); err != nil {
if this.debug {
log.Debug("[机器人 执行异常]", log.Field{Key: "Account", Value: this.account}, log.Field{Key: "module", Value: v}, log.Field{Key: "err", Value: err.Error()})
}
if !v.ErrNotStop {
break
}
}
v.CurrNum++
if v.CurrNum < v.Exenum {
this.cycle = true
}
}
}
}
this.Close()

View File

@ -65,6 +65,7 @@ func (this *robotmgrComp) createRobot(index int32) {
index: index,
account: fmt.Sprintf("%s_%d", this.module.options.RobotName, this.module.options.RobotStart+index),
serverId: this.module.options.ServerID,
cycle: true,
pipeline: this.module.options.Pipeline,
}
if err = robot.Init(this.module.options.ServerAddr, robot); err != nil {

View File

@ -52,6 +52,7 @@ func (this *statisticalComp) RobotFinishedTest(robot *Robot) {
if this.endClientnum >= this.module.options.RobotTotalNum { //压测结束
this.OutReport()
}
log.Debugf("完成测试:%s", robot.account)
}
//输出报表

View File

@ -19,8 +19,9 @@ func (this *apiComp) FuncActivate(session comm.IUserSession, req *pb.SysFuncActi
if opencfg != nil {
if id := this.module.modelSys.validCond(session.GetUserId(), opencfg); id == "" { // 条件不满足
errdata = &pb.ErrorData{
Code: pb.ErrorCode_OpenCondErr,
Title: pb.ErrorCode_OpenCondErr.ToString(),
Code: pb.ErrorCode_OpenCondErr,
Title: pb.ErrorCode_OpenCondErr.ToString(),
Message: req.Cid,
}
return
}