目录
环境
- 服务器:Ubuntu 16.04 LTS
- siege版本: siege-4.1.3
目的
- 熟悉Linux服务器上软件安装
- 熟悉使用命令行测试工具
- 学会使用最简单的压力发生器
- 学会查看性能测试结果
安装siege
在linux服务器上操作
1、更新系统
sudo apt-get update && sudo apt-get upgrade --show-upgraded
2、下载最新版本的siege
wget http://download.joedog.org/siege/siege-latest.tar.gz
3、解压进入siege路径
tar -zxvf siege-latest.tar.gz
cd siege-*/
4、如果没有安装编译工具,请先安装
sudo apt-get install build-essential
5、编译安装
./configure
make
sudo make install
6、创建配置文件
siege.config
7、修改配置文件
打开~/.siege/siege.conf文件,修改logfile选项
logfile = $(HOME)/siege.log
8、输入siege -h 可以验证是否安装成功
siege的常见参数
参数 | 作用 |
-c | 指定并发数 |
-r | 指定重复次数 |
-d | 指定请求的延迟时间,注意每个请求间随机延迟 |
-f | 指定url列表,可以一次给多个地址加压 |
-t | 指定用例执行的时间,比如-t 10s -t 1M之类 |
-g | 获取请求的headers信息并打印出来,debug专用 |
-H | 指定请求的headers信息 |
-l 或 --log=[File] | 指定测试结果的路径 |
实战一:一个URL场景测试
模拟实现20个并发数,重复请求3次对百度进行访问
实现
siege -c20 -r3 http://www.baidu.com
测试结果
Transactions: 1329 hits
Availability: 79.11 %
Elapsed time: 19.26 secs
Data transferred: 79.81 MB
Response time: 0.13 secs
Transaction rate: 69.00 trans/sec
Throughput: 4.14 MB/sec
Concurrency: 8.90
Successful transactions: 1329
Failed transactions: 351
Longest transaction: 2.07
Shortest transaction: 0.02
字段含义
Transactions: siege对服务器访问的次数,如果页面发生了redirect,那么siege会将跳转过的请求算成是另一个transaction
Availability: socket连接的成功率。算法是,如果页面发生了timeout,4XX,5XX,那么该请求算是失败请求,成功率就等于(所有请求-失败请求)/总请求数
Elapsed time: 所有请求耗费的时间
Data transferred: 所有请求传输的数据量,包括请求的headers和content.所以这个数值可能比server端统计的数值要大一点
Response time: 平均响应时间
Transaction rate: Transactions / Elapsed time
Throughput: 每秒平均传输的数据量
Concurrency: 平均并发的请求数
Successful transactions: 所有status code < 400的transactions数量
Failed transactions: 所有status code > 400的transactions数量
Longest transaction: 最耗时的请求时间
Shortest transaction: 最短单个请求时间
实战二:多个URL场景测试
模拟从指定文件中随机抽取URL进行压力测试
实现
1、编写文档: nano urls.txt
进入文档之后,输入要测试的Url,然后ctrl+o,按回车键,最后按ctrl+x
另外编写文档也可以使用命令touch urls.txt 然后echo 'Url' >> urls.txt
其中>>表示追加
2、输入要执行的命令:siege -c20 -r3 -furls.txt
实战三:将结果保存到日志里
模拟保存siege日志
实现
siege -c5 -t1M -f urls.txt --log=result.csv
- csv文件可以直接使用excel打开
- 可以使用命令 sz result.csv将结果文件拷贝到本地
- 如果没有sz命令使用sudo apt-get install lrzsz 安装即可
实战四:压测时候启用gzip压缩
gzip压缩就是指服务器在返回请求时候先将响应压缩一下,以减少response的体积,客户端收到response之后会自行解压,这是提升传输速度的一般做法。
我们仍然对上面的url进行加压,不过这次我们需要使用gzip。
在请求头中加入Accept-Encoding:gzip就可以告诉服务器返回压缩后的response
注意:压不压缩是由客户端决定的
实现
siege -c5 -t1M urls.txt -H "Accept-Encoding:gzip" --log=result_01.csv
注意如果是多个header命令为:
查看服务器是否支持gzip,如果content-Encoding:gzip,说明服务器是支持gzip
@ubuntu:~/siege-4.1.3$ curl -H "Accept-Encoding:gzip" -I http://www.baidu.com
HTTP/1.1 200 OK
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Tue, 19 Jul 2022 08:09:54 GMT
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
实战五:对移动站点进行测试
作为项目的负责人,我希望各位同学可以对www.baidu.com移动版本进行加压。
其实只需要发送相应的user-agent,服务器就会根据这个值判断浏览器是移动版本还是桌面版。
该需求里,我们只需要发送iphone的user-agent给服务器,服务器自然就会返回移动站点的请求了。
实现
siege -c1 -r1 -A"Opera Mini/7.6.40234/37.8603" http://www.baidu.com
实战六:POST + JSON测试
假设我们需要测试一个接口方法,POST请求,请求内容为JSON;
我们可以将其参数放在params.txt中
然后执行命令:
注意:url地址需要用单引号括起来,否则会报错