软件性能测试与工具,软件性能测试工具

原文链接: https://juejin.cn/post/6844903655200522248

1.什么是 Vegeta

Vegeta 是一个用 Go 语言编写的多功能的 HTTP 负载测试工具,它提供了命令行工具和一个开发库。

官方地址:https://github.com/tsenart/vegeta

2.安装 Vegeta

Vegeta 安装非常简单,由于 Go 语言良好的跨平台性,可以直接下载官方的预编译版本后开箱即用。

预编译版本

这里以 Linux 版本为例:

$ wget https://github.com/tsenart/vegeta/releases/download/v7.0.3/vegeta-7.0.3-linux-amd64.tar.gz

$ tar xzvf vegeta-7.0.3-linux-amd64.tar.gz

$ mv vegeta /usr/local/bin/复制代码

3.使用标准输入进行压测并生成报告

$ echo "GET http://10.20.192.250" | vegeta attack -rate=50 -connections=1 -duration=1s | tee results.bin | vegeta report

Requests [total, rate] 50, 51.02

Duration [total, attack, wait] 37.41975091s, 979.999689ms, 36.439751221s

Latencies [mean, 50, 95, 99, max] 33.816664905s, 35.021110945s, 37.058121168s, 37.204824958s, 37.319751221s

Bytes In [total, mean] 9505000, 190100.00

Bytes Out [total, mean] 0, 0.00

Success [ratio] 100.00%

Status Codes [code:count] 200:50

4.使用目标文件的内容进行压测,创建 target.txt 文件,内容如下:

$ vim target.txt

GET http://10.20.192.250/

GET http://10.20.192.250/posts/19779.html

GET http://10.20.192.250/show.php

5.使用 Vegeta 进行压测:

$ vegeta attack -targets="target.txt" -rate=10 -duration=2s > results.bin

6.自定义目标文件

除了前面定义的最简单 HTTP GET 请求外,你还可以定义下面这些更灵活更复杂的 HTTP 请求:

1. 自定义请求头

GET http://user:password@10.20.192.250:80/path/to

X-Account-ID: 8675309

DELETE http://10.20.192.250:80/path/to/remove

Confirmation-Token: 90215

Authorization: Token DEADBEEF

2. 自定义请求的主体

POST http://10.20.192.250:80/things

@/path/to/newthing.json

PATCH http://hi-linux.com:80/thing/71988591

@/path/to/thing-71988591.json

3. 自定义请求头和请求主体

POST http://10.20.192.250:80/things

X-Account-ID: 99

@/path/to/newthing.json

7.生成压测报告:

生成 JSON 格式的压测报告

$ vegeta report -inputs=results.bin -reporter=json > metrics.json

生成基于 Dygraphs 的 HTML 5 压测报告

$ cat results.bin | vegeta report -reporter=plot > plot.html

计算并输出一个基于文本的直方图

$ cat results.bin | vegeta report -reporter="hist[0,2ms,4ms,6ms]"

Bucket # % Histogram

[0, 2ms] 6007 32.65% ########################

[2ms, 4ms] 5505 29.92% ######################

[4ms, 6ms] 2117 11.51% ########

[6ms, +Inf] 4771 25.93% ##################

8.生成实时图形压测报告

如果您是 iTerm 用户,可以使用 jaggr 将 Vegeta 与 jplot 整合在一起并在终端上实时绘制压测报告。要实现这个功能你首先需要先安装 jaggr 和 jplot:

1. 安装 jaggr

$ yum install rs/tap/jaggr

# 源代码安装

$ go get -u github.com/rs/jaggr

2. 安装 jplot

$ yum install rs/tap/jplot

# 源代码安装

go get -u github.com/rs/jplot

安装完 jaggr 和 jplot 后,其次你需要在 iTerm 中执行以下命令:

$ echo 'GET http://www.hi-linux.com' | \

vegeta attack -rate 50 -duration 5m | vegeta dump | \

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

9.分布式压力测试

当进行大规模负载测试时,通常由于受限于 Vegeta 自身机器的性能瓶颈(比如:打开的文件数,内存大小,CPU 和 网络带宽)限制而无法达到预期结果。 这时分布式的使用 Vegeta 可以很好的解决这个问题,实现类似功能的工具很多,比如功能强大的 Ansible。这里我们使用 Pdsh 来实现:

$ pdsh -b -w '10.0.1.1,10.0.2.1,10.0.3.1' \

'echo "GET http://target/" | vegeta attack -rate=20000 -duration=60s > result.bin'

Pdsh 的全称是 (Parallel Distributed Shell),Pdsh 可并行的执行对目标主机的操作,很方便的批量执行命令和分发任务。Pdsh 还支持交互模式,当要执行的命令不确定时,可直接进入 Pdsh命令行,非常方便。

完成前面的命令后,我们就可以通过 Shell 脚本将结果文件收集到的一起供后面生成报表时使用。

$ for machine in "10.0.1.1 10.0.2.1 10.0.3.1"; do

scp $machine:~/result.bin $machine.bin &

done

最后我们可以通过 vegeta report 命令生成此次压测的报表。vegeta report 命令可一次性读取使用逗号分隔的多个结果文件并生成报告,默认通过时间戳进行排序。

$ vegeta report -inputs="10.0.1.1.bin,10.0.2.1.bin,10.0.3.1.bin"

Requests [total, rate] 3600000, 60000.00

Latencies [mean, 95, 99, max] 223.340085ms, 326.913687ms, 416.537743ms, 7.788103259s

Bytes In [total, mean] 3714690, 3095.57

Bytes Out [total, mean] 0, 0.00

Success [ratio] 100.0%

Status Codes [code:count] 200:3600000

其它相关:

如果你觉得命令行下使用 Vegeta 比较复杂的话,你还可以使用 Alex 项目。Alex 是一个基于 Vegeta Library 和 Boom 封装的压力测试 Web UI,Vegeta 提供稳定的 QPS 压力源,Boom 提供稳定的并发数压力源。

项目地址:https://github.com/ireaderlab/alex

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值