http接口性能测试工具

发表于:2018-10-16 13:28

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:仲达超    来源:51testing采编

  一、 http_load
  程序非常小,解压后也不到100K。http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载。
  但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死。还可以测试HTTPS类的网站请求。
  安装很简单:
  tar zxvf http_load-12mar2006.tar.gz
  cd http_load-12mar2006
  make
  make install
  命令格式:http_load -p 并发访问进程数 -s 访问时间 需要访问的URL文件
  参数其实可以自由组合,参数之间的选择并没有什么限制。比如你写成http_load -parallel 5 -seconds 300 urls.txt也是可以的。我们把参数给大家简单说明一下:
  -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
  6、HTTP response codes: code 200 — 49     说明打开响应页面的类型,如果403的类型过多,那可能要注意是否系统遇到了瓶颈。
  特殊说明: 测试结果中主要的指标是 fetches/sec、msecs/connect 这个选项,即服务器每秒能够响应的查询次数,
  用这个指标来衡量性能。似乎比 apache的ab准确率要高一些,也更有说服力一些。 Qpt-每秒响应用户数和response time,每连接响应用户时间。 测试的结果主要也是看这两个值。当然仅有这两个指标并不能完成对性能的分析,我们还需要对服务器的cpu、men进行分析,才能得出结论。
  二、wrk
  wrk 是一个很简单的 http 性能测试工具,也可以叫做 http benchmark工具。只有一个命令行,就能做很多基本的 http 性能测试。wrk 是开源的,代码在 github 上
  首先要说的一点是: wrk 只能运行在 Unix 类的系统上. 比如 linux, mac, solaris 等. 也只能在这些系统上编译. wrk 的一个很好的特性就是能用很少的线程压出很大的并发量. 原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等. 其实它是复用了 redis 的 ae 异步事件驱动框架.  确切的说 ae 事件驱动框架并不是 redis 发明的, 它来至于 Tcl的解释器 jim, 这个小巧高效的框架, 因为被 redis 采用而更多的被大家所熟知.
  要用 wrk, 首先要编译 wrk. 你的机器上需要已经安装了 git 和基本的c编译环境. wrk 本身是用 c 写的. 代码很少. 并且没有使用很多第三方库.  所以编译基本不会遇到什么问题.
  1、下载编译:
  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
  2、测试运行:
  我们先来做一个简单的性能测试:
  ./wrk -t10 -c10 -d10s -T10s --latency 'http://127.0.0.1:7001/login/im?appid=1&udata=2' 
   30秒钟结束以后可以看到如下输出:
   
  核数的2到4倍足够了. 多了反而因为线程切换过多造成效率降低. 因为 wrk 不是使用每个连接一个线程的模型, 而是通过异步网络 io 提升并发量. 所以网络通信不会阻塞线程执行.
  这也是 wrk 可以用很少的线程模拟大量网路连接的原因. 而现在很多性能工具并没有采用这种方式, 而是采用提高线程数来实现高并发. 所以并发量一旦设的很高, 测试机自身压力就很大. 测试效果反而下降.
  3、脚本扩展:
  我们通过一些测试场景在看看怎么使用 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'

   上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号