http接口性能测试工具

1、 http_load

程序很是小,解压后也不到100K。http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载。linux

可是它不一样于大多数压力测试工具,它能够以一个单一的进程运行,通常不会把客户机搞死。还能够测试HTTPS类的网站请求。git

下载地址:wget http://soft.vpser.net/test/http_load/http_load-12mar2006.tar.gzgithub

安装很简单:web

tar zxvf http_load-12mar2006.tar.gzredis

cd http_load-12mar2006apache

make服务器

make install网络

 

命令格式:http_load -p 并发访问进程数 -s 访问时间 须要访问的URL文件并发

参数其实能够自由组合,参数之间的选择并无什么限制。好比你写成http_load -parallel 5 -seconds 300 urls.txt也是能够的。咱们把参数给你们简单说明一下:app

-parallel 简写-p :含义是并发的用户进程数。

-fetches 简写-f :含义是总计的访问次数。

-rate    简写-p :含义是每秒的访问频率。

-seconds简写-s :含义是总计的访问时间

准备URL文件:urllist.txt,文件格式是每行一个URL,URL最好超过50-100个测试效果比较好。文件格式以下:

http://127.0.0.1:80/getuserinfo?uid=1

http://127.0.0.1:80/getgroupinfo?gid=1

... ...

咱们来看运行一条命令来看看它的返回结果 命令:% ./http_load -rate 5 -seconds 10 urls说明执行了一个持续时间10秒的测试,每秒的频率为5。

49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds5916 mean bytes/connection4.89274

fetches/sec, 28945.5 bytes/secmsecs/connect: 28.8932 mean, 44.243 max, 24.488 minmsecs/first

-response: 63.5362 mean, 81.624 max, 57.803 minHTTP response codes: code 200 — 49

结果分析:

1.49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds 说明在上面的测试中运行了49个请求,最大的并发进程数是2,总计传输的数据是289884bytes,运行的时间是10.0148秒

2.5916 mean bytes/connection说明每一链接平均传输的数据量289884/49=5916

3.4.89274 fetches/sec, 28945.5 bytes/sec 说明每秒的响应请求为4.89274,每秒传递的数据为28945.5 bytes/sec

4.msecs/connect: 28.8932 mean, 44.243 max, 24.488 min说明每链接的平均响应时间是28.8932 msecs,最大的响应时间44.243 msecs,最小的响应时间24.488 msecs

5.msecs/first-response: 63.5362 mean, 81.624 max, 57.803 min

六、HTTP response codes: code 200 — 49     说明打开响应页面的类型,若是403的类型过多,那可能要注意是否系统遇到了瓶颈。

特殊说明: 测试结果中主要的指标是 fetches/sec、msecs/connect 这个选项,即服务器每秒可以响应的查询次数,

用这个指标来衡量性能。彷佛比 apache的ab准确率要高一些,也更有说服力一些。 Qpt-每秒响应用户数和response time,每链接响应用户时间。 测试的结果主要也是看这两个值。固然仅有这两个指标并不能完成对性能的分析,咱们还须要对服务器的cpu、men进行分析,才能得出结论。

2、wrk

wrk 是一个很简单的 http 性能测试工具,也能够叫作 http benchmark工具。只有一个命令行,就能作不少基本的 http 性能测试。wrk 是开源的,代码在 github 上:https://github.com/wg/wrk。

首先要说的一点是: wrk 只能运行在 Unix 类的系统上. 好比 linux, mac, solaris 等. 也只能在这些系统上编译. wrk 的一个很好的特性就是能用不多的线程压出很大的并发量. 缘由是它使用了一些操做系统特定的高性能 io 机制, 好比 select, epoll, kqueue 等. 其实它是复用了 redis 的 ae 异步事件驱动框架.  确切的说 ae 事件驱动框架并非 redis 发明的, 它来至于 Tcl的解释器 jim, 这个小巧高效的框架, 由于被 redis 采用而更多的被你们所熟知.

要用 wrk, 首先要编译 wrk. 你的机器上须要已经安装了 git 和基本的c编译环境. wrk 自己是用 c 写的. 代码不多. 而且没有使用不少第三方库.  因此编译基本不会遇到什么问题.

一、下载编译:

git clone https://github.com/wg/wrk.git

cd wrk 

make 

就 ok了. make 成功之后在目录下有一个 wrk 文件. 就是它了. 你能够把这个文件复制到其余目录, 好比 bin 目录. 或者就这个目录下执行.

若是编译过程当中出现:

src/wrk.h:11:25: fatal error: openssl/ssl.h: No such file or directory 

 #include <openssl/ssl.h>  是由于系统中没有安装openssl的库.

sudo apt-get install libssl-dev

或 sudo yum install  openssl-devel

二、测试运行:

咱们先来作一个简单的性能测试:

./wrk -t10 -c10 -d10s -T10s --latency 'http://127.0.0.1:7001/login/im?appid=1&udata=2'  30秒钟结束之后能够看到以下输出:

核数的2到4倍足够了. 多了反而由于线程切换过多形成效率下降. 由于 wrk 不是使用每一个链接一个线程的模型, 而是经过异步网络 io 提高并发量. 因此网络通讯不会阻塞线程执行.

这也是 wrk 能够用不多的线程模拟大量网路链接的缘由. 而如今不少性能工具并无采用这种方式, 而是采用提升线程数来实现高并发. 因此并发量一旦设的很高, 测试机自身压力就很大. 测试效果反而降低.

三、脚本扩展:

咱们经过一些测试场景在看看怎么使用 lua 脚本.

POST + header + body.

首先建立一个 post.lua 的文件:

wrk.method = "POST" 

wrk.body   = "foo=bar&baz=quux" 

wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

就这三行就能够了, 固然 headers 能够加入任意多的内容. 而后执行:

wrk -t12 -c100 -d30s -T30s --script=post.lua --latency   'http://127.0.0.1:7001/login/im?appid=1&udata=2' 

相关文章
相关标签/搜索