–
go-stress-testing go语言实现的压测工具
1 介绍
-
go-stress-testing 是go语言实现的简单压测工具,源码开源、支持二次开发,可以压测http、webSocket请求,使用协程模拟单个用户,可以更高效的利用CPU资源。
2 用法
-
支持参数:
Usage of ./go_stress_testing_mac: -c uint 并发数 (default 1) -d string 调试模式 (default "false") -n uint 请求总数 (default 1) -p string curl文件路径 -u string 请求地址 -v string 验证方法 http 支持:statusCode、json webSocket支持:json (default "statusCode")
-
-n
是单个用户请求的次数,请求总次数 =-c
*-n
, 这里考虑的是模拟用户行为,所以这个是每个用户请求的次数 -
使用示例:
# 查看用法 go run main.go # 使用请求百度页面 go run main.go -c 1 -n 100 -u https://www.baidu.com/ # 使用debug模式请求百度页面 go run main.go -c 1 -n 1 -d true -u https://www.baidu.com/ # 使用 curl文件(文件在curl目录下) 的方式请求 go run main.go -c 1 -n 1 -p curl/baidu.curl.txt # 压测webSocket连接 go run main.go -c 10 -n 10 -u ws://127.0.0.1:8089/acc
-
使用 curl文件进行压测
curl是Linux在命令行下的工作的文件传输工具,是一款很强大的http命令行工具。
使用curl文件可以压测使用非GET的请求,支持设置http请求的 method、cookies、header、body等参数
chrome 浏览器生成 curl文件,打开开发者模式(快捷键F12),如图所示,生成 curl 在终端执行命令
生成内容粘贴到项目目录下的curl/baidu.curl.txt文件中,执行下面命令就可以从curl.txt文件中读取需要压测的内容进行压测了
# 使用 curl文件(文件在curl目录下) 的方式请求go run main.go -c 1 -n 1 -p curl/baidu.curl.txt
4.3 实现
-
具体需求可以查看项目源码
-
项目目录结构
|____main.go // main函数,获取命令行参数 |____server // 处理程序目录 | |____dispose.go // 压测启动,注册验证器、启动统计函数、启动协程进行压测 | |____statistics // 统计目录 | | |____statistics.go // 接收压测统计结果并处理 | |____golink // 建立连接目录 | | |____http_link.go // http建立连接 | | |____websocket_link.go // webSocket建立连接 | |____client // 请求数据客户端目录 | | |____http_client.go // http客户端 | | |____websocket_client.go // webSocket客户端 | |____verify // 对返回数据校验目录 | | |____http_verify.go // http返回数据校验 | | |____websokcet_verify.go // webSocket返回数据校验 |____heper // 通用函数目录 | |____heper.go // 通用函数 |____model // 模型目录 | |____request_model.go // 请求数据模型 | |____curl_model.go // curl文件解析 |____vendor // 项目依赖目录
在压测http接口的时候的时候,需要先连接服务器才能进行接口压测
在建立连接的时候就会收到一些限制,如本地的端口不够用、网络带宽的限制、服务器压力过大
注意
一般设置并发数过大,是带宽不够 建议用如下方法:
1、建议使用内网、或者是同一台机器进行压测
2、是将并发数设置的小一点
3、是多台设备压测一台服务器
4、当报显示超时的时候,需要改代码,net/http: request canceled (Client.Timeout exceeded while awaiting headers)
vim model/request_model.go // 默认的请求超时时间为3秒 timeout = 3 * time.Second client := &http.Client{ Transport: tr, Timeout: timeout, }
–
–
评论前必须登录!
注册