web压力测试工具介绍之Siege

安装siege

Siege是一款开源的压力测试工具,设计用于评估WEB应用在压力下的承受能力。可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。Siege支持多链接,可以从您选择的预置列表中请求随机的URL,支持get和post请求。所以Siege可用于仿真用户请求负载,而ab则不能。Siege支持基本的认证,cookies,除了对http支持外,还支持https,并且支持的很好,apachebanch对https支持的不够好。但不要使用siege来执行最高性能基准调校测试,这方面apachebanch就准确很多。

mac Homebrew安装

brew install siege

常用参数说明

-c 200       指定并发数200
-r 5         指定测试的次数5
-f urls.txt  指定url的文件
-i           模拟用户请求,随机选择url文件中的url
-b           请求之间没有延时
-t 30S       持续测试30秒

# -r和-t一般不同时使用

常用的siege命令举例

50个用户(每次并发量,注意不是每秒并发量)重复100次,共产生 50 * 100 = 5000个请求

siege -c 50 -r 100 http://www.abc.com/

50个用户,重复100次,发送GET参数

siege -c 50 -r 100 https://www.abc.com/a.php?name=zhangsan

50个用户,重复100次,发送POST参数 (注意引号)

siege -c 50 -r 100 “https://www.abc.com/a.php POST name=zhangsan”

50个用户,重复100次,发送POST参数(从文件中读取)

siege -c 50 -r 100 “https://www.abc.com/a.php POST < /root/ab_test/post.xml”

在urls.txt中列出所有的网址(urls.txt格式为每行一个url)

siege -c 200 -r 100 -f urls.txt

随机选取urls.txt中列出所有的网址

siege -c 200 -r 100 -f urls.txt -i

delay=0,更准确的压力测试,而不是功能测试

siege -c 200 -r 100 -f urls.txt -i -b

指定http请求头 文档类型

siege -H “Content-Type:application/json” -c 200 -r 100 -f urls.txt -i -b

结果说明

zhou@zhou-VirtualBox:~$ siege -c 500 -t 30s http://localhost:3000/

Lifting the server siege...      done.

Transactions:               12561 hits      // 完成12561次请求
Availability:              100.00 %         // 成功率100%
Elapsed time:               30.03 secs      // 执行时间:30.03秒
Data transferred:            2.47 MB        // 共传输数据2.47MB
Response time:                0.58 secs      // 响应时间0.58秒
Transaction rate:          418.28 trans/sec // 平均每秒完成请求418.28次
Throughput:                0.08 MB/sec        // 平均每秒数据传输量为0.08MB
Concurrency:              243.79           // 实际最高并发连接数
Successful transactions:       12561       // 成功处理次数
Failed transactions:               0       // 失败处理次数
Longest transaction:            1.58       // 最长请求耗时
Shortest transaction:            0.00       // 最短请求耗时

发送POST请求

新建参数文件

vim uncollect.json
{
    "token":"c23f5fac69190de92a50973803409811",
    "type":0,
    "uni_id":"1acbb47a1d4f7b1f29cca86de70c84b4"
}

压力测试语句

siege -c 10 -r 30 --H "Content-Type:application/json" "http://47.104.18.17:9005/api/v1.0/user/collect?appName=leqv&version=99&build=1.0.0&os=ios&channel=appstore  POST < ./uncollect.json"

以上语句的意思就是:加一个headers头的 Content-Type:application/json 然后POST发送uncollect.json中的数据

其它说明

如果url中含有空格和中文,要先进行url编码,否则siege发送的请求url不准确。