CooCare客户端压力测试环境 - housekeeper-software/coocare GitHub Wiki

目的

用于在云端模拟一定数量的CooCare客户端进行服务器的压力测试。 测试端可以通过websocket连接给压测服务器发送测试指令。

websocket连接配置

连接地址: ws://xx.xx.xx.xx:18080/coocare

启动压测

连接上服务器之后,发送如下的json:

{
   "cmd":"start",
   "communicationServer":"192.168.180.70:10888", //通讯服务器地址和端口,需要内网
   "redis":"192.168.180.70:6379,ssc82893388", //redis服务器(如有密码需要设置)
   "engineer":[   //这里是目标接收消息的工程师账号列表
      "E0000000001",
      "E0000000002",
      "E0000000003",
      "E0000000004",
      "E0000000005",
      "E0000000006",
      "E0000000007",
      "E0000000008",
      "E0000000009",
      "E0000000010"
   ],
   "user":[  //这里是用户账号,压测服务器会到redis自动创建这些用户
      {
         "uid":"C0000000001",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000002",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000003",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000004",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000005",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000006",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000007",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000008",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000009",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000010",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      }
   ],
   "message":{ //这里配置发送的消息类型和正文,text可以是一个json格式,也可以是个文本
      "type":0, 
      "text":"this is a text message"
   },
   "threadCount":10, //测试线程数
   "sendCount":1000, //每个用户发多少组消息,每组消息就是一个客户给工程师列表中的所有工程师发送一个消息
   "sendInterval":10,//每次发消息的间隔,毫秒
   "reportInterval":5000 //服务器多少毫秒报告状态
}

服务器返回:
{"cmd":"start","message":"","result":true}
{"cmd":"start","message":"","result":false}

停止测试

{"cmd":"stop"}

在redis中创建账号

{
   "cmd":"create_user",
   "redis":"192.168.180.70:6379,ssc82893388",
   "user":[
      {
         "uid":"C0000000001",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000002",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000003",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000004",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000005",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000006",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000007",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000008",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000009",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      },
      {
         "uid":"C0000000010",
         "token":"2ac7c68cb83333ab1f49c09c8b2572eb2e22d1dc",
         "channel":"huiguanjia_dl"
      }
   ]
}

服务器周期报告

报告分两种:
1. 定时报告
{"cmd":"report","recv_count":0.0,"send_ack_count":3800.0,"send_failed_count":0.0,"send_success_count":3810.0,"uid":"C0000000003"}
2. 某个客户端断开报告 
{"cmd":"disconnect","code":0,"uid":"C0000000003"}

测试技巧

首先确定需要多少个线程,再者是多少个用户,用户会平均分配到这些线程中。
假设有10个用户,10个工程师,需要测试10000组,那么总计会发送消息:10*10*10000 =100万
我们可以通过报告知道发送的情况。
在接收端,也要核对消息总数,是否想匹配。
接收端收到的消息会包含一个 message_id,是一个int64的字段,表明消息的需要,从1到10000