基于go语言的http压力测试工具-简单介绍

  • 编写目的

  • 学习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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值