优化测试请求

This commit is contained in:
zhaocy 2022-07-13 18:26:07 +08:00
parent f21f9baf1f
commit 67677ed168
9 changed files with 67 additions and 53 deletions

View File

@ -30,9 +30,9 @@ func init() {
RootCmd.AddCommand(runCmd)
}
var account = flag.String("account", "", "account")
var account = flag.String("account", "", "登录账号")
var sid = flag.Int32("sid", 0, "区服ID")
var create = flag.Bool("create", false, "account") //false 不创建新账号
var create = flag.Bool("create", false, "是否创建新账号") //false 不创建新账号
func main() {
Execute()

View File

@ -91,7 +91,7 @@ var (
enabled: true,
}
tcs = append(tcs, tc)
robot.AddTestCases(tcs)
robot.addTestCaseAndReq(tcs)
}
},
@ -106,7 +106,7 @@ var (
}
)
//声明加入到构建器并发起请求
//声明加入到构建器
func (r *Robot) RunFriend() {
r.AddTestCases(friendBuilders)
r.addBuilders(friendBuilders)
}

View File

@ -45,7 +45,7 @@ var (
}
tcs = append(tcs, tc)
}
robot.AddTestCases(tcs)
robot.addTestCaseAndReq(tcs)
}
},
@ -96,5 +96,5 @@ var (
//声明加入到构建器并发起请求
func (r *Robot) RunHero() {
r.AddTestCases(heroBuilders)
r.addBuilders(heroBuilders)
}

View File

@ -60,15 +60,15 @@ func (r *Robot) AccountLogin() {
req: &pb.UserCreateReq{ //设置请求参数
NickName: nick,
},
rsp: &pb.UserCreateResp{},
// enabled: true,
rsp: &pb.UserCreateResp{},
enabled: true,
}
tcs = append(tcs, tc)
r.AddTestCases(tcs)
r.addTestCaseAndReq(tcs)
}
},
},
}
r.AddTestCases(builders)
r.addTestCaseAndReq(builders)
}

View File

@ -19,5 +19,5 @@ var pack_builders = []*TestCase{
//声明加入到构建器并发起请求
func (r *Robot) RunPack() {
r.AddTestCases(pack_builders)
r.addBuilders(pack_builders)
}

View File

@ -24,8 +24,9 @@ type Robot struct {
user *pb.DBUser
builderMap map[string]*TestCase
// linkCase *LinkCase
wg sync.WaitGroup
ch chan string //uuid
wg sync.WaitGroup
reqCh chan string //请求通道uuid
// rspCh chan string //响应通道uuid
}
func NewRobot(opts *Options) *Robot {
@ -37,7 +38,8 @@ func NewRobot(opts *Options) *Robot {
ws: ws,
opts: opts,
builderMap: make(map[string]*TestCase),
ch: make(chan string, 10),
reqCh: make(chan string, 1),
// rspCh: make(chan string, 10),
}
return r
@ -67,7 +69,7 @@ func (r *Robot) Run() {
if err = proto.Unmarshal(data, msg); err != nil {
log.Fatal(err)
}
r.batchhandleRsp(msg)
r.handleRsp(msg)
}
}()
@ -75,7 +77,7 @@ func (r *Robot) Run() {
}
type TestCase struct {
id string //uuid
id string //用例ID 如果没有指定,会自动赋值uuid
desc string //用例描述
mainType string //协议类型 L1
subType string //协议类型 L2
@ -115,23 +117,29 @@ func (r *Robot) handleReq() {
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), b.req)
err := r.SendToClient(head, b.req)
if err != nil {
log.Fatal(err)
delete(r.builderMap, b.id)
log.Print(err)
continue
}
b.requested = true
r.ch <- b.id
r.reqCh <- b.id
}
}
}
//执行请求
func (r *Robot) AddTestCases(tcs []*TestCase) {
//加入用例并执行请求
func (r *Robot) addTestCaseAndReq(tcs []*TestCase) {
r.addBuilders(tcs)
r.handleReq()
}
//执行响应
func (r *Robot) batchhandleRsp(msg *pb.UserMessage) {
uuid := <-r.ch
//处理响应
func (r *Robot) handleRsp(msg *pb.UserMessage) {
uuid := <-r.reqCh
if uuid == "" {
log.Printf("[%v.%v] uuid is empty", msg.MainType, msg.SubType)
return
}
if v, ok := r.builderMap[uuid]; ok {
if v.enabled &&
(msg.MainType == v.mainType &&
@ -140,6 +148,7 @@ func (r *Robot) batchhandleRsp(msg *pb.UserMessage) {
if !comm.ProtoUnmarshal(msg, v.rsp) {
return
}
//执行自定义打印
if v.print == nil {
printReply(msg, v)
} else {
@ -149,6 +158,7 @@ func (r *Robot) batchhandleRsp(msg *pb.UserMessage) {
fmt.Println("==============================")
}
//处理下一层用例
if v.next != nil {
v.next(r, v.rsp)
}
@ -156,9 +166,10 @@ func (r *Robot) batchhandleRsp(msg *pb.UserMessage) {
if msg.MainType == "user" && msg.SubType == "login" {
r.loginCallback(v.rsp)
} else {
//清除已执行的用例
delete(r.builderMap, v.id)
}
// r.rspCh <- v.id
r.wg.Done()
}
}
@ -166,16 +177,19 @@ func (r *Robot) batchhandleRsp(msg *pb.UserMessage) {
//登录回调
func (r *Robot) loginCallback(rsp proto.Message) {
//清除登录用例
delete(r.builderMap, "login")
lr := rsp.(*pb.UserLoginResp)
if lr.Data != nil {
r.user = lr.Data
r.onUserLoaded()
} else {
r.AccountRegister(r.opts.Account, int32(r.opts.ServerId)) //请求Http接口模拟创建新账号
//请求Http接口模拟创建新账号
r.AccountRegister(r.opts.Account, int32(r.opts.ServerId))
}
}
//发送消息
func (r *Robot) SendToClient(msg *pb.UserMessage, rsp proto.Message) error {
//模拟客户端 每次请求都会生成新的秘钥
msg.Sec = r.BuildSecStr()
@ -186,28 +200,6 @@ func (r *Robot) SendToClient(msg *pb.UserMessage, rsp proto.Message) error {
return nil
}
//在这里添加玩家成功登录以后的测试方法
//次方法在用户登录成功后调用
func (r *Robot) onUserLoaded() {
//notify
r.RunNotify()
//user
r.RunUser()
//hero
r.RunHero()
//friend
r.RunFriend()
//pack
// r.RunPack()
//task
r.RunTask()
// story
r.RunStory()
}
//注册账号
func (r *Robot) AccountRegister(account string, sid int32) {
if account == "" {
@ -233,11 +225,11 @@ func (r *Robot) AccountRegister(account string, sid int32) {
err = jsoniter.Unmarshal(body, regRsp)
if regRsp.Code == pb.ErrorCode_Success { //注册成功
fmt.Printf("account:%s 注册成功", regRsp.Account)
//登录
var user_builders = []*TestCase{
{
id: "login",
desc: "登录",
mainType: "user",
subType: "login",
@ -249,7 +241,7 @@ func (r *Robot) AccountRegister(account string, sid int32) {
enabled: true,
},
}
r.AddTestCases(user_builders)
r.addTestCaseAndReq(user_builders)
}
}
@ -272,3 +264,25 @@ func printReply(msg *pb.UserMessage, builder *TestCase) {
func traceFunc(module string, funcName string, uid string, funcArgs interface{}) {
log.Printf("req [%s.%s] [%s] [%v]", module, funcName, uid, funcArgs)
}
//在这里添加玩家成功登录以后的测试方法
//次方法在用户登录成功后调用
func (r *Robot) onUserLoaded() {
//notify
r.RunNotify()
//user
r.RunUser()
//hero
r.RunHero()
//friend
r.RunFriend()
//pack
// r.RunPack()
//task
r.RunTask()
// story
r.RunStory()
}

View File

@ -40,5 +40,5 @@ var (
//声明加入到构建器并发起请求
func (r *Robot) RunStory() {
r.AddTestCases(storyBuilders)
r.addBuilders(storyBuilders)
}

View File

@ -62,5 +62,5 @@ var (
//声明加入到构建器并发起请求
func (r *Robot) RunTask() {
r.AddTestCases(taskBuilders)
r.addBuilders(taskBuilders)
}

View File

@ -36,5 +36,5 @@ var user_builders = []*TestCase{
//声明加入到构建器并发起请求
func (r *Robot) RunUser() {
r.AddTestCases(user_builders)
r.addBuilders(user_builders)
}