-
编写目的
-
学习go语言后,为了不让自己忘记基础语法和相关知识,花点时间来写一个小工具巩固学习的内容
-
了解go的协程后,感觉用go做压力测试工具比java的多线程性能更加强悍,很好奇,需要练习
-
内容比较粗糙,仅满足自己学习使用
-
用到的相关知识
-
go通道主要使用在两个地方
-
- 在初始化协程数量后,每个协程需要去创建自己的请求次数,为了让每个协程顺序创建访问次数,使用了通道
-
- 在请求返回时,为了原子统计访问时间、平均时间、请求成功次数使用了通道
-
为了能顺利读取ini配置文件,定义了配置相关的结构体,利用反射特性来解析配置文件数据到结构体
在mac和linux上执行命令有如下两种方式
-[x] 编写代码时的注意事项
- 需要用结构体解析json返回时,结构体中属性第一个字母要大写,否则无法解析
- 使用sync.WaitGroup时,传递的参数需要是指针地址,不能传值
- 使用log包重写日志到文件,Writer方法实现了io.Writer(p []byte)接口
简单操作命令
- 命令行模式
example: main -c 2 -n 1 -url http://domain/user/login/login -d '{"mobile":"6712331123", "code" : 888888, "appId":1}' -X post -h "Content-Type:application/json;key:value"
param options:
-c 开启请求协程(线程)数
-n 每个协程累计请求次数,每次请求都是异步
-url 请求url地址
-x 请求方式,post or get
-d 请求参数,content-type:application/json 时,参数需要根json字符串,否则content 使用 a=1&b=2 格式连接
-t 请求累计执行时间(单位:秒)
- 配置模式
在当前目录下创建config 文件夹,进入当前目录创建config.ini 文件
执行命令如下
mkdir config && cd config
echo "[process]\n;;请求地址\nurl=http://domain/user/login/login\n;;请求方式\nx=post\n;;开启协程数量\nc=3\n;;每个协程请求次数\nn=1\n;;header头\nh='Content-Type:application/json'\n;;请求参数\nd={\"mobile\":\"6712331123\", \"code\" : 888888, \"appId\":1}\n;;累计请求时间\n;t=10\n;;断言成功的配置\nassertion=\"code\":0\n" >> config.ini
cd .. && ./main
栗子
-
此处要并发测试 使用post方法登录一个网站,开启20个协程且每个协程访问50次,并且持续30分钟
-
命令行模式
./main -c 20 -n 50 -url http://domain/user/login/login -d '{"mobile":"6712331123", "code" : 888888, "appId":1}' -X post -h "Content-Type:application/json" -t 1800
- 配置模式
- 首先修改 config/config.ini 配置文件中的参数
[process]
;;请求地址
url=http://domain/user/login/login
;;请求方式
x=post
;;开启协程数量
c=20
;;每个协程请求次数
n=50
;;header头
h='Content-Type:application/json'
;;请求参数
d={"mobile":"6712331123", "code" : 888888, "appId":1}
;;累计请求时间,单位秒
t=1800
;;断言成功的配置
assertion="code":0
- 执行如下命令即可
./main
- 返回结果
当前主机有cpu核数:4
第[1]轮请求,请求耗时:757.219598ms
第[2]轮请求,请求耗时:871.63946ms
第[3]轮请求,请求耗时:905.68538ms
第[4]轮请求,请求耗时:747.239533ms
第[5]轮请求,请求耗时:687.556883ms
第[6]轮请求,请求耗时:862.784704ms
第[7]轮请求,请求耗时:819.425648ms
第[8]轮请求,请求耗时:1.071677442s
第[9]轮请求,请求耗时:945.954191ms
第[10]轮请求,请求耗时:985.178379ms
第[11]轮请求,请求耗时:866.640659ms
第[12]轮请求,请求耗时:832.41751ms
整个请求耗时:10.353590165
总计请求次数:180
请求成功次数:180
最大请求时间:1.071557s
最小请求时间:0.255849s
平均请求耗时:0.692887s
Tps:258.629629
mac打包linux
GOOS=linux GOARCH=amd64 go build main.go
mac打包windows
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
打包mac
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go