并发测试
This commit is contained in:
parent
cf44aa9542
commit
5ae9fa6037
1
stress/curl/.gitignore
vendored
1
stress/curl/.gitignore
vendored
@ -1 +0,0 @@
|
||||
!.gitignore
|
@ -1,11 +0,0 @@
|
||||
curl 'https://www.baidu.com/sugrec?prod=pc_his&from=pc_web&json=1&sid=1464_21098_31424_31341_31464_31229_30823_31163_31475&hisdata=&req=2&csor=0' \
|
||||
-H 'Connection: keep-alive' \
|
||||
-H 'Accept: application/json, text/javascript, */*; q=0.01' \
|
||||
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36' \
|
||||
-H 'Sec-Fetch-Site: same-origin' \
|
||||
-H 'Sec-Fetch-Mode: cors' \
|
||||
-H 'Sec-Fetch-Dest: empty' \
|
||||
-H 'Referer: https://www.baidu.com/' \
|
||||
-H 'Accept-Language: zh-CN,zh;q=0.9' \
|
||||
-H 'Cookie: BIDUPSID=A2CDAA36D74F85E5007CAA415E35B9DF; PSTM=1588732560; BAIDUID=A2CDAA36D74F85E59E4B8060EC4A0230:FG=1; BD_HOME=1; BD_UPN=123253; H_PS_PSSID=1464_21098_31424_31341_31464_31229_30823_31163_31475' \
|
||||
--compressed
|
@ -1,11 +0,0 @@
|
||||
curl 'https://www.baidu.com/sugrec?prod=pc_his&from=pc_web&json=1&sid=1464_21098_31424_31341_31464_31229_30823_31163_31475&hisdata=&req=2&csor=0' \
|
||||
-H 'Connection: keep-alive' \
|
||||
-H 'Accept: application/json, text/javascript, */*; q=0.01' \
|
||||
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36' \
|
||||
-H 'Sec-Fetch-Site: same-origin' \
|
||||
-H 'Sec-Fetch-Mode: cors' \
|
||||
-H 'Sec-Fetch-Dest: empty' \
|
||||
-H 'Referer: https://www.baidu.com/' \
|
||||
-H 'Accept-Language: zh-CN,zh;q=0.9' \
|
||||
-H 'Cookie: BIDUPSID=A2CDAA36D74F85E5007CAA415E35B9DF; PSTM=1588732560; BAIDUID=A2CDAA36D74F85E59E4B8060EC4A0230:FG=1; BD_HOME=1; BD_UPN=123253; H_PS_PSSID=1464_21098_31424_31341_31464_31229_30823_31163_31475' \
|
||||
--compressed
|
@ -1,14 +0,0 @@
|
||||
curl 'https://page.aliyun.com/delivery/plan/list' \
|
||||
-H 'authority: page.aliyun.com' \
|
||||
-H 'accept: application/json, text/plain, */*' \
|
||||
-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36' \
|
||||
-H 'content-type: application/x-www-form-urlencoded' \
|
||||
-H 'origin: https://cn.aliyun.com' \
|
||||
-H 'sec-fetch-site: same-site' \
|
||||
-H 'sec-fetch-mode: cors' \
|
||||
-H 'sec-fetch-dest: empty' \
|
||||
-H 'referer: https://cn.aliyun.com/' \
|
||||
-H 'accept-language: zh-CN,zh;q=0.9' \
|
||||
-H 'cookie: aliyun_choice=CN; JSESSIONID=J8866281-CKCFJ4BUZ7GDO9V89YBW1-KJ3J5V9K-GYUW7; maliyun_temporary_console0=1AbLByOMHeZe3G41KYd5WWZvrM%2BGErkaLcWfBbgveKA9ifboArprPASvFUUfhwHtt44qsDwVqMk8Wkdr1F5LccYk2mPCZJiXb0q%2Bllj5u3SQGQurtyPqnG489y%2FkoA%2FEvOwsXJTvXTFQPK%2BGJD4FJg%3D%3D; cna=L3Q5F8cHDGgCAXL3r8fEZtdU; isg=BFNThsmSCcgX-sUcc5Jo2s2T4tF9COfKYi8g9wVwr3KphHMmjdh3GrHFvPTqJD_C; l=eBaceXLnQGBjstRJBOfwPurza77OSIRAguPzaNbMiT5POw1B5WAlWZbqyNY6C3GVh6lwR37EODnaBeYBc3K-nxvOu9eFfGMmn' \
|
||||
--data 'adPlanQueryParam=%7B%22adZone%22%3A%7B%22positionList%22%3A%5B%7B%22positionId%22%3A83%7D%5D%7D%2C%22requestId%22%3A%2217958651-f205-44c7-ad5d-f8af92a6217a%22%7D' \
|
||||
--compressed
|
@ -1,4 +0,0 @@
|
||||
curl -X GET \
|
||||
'https://www.baidu.com/sugrec?prod=pc_his&from=pc_web&json=1&sid=1464_21098_31424_31341_31464_31229_30823_31163_31475&hisdata=&req=2&csor=0' \
|
||||
-H 'Postman-Token: c9b71950-61fd-43be-a38a-6596de238f0f' \
|
||||
-H 'cache-control: no-cache'
|
@ -1,59 +0,0 @@
|
||||
package httplongclinet
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"net"
|
||||
"net/http"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"go_dreamfactory/stress/model"
|
||||
)
|
||||
|
||||
var (
|
||||
mutex sync.RWMutex
|
||||
clients = make(map[uint64]*http.Client, 0)
|
||||
)
|
||||
|
||||
// NewClient new
|
||||
func NewClient(i uint64, request *model.Request) *http.Client {
|
||||
client := getClient(i)
|
||||
if client != nil {
|
||||
return client
|
||||
}
|
||||
return setClient(i, request)
|
||||
}
|
||||
|
||||
func getClient(i uint64) *http.Client {
|
||||
mutex.RLock()
|
||||
defer mutex.RUnlock()
|
||||
return clients[i]
|
||||
}
|
||||
|
||||
func setClient(i uint64, request *model.Request) *http.Client {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
client := createLangHttpClient(request)
|
||||
clients[i] = client
|
||||
return client
|
||||
}
|
||||
|
||||
// createLangHttpClient 初始化长连接客户端参数
|
||||
func createLangHttpClient(request *model.Request) *http.Client {
|
||||
tr := &http.Transport{}
|
||||
|
||||
tr = &http.Transport{
|
||||
DialContext: (&net.Dialer{
|
||||
Timeout: 30 * time.Second,
|
||||
KeepAlive: 30 * time.Second,
|
||||
}).DialContext,
|
||||
MaxIdleConns: 0, // 最大连接数,默认0无穷大
|
||||
MaxIdleConnsPerHost: request.MaxCon, // 对每个host的最大连接数量(MaxIdleConnsPerHost<=MaxIdleConns)
|
||||
IdleConnTimeout: 90 * time.Second, // 多长时间未使用自动关闭连接
|
||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
}
|
||||
|
||||
return &http.Client{
|
||||
Transport: tr,
|
||||
}
|
||||
}
|
@ -17,7 +17,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
connectionMode = 1 // 1:顺序建立长链接 2:并发建立长链接
|
||||
connectionMode = 2 // 1:顺序建立长链接 2:并发建立长链接
|
||||
)
|
||||
|
||||
// init 注册验证器
|
||||
@ -51,7 +51,7 @@ func Dispose(ctx context.Context, concurrency, totalNumber uint64, request *mode
|
||||
case 1:
|
||||
// 连接以后再启动协程
|
||||
r := robot.NewRobot(request.URL)
|
||||
r.SetAccount("31112" + strconv.Itoa(int(i)))
|
||||
r.SetAccount("41112" + strconv.Itoa(int(i)))
|
||||
//head := &pb.UserMessage{MainType: "user", SubType: "login"}
|
||||
|
||||
// 先登录
|
||||
@ -62,7 +62,15 @@ func Dispose(ctx context.Context, concurrency, totalNumber uint64, request *mode
|
||||
case 2:
|
||||
// 并发建立长链接
|
||||
go func(i uint64) {
|
||||
// 连接以后再启动协程
|
||||
r := robot.NewRobot(request.URL)
|
||||
r.SetAccount("61112" + strconv.Itoa(int(i)))
|
||||
//head := &pb.UserMessage{MainType: "user", SubType: "login"}
|
||||
|
||||
// 先登录
|
||||
//r.SendToClient(head, &pb.UserLoginReq{})
|
||||
//r.AddGrormetItem()
|
||||
//r.Create()
|
||||
go golink.WebSocket(ctx, i, ch, totalNumber, &wg, request, r)
|
||||
}(i)
|
||||
// 注意:时间间隔太短会出现连接失败的报错 默认连接时长:20毫秒(公网连接)
|
||||
time.Sleep(5 * time.Millisecond)
|
||||
|
@ -34,10 +34,7 @@ var (
|
||||
totalNumber uint64 = 1 // 请求数(单个并发/协程)
|
||||
debugStr = "false" // 是否是debug
|
||||
requestURL = "" // 压测的url 目前支持,http/https ws/wss
|
||||
path = "" // curl文件路径 http接口压测,自定义参数设置
|
||||
verify = "pb" // verify 验证方法 在server/verify中 http 支持:statusCode、json webSocket支持:json
|
||||
headers array // 自定义头信息传递给服务器
|
||||
body = "" // HTTP POST方式传送数据
|
||||
maxCon = 1 // 单个连接最大请求数
|
||||
code = 200 // 成功状态码
|
||||
keepalive = false // 是否开启长连接
|
||||
@ -50,10 +47,7 @@ func init() {
|
||||
flag.Uint64Var(&totalNumber, "n", totalNumber, "请求数(单个并发/协程)")
|
||||
flag.StringVar(&debugStr, "d", debugStr, "调试模式")
|
||||
flag.StringVar(&requestURL, "u", requestURL, "压测地址")
|
||||
flag.StringVar(&path, "p", path, "curl文件路径")
|
||||
flag.StringVar(&verify, "v", verify, "验证方法 http 支持:statusCode、json webSocket支持:json")
|
||||
flag.Var(&headers, "H", "自定义头信息传递给服务器 示例:-H 'Content-Type: application/json'")
|
||||
flag.StringVar(&body, "data", body, "HTTP POST方式传送数据")
|
||||
flag.IntVar(&maxCon, "m", maxCon, "单个host最大连接数")
|
||||
flag.IntVar(&code, "code", code, "请求成功的状态码")
|
||||
flag.BoolVar(&keepalive, "k", keepalive, "是否开启长连接")
|
||||
@ -78,11 +72,11 @@ func main() {
|
||||
flag.Parse()
|
||||
statistics.InitLog()
|
||||
|
||||
concurrency = 1000
|
||||
totalNumber = 1
|
||||
concurrency = 100
|
||||
totalNumber = 10
|
||||
debugStr = "false"
|
||||
requestURL = "ws://106.54.189.74:7891/gateway"
|
||||
if concurrency == 0 || totalNumber == 0 || (requestURL == "" && path == "") {
|
||||
if concurrency == 0 || totalNumber == 0 || (requestURL == "") {
|
||||
fmt.Printf("示例: go run main.go -c 1 -n 1 -u https://www.baidu.com/ \n")
|
||||
fmt.Printf("压测地址或curl路径必填 \n")
|
||||
fmt.Printf("当前请求参数: -c %d -n %d -d %v -u %s \n", concurrency, totalNumber, debugStr, requestURL)
|
||||
|
Loading…
Reference in New Issue
Block a user