分享好友 最新资讯首页 最新资讯分类 切换频道
你的站点抗压么?推荐一款超方便的开源压测工具
2024-12-23 09:34

你的站点抗压么?推荐一款超方便的开源压测工具

这里是 HelloGitHub 推出的《讲解开源项目》系列,本期介绍一款标星 17.7k 纯 Go 语言实现的 HTTP(S) 压测工具——vegeta

Vegeta 是一款用 Go 语言编写的多功能 HTTP(S) 压测工具:安装方便、功能齐全、使用简单,还可作为命令行工具或者开发库进行使用。它不仅提供了常见的压测功能,还支持格式化结果并输出为图表或动态显示当前结果。

通过本文你将掌握这款强大压测工具的基本用法,让压测只需一条命令!

一、 安装

从仓库下载编译好的二进制文件:

tsenart/vegeta/releases

PC 上下载 amd64 版本即可,在 Mac Os X 上使用 Homebrew 安装:

$ brew update && brew install vegeta

如果你会 Go 语言,使用get 自动安装:

$ go get -u github.com/tsenart/vegeta

如提示找不到指令,请确保 go 以及 GOBIN 在您的环境变量中

二、快速入门

以下指令均可以在 Linux 下运行

对于下载编译好的用户建议先将 vegeta 临时添加到 PATH 路径,方便使用:

$ cd vegeta$ export PATH=$pwd:$PATH

或者直接将 vegeta 放到 bin 目录下:

$ cd vegeta$ sudo mv vegeta /usr/local/bin/

输入vegeta -version 后可以显示证明安装成功。

首次使用可以使用:

$ vegeta --help

来查看支持的指令和相关例子。

1. 使用例子

在命令行输入:

$ echo "GET 127.0.0.1:233"| vegeta attack -rate=500 -connections=1 -duration=1s | tee results.bin | vegeta report

将会得到如图所示的结果:

这条指令前半部分的echo "GET 127.0.0.1:233" 表示想要测试的地址,这里我使用的是 nginx 搭建的本地服务器,vegeta attack 代表测试指令,其后-rate-connections-duration 分别表示每秒钟请求次数、每个地址最大连接数、持续时间。

攻击完成后使用tee results.bin 保存测试报告并用veteta report 显示报告内容。

vegeta report 也支持使用 文本、JSON、直方图、hdrplot 等:

$ echo "GET 127.0.0.1:233"| vegeta attack -rate=500 -connections=1 -duration=5s > results.bin

文本(默认情况)

$ vegeta report results.bin

直方图

$ vegeta report -type='hist[0,1ms,2ms,3ms,4ms]' results.bin

JSON

$ vegeta report --type json results.bin

hdrplot

$ vegeta report --type hdrplot results.bin

2.生成图形

上一小节的内容,我们将文字形式的报告转为图表显示,在命令行中输入:

$ vegeta plot --title HelloGitHub results.bin > plot.html

在浏览器中打开新生成的plot.html,即可看到图形化的测试数据:

其中--title HelloGitHub 用来设置表头文字。此外还有

-cpu 用来设置默认使用的 cpu 核心数量,这里我默认是 12。可以使用--threshold flag 设定下采样阈值。

vegeta plot 也可以将多个曲线放在一起,使用 vegeta plot result_1.bin result2_.bin ... result_n.bin > plot.html 即可

此外,配合 Go 下的jaggrjplot 可以实现动态画面输出,官方给出的指令和效果如下:

$ echo 'GET localhost:8080' | vegeta attack -rate 5000 -duration 10m | vegeta encode | jaggr @count=rps hist[100,200,300,400,500]:code p25,p50,p95:latency sum:bytes_in sum:bytes_out | jplot rps+code.hist.100+code.hist.200+code.hist.300+code.hist.400+code.hist.500 latency.p95+latency.p50+latency.p25 bytes_in.sum+bytes_out.sum

由于 jplot 需要 iTerm2 但笔者没有苹果系列的电脑所以关于动态输出部分的内容大家需要自己研究。

3.使用管道

如果您了解 Shell 的管道那就不难看出,前文代码中就是使用管道将echo "GET http:// xxx" 的输出内容传给了vegeta。通过管道,除了使用简单的echo 工具,也可以使用其他任何程序的输出作为测试目标。

4.转换编码

vegeta 同样提供了编码转换功能,现在支持三种编码格式:Gob (二进制)、CSV 以及 JSON(默认) 使用veget encode 可以做到这几种编码的相互转换:

$ echo "GET 127.0.0.1:233"| vegeta attack -rate=500 -connections=1 -duration=1s > results.gob$ cat results.gob | vegeta encode | jq .

可以显示转换为 JSON 格式的测试信息,或者:

$ cat results.gob | vegeta encode --to csv --output results.csv

输入格式的检测是自动完成的,不需要手动进行设置。

三、结语

到这里 vegeta 的基本使用到这里就结束了,它还支持一些精细参数的设置比如证书、密钥等,但限于篇幅和笔者知识水平限制无法扩展太多,大家可以根据需要的使用vegeta [command] --help 指令进行查看,也可以阅读官方的使用手册

最新文章
8种SEO优化技巧超级蜘蛛查
创作高质量的内容时,要确保信息的原创性与实用性,避免复制粘贴他人内容。在内容中融入适当的关键词,并注重内容的结构和排版,
Airtest-Selenium实操小课:爬取新榜数据
1. 前言 最近看到群里很多小伙伴都在用Airtest-Selenium做一些web自动化的尝试,正好趁此机会,我们也出几个关于web
#### 文案生成器免费版:无需投资即可享受智能服务
在数字时代,内容创作已成为多人的日常工作之一。无论是社交媒体运营、广告文案撰写,还是网络小说创作,高效地产出优质内容都是
再看快速排序(QuickSort)
      快速排序是一个十分伟大的算法,作为再一次的学习,写一写快排以及和快排相关的问题。 1.基本的快速排序方
阿里伴侣配合阿里巴巴打造全方位线上推广
在当今竞争激烈的电商时代,企业的线上推广至关重要。阿里巴巴作为全球知名的电商平台,为众多企业提供了广阔的发展空间。而阿里
Python大数据分析&人工智能教程 - Scrapy工作原理详解与实操案例
Scrapy是一个开源的、用Python编写的高性能网络爬虫框架,用于抓取网站数据和提取结构性数据。它是基于Twisted异步网络框架构建
AI智能写作助手:一站式解决内容创作、文章润色与高效写作的全面工具
在信息爆炸的时代内容创作已经成为企业、媒体和个人展现自我、传递价值的不可或缺手。面对海量的信息与日益增强的内容品质需求高
你的站点抗压么?推荐一款超方便的开源压测工具
这里是 HelloGitHub 推出的《讲解开源项目》系列,本期介绍一款标星 17.7k 纯 Go 语言实现的 HTTP(S) 压测工具——vegetaVegeta
【系统架构设计】计算机网络
OSI/RM 结构模型 1977年,国际标准化组织为适应网络标准化发展的需求,制定了开放系统互联参考模型(Open System Interconnectio
全世界规模最大战争排名,第一名居然是清朝时期!
自打人类走上进化这条路,就想着法儿想要证明【一伙人就该被另一伙人支配】。古罗马角斗士时代一方有多大势力,就看他有多少人的