路漫漫其修远兮
吾将上下而求索

go学习:压测工具整理

go-stress-testing go语言实现的压测工具

1 介绍

  • go-stress-testing 是go语言实现的简单压测工具,源码开源、支持二次开发,可以压测http、webSocket请求,使用协程模拟单个用户,可以更高效的利用CPU资源。

  • 项目地址 https://github.com/link1st/go-stress-testing

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 在终端执行命令

image.png


生成内容粘贴到项目目录下的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接口的时候的时候,需要先连接服务器才能进行接口压测

在建立连接的时候就会收到一些限制,如本地的端口不够用、网络带宽的限制、服务器压力过大

image.png

注意

一般设置并发数过大,是带宽不够 建议用如下方法:

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,
	}

未经允许不得转载:江哥架构师笔记 » go学习:压测工具整理

分享到:更多 ()

评论 抢沙发

评论前必须登录!