接口测试

This commit is contained in:
zhaocy 2022-07-15 10:37:11 +08:00
parent 7bb8f8254a
commit c87bca9004
10 changed files with 70 additions and 88 deletions

View File

@ -35,6 +35,7 @@ func init() {
var account = flag.String("account", "", "登录账号")
var sid = flag.Int32("sid", 0, "区服ID")
var create = flag.Bool("create", false, "是否创建新账号") //false 不创建新账号
var role = flag.Bool("role", false, "创角")
func main() {
Execute()
@ -49,6 +50,7 @@ var runCmd = &cobra.Command{
opts.Create = *create
opts.Account = *account
opts.ServerId = *sid
opts.Role = *role
r := robot.NewRobot(opts)
r.Run()
},

View File

@ -1,44 +0,0 @@
package robot
import (
"go_dreamfactory/comm"
"go_dreamfactory/modules/user"
"go_dreamfactory/pb"
)
var (
addResBuilders = []*TestCase{
{
desc: "添加资源",
mainType: string(comm.ModuleUser),
subType: user.UserSubTypeAddRes,
req: &pb.UserAddResReq{
Res: &pb.UserAssets{
A: "item",
T: "10001",
N: 1000,
},
},
rsp: &pb.UserAddResResp{},
enabled: true,
},
{
desc: "添加资源2",
mainType: string(comm.ModuleUser),
subType: user.UserSubTypeAddRes,
req: &pb.UserAddResReq{
Res: &pb.UserAssets{
A: "item",
T: "10011",
N: 1000,
},
},
rsp: &pb.UserAddResResp{},
enabled: true,
},
}
)
func (r *Robot) RunAddRes() {
r.addBuilders(addResBuilders)
}

View File

@ -91,7 +91,7 @@ var (
enabled: true,
}
tcs = append(tcs, tc)
robot.addTestCaseAndReq(tcs) //这里一定要调用此方法才会发送请求
robot.addBuilders(tcs) //这里一定要调用此方法才会发送请求
}
},

View File

@ -54,12 +54,12 @@ var (
enabled: true,
},
}
robot.addTestCaseAndReq(tcs)
robot.addBuilders(tcs)
},
}
tcs = append(tcs, tc)
}
robot.addTestCaseAndReq(tcs) //这里一定要调用此方法才会发送请求
robot.addBuilders(tcs) //这里一定要调用此方法才会发送请求
}
},

View File

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

View File

@ -7,6 +7,7 @@ type Options struct {
Create bool
Secretkey string //秘钥串
ServerId int32 //区服ID
Role bool //是否创角
}
func DefaultOpts() *Options {

View File

@ -12,8 +12,8 @@ var pack_builders = []*TestCase{
mainType: string(comm.ModulePack),
subType: "queryuserpackreq",
// req: &pb.Pack_Getlist_Req{IType: 1},
rsp: &pb.UserCreateResp{},
enabled: true,
rsp: &pb.UserCreateResp{},
// enabled: true,
},
}

View File

@ -89,28 +89,28 @@ func (r *Robot) Run() {
if r.opts.Account == "" {
zlog.Fatal("WARNNING: account is required !!!")
}
r.enable = r.opts.Role
r.AccountLogin()
}
go func() {
for {
r.handleRsp()
}
}()
// go func() {
// for {
// r.handleRsp()
// }
// }()
ticker := time.NewTicker(time.Second * 65)
ticker := time.NewTicker(time.Second * 5)
go func() {
for {
select {
case <-ticker.C:
if len(r.builderMap) == 0 {
r.printReport(&TestReport{
caseTotal: r.caseTotal,
caseSuccess: r.caseSuccess,
caseError: r.caseError,
})
os.Exit(0)
}
r.printBuilders()
<-ticker.C
if len(r.builderMap) == 0 {
r.printReport(&TestReport{
caseTotal: r.caseTotal,
caseSuccess: r.caseSuccess,
caseError: r.caseError,
})
os.Exit(0)
}
}
}()
@ -149,13 +149,20 @@ func (r *Robot) addBuilders(builders []*TestCase) {
}
}
func (r *Robot) printBuilders() {
for k, v := range r.builderMap {
zlog.Debugf("%v %s.%s", k, v.mainType, v.subType)
}
}
//处理用例,发送请求
func (r *Robot) handleReq() {
go func() {
// go func() {
for len(r.builderMap) > 0 {
for _, b := range r.builderMap {
if b.enabled && b.req != nil && !b.requested {
time.Sleep(time.Millisecond * 500)
r.reqCh <- b.id
// r.reqCh <- b.id
b.start = time.Now()
r.start = time.Now()
head := &pb.UserMessage{MainType: b.mainType, SubType: b.subType}
@ -166,9 +173,12 @@ func (r *Robot) handleReq() {
zlog.Errorf("send to client err:%v", err)
}
b.requested = true
r.handleRsp(b.id)
}
}
}()
}
// }()
}
//加入用例并执行请求
@ -196,12 +206,11 @@ func (r *Robot) handleNotify(uuid string, msg *pb.UserMessage) {
r.printReply(msg, tc)
delete(r.builderMap, uuid)
return
}
}
//处理响应
func (r *Robot) handleRsp() {
func (r *Robot) handleRsp(id string) {
defer func() {
r.caseTotal++
}()
@ -215,14 +224,19 @@ func (r *Robot) handleRsp() {
zlog.Fatalf("unmarshal err:%v", err)
}
uuid := <-r.reqCh
uuid, _ := r.findTestCase(msg)
if uuid == "" {
uuid = id
}
// uuid := <-r.reqCh
r.handleNotify(uuid, msg)
if v, ok := r.builderMap[uuid]; ok {
r.handleNotify(uuid, msg)
if v.enabled &&
(msg.MainType == v.mainType &&
msg.SubType == v.subType) &&
v.requested {
// if v.enabled &&
// (msg.MainType == v.mainType &&
// msg.SubType == v.subType) &&
// v.requested {
v.hs = time.Since(v.start)
if !comm.ProtoUnmarshal(msg, v.rsp) {
@ -230,7 +244,6 @@ func (r *Robot) handleRsp() {
}
//处理下一层用例
// r.goNext(v)
if v.next != nil {
v.next(r, v.rsp)
}
@ -253,7 +266,16 @@ func (r *Robot) handleRsp() {
}
r.caseSuccess++
}
// }
}
func (r *Robot) findTestCase(msg *pb.UserMessage) (string, bool) {
for k, v := range r.builderMap {
if v.mainType == msg.MainType && v.subType == msg.SubType {
return k, true
}
}
return "", false
}
//登录回调
@ -439,7 +461,6 @@ func (r *Robot) onUserLoaded() {
//user
r.RunUser()
r.RunAddRes()
//hero
r.RunHero()
//friend

View File

@ -17,19 +17,19 @@ var user_builders = []*TestCase{
NickName: "乐谷70616",
},
rsp: &pb.UserCreateResp{},
enabled: true,
// enabled: true,
}, {
desc: "添加资源",
mainType: string(comm.ModuleUser),
subType: user.UserSubTypeAddRes,
req: &pb.UserAddResReq{ //设置请求参数
subType: "addres",
req: &pb.UserAddResReq{
Res: &pb.UserAssets{
A: comm.ResGold,
T: "",
N: 100,
A: "item",
T: "10011",
N: 999,
},
},
rsp: &pb.UserAddResResp{},
rsp: &pb.UserAddResResp{},
// enabled: true,
},
}

View File

@ -12,6 +12,7 @@ import (
cfg "go_dreamfactory/sys/configure/structs"
"strconv"
"github.com/spf13/cast"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/anypb"
)
@ -224,7 +225,8 @@ func (this *ModuleBase) DispenseRes(uid string, res []*cfg.Game_atn, bPush bool)
code = this.ModuleUser.AddAttributeValue(uid, v.T, v.N, bPush)
} else if v.A == comm.ItemType { //道具资源
resID, _ = strconv.Atoi(v.T)
resID = cast.ToInt(v.T)
// resID, _ = strconv.Atoi(v.T)
code = this.ModuleItems.AddItem(source, uid, int32(resID), v.N, bPush)
} else if v.A == comm.HeroType { //卡片资源
resID, _ = strconv.Atoi(v.T)