1. 简单了解ab测试

ab是Apache超文本传输协议(HTTP)的性能测试工具。可以使用工具对网络接口进行压力测试,以判断网络接口的性能。

一般对网络接口进行压力测试,需要关注几个重要的指标,吞吐率,响应时间,并发数。通过这些指标的测试,可以反映出服务器的并发能力。

最常用的的工具有 ab 、siege、http_load等,本文主要说如何使用ab测试上传文件接口,在进入主题之前写大体了解下ab测试报告。

[root@iZ2325lrssqZ ~]# ab -n 1000 -c 10 http://localhost:8089/getAllApp

This is ApacheBench, Version 2.3

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 10.139.97.238 (be patient)

Completed 100 requests

Completed 200 requests

Completed 300 requests

Completed 400 requests

Completed 500 requests

Completed 600 requests

Completed 700 requests

Completed 800 requests

Completed 900 requests

Completed 1000 requests

Finished 1000 requests

Server Software:

Server Hostname: 10.139.97.238

Server Port: 8089

Document Path: /getAllApp

Document Length: 663124 bytes

Concurrency Level: 10

Time taken for tests: 115.019 seconds

Complete requests: 1000

Failed requests: 0

Write errors: 0

Total transferred: 663340000 bytes

HTML transferred: 663124000 bytes

Requests per second: 8.69 [#/sec] (mean)

Time per request: 1150.193 [ms] (mean)

Time per request: 115.019 [ms] (mean, across all concurrent requests)

Transfer rate: 5632.04 [Kbytes/sec] received

Connection Times (ms)

min mean[+/-sd] median max

Connect: 1 1 0.7 1 10

Processing: 371 1139 382.2 1093 2782

Waiting: 320 903 314.1 867 2249

Total: 372 1140 382.2 1095 2783

Percentage of the requests served within a certain time (ms)

50% 1095

66% 1242

75% 1360

80% 1427

90% 1690

95% 1863

98% 2107

99% 2255

100% 2783 (longest request)复制代码

上述命令表示10个并发用户向服务器请求1000次,下面简单说明下报告中的各项指标含义:

Document Path:表示请求路径, 这里为/getAllapp;

Document Length: 表示报文的大小, 这里为663124bytes;

Concurrency Level: 表示并发级别 ,就是命令中传入的-c, 此处为10,即10个并发;

Time taken for tests: 表示完成所有测试用时;

Complete requests: 表示测试中一共完成了多少个请求,就是命令中-n 的参数1000;

Failed requests: 表示失败的请求个数;

Write errors: 表示写入过程中出现的错误次数;

Total transferred: 表示响应的所有报文大小;

HTML transferred: 表示仅HTTp报文的正文大小,它会比上一个值小;

Requests per second: 表示服务器没秒能处理多少请求,是我们重点关注的指标,能反映服务器的并发能力,这个值又称RPS或QPS;

Time per request: 两个这样的指标,第一个表示用户平均等待时间,第二个表示服务器平均请求处理时间;

Time per request(第二个) = Time per request(第-个)/c(并发数)复制代码

Transfer rate: 表示传输率,等于传输大小除以传输时间,这个值受网卡带宽限制;

Connection Times: 连接时间,它包括客户端向服务端建立连接,服务器端处理请求,等待报文响应的整个过程。

2. ab 上传文件

ab提交文件是以multipart/form-data 形式提交的,ab中上传文件一般命令为:

ab -v 2 -T 'multipart/form-data; boundary=----WebKitFormBoundaryM1tLdAWapR8WCJSe' -p ./abpost.txt http://localhost:7080/file/upload复制代码

指定T参数 (T参数表示POST数据所使用的Content-type头信息),

指定p参数(p包含了需要POST的数据的文件),文件数据是包含在abpost.txt文件中,这个文件内部结构符合rfc1867协议规定。

下面我们就一步步说明怎么构造abpost.txt文件上传数据

定义边界线

我们在ab的T参数中定义http协议的Content-type 同时也约定了边界线。如上边命令中定义的边界线:

boundary=----WebKitFormBoundaryM1tLdAWapR8WCJSe复制代码

注意“=” 后面是紧跟着的四条短线(-)

构造abpost.txt文件内容

这个文件可放在ab命令使用的当前目录,这样就按照上面的写法,作为p参数。先贴出abpost.txt内容,后面再做解释。

------WebKitFormBoundaryM1tLdAWapR8WCJSe

Content-Disposition: form-data; name="file"; filename="file.jpg"

Content-Type: image/jpeg

iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAFMQAABTEBt+0oUgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVUSURBVEiJpZRZbFzVHcZ/5965c2ffV9sz8RjHdpyxweNEoSRN2YJLwxJBqYTahz6URSC1UqtWbSOlIPHQVuoDFeKpaaWqUh+iShRUElUCTBZRm8iBAnHiNfEyZuzxzHjuzHj224fUI4whQeJI5+Ecne/7/b9zjv7ous5XmQ6L/B3Aous6gBHwfBWdxC2G32F8Sgihhm3q8MEu19mQy9zlMCuJvSHbq7fSArcGRJymBx4fDI6ntNrGQ/3+4XjA8reoS33owT3e+zrctju+NqBYbXz0cNw/6DDJz9pVA30h62A8ZPt+PGz3+S3Sk18LYBciYDJIxwC+e3uoz6bK7A3arCN7fJ2VehNZkr4d8qjxm3mI/z8aAG4hXJ0d9uPVejNVrbNyYJfj1/ujzn6X2bBDuFlrIBB8mNQWzs1mXpFkyeU2GzqvrVX+cC1XnNgB2OO3DveErH9+NB4YLFQaldVCpdETsFliu3sJtkcQAj5dWqRer+P1B5ENMqsrSVLJJa6uZOtuk6K7LIpyaSmffHc6c2JiOX8SoFVau8d8/Kn7BweHDhzk3Oio5DRn1L1D+4h2dbeqdnl821IEwu3s7h9AeuffBiEp+uEjI0Q/nGibSZ//AXBy2xu4zIYeh9PF8nKyXtEyisPlJtrVzaamsTB6lvT0TMu4mM2yeP4CxUwG1WQiGuumpOXE5OXLNbvDScCm9gkhrNsSrBWqq1NXr/YaFYMBwOF0AbD+3jjdb15gsTdCPbYLg0Eh+845bjv7AbPfXMP6+DFkWQZgYeoTpdwQxWvZ0qyu68VtCS7NZp94/ePUit6oA2Cx2QGQvG5WQy6KATcGgwJA0+Ug7Xeiu5wA5DLrAOjNJuNz6cql5cJzW76tBBooMa/F9vnf0jacYLOvh5jF2tqL3ns3xf0JonYHpUKBXGadaFc32fQafcGq2zqVbgf+uw0QdZmO7PaZ3VvrxWuzRGJdqCYzZquN02OXSfREqNbqLKU3+EZ/JwCKauTuBx9uJai++U8RshkPAae3ATw2ZcCu3lj6giHaIrsoaHlUkxmASr3BP85+QLFcZX9vtJVGUYykshpehxWDLOH1B/Fa59t2XlG5MVuqNtgVjbD/0Lc+f1McOzhAuVpDMcjIkkQqq3F+Jk3d7OXS5Ay/fSIBQKPRIFuqr+4AzKZLZ+bWN7WhhM8OMH51mcFYAJNRaUHypTLnZ9apmb2UJAs/+c0rqKrKn35/onVmOZUmla+O7QDoun79e0OhRW1jox/AYDTy/MlRjt5zF0I2MDW/yOH7R/jhiWNIksSpU6dQVfWGuJwHTORzWSbmU+nruc13t3y3NbvkRmUyuXidbHqNRMzPzx/dh9UX5ulfvMihkUc4fN8IqqoihGCrxUxdmSSoNgCYn7rC7NrmFV3X178QMLdS/tm5udz8RxPjNJtN+trc7NGX+N2vfoyW30DTtBsiSaLZbJLL5Xj9L3/kzp4w66sp3r74SWY6XXjhs57builAvN3xy6cPtL3Uc1tMjif2tX7Ra2PTlCwBfB1d+IJhzvzrDbqdEo8NRygXNS6Mvs3Lb02ffH8h96ObAoQQ4s5Ox2tPJsJHvXaL3Be/nUhXN0IIACq1OlmtRMjjQNd1UsklLo79h7+OLbw3Op05stUivhSwBRkI247f2+N5Zqjd0WF3OHG6PZitNoQQ1KoVKpUK6dSnTC5nMqcn03+/uJj/qa7r1R1eXwTYGh1u2x0DYfMLQZuxN+Yxd0bcJpMkBMl8pTa3VlpIl2ozHy8XXp7JFE9/mcdNAZ9JJFkVZSDiUY7KQjItbJTPaJv193Vdr91K+z+BklGf3fugXAAAAABJRU5ErkJggg==

------WebKitFormBoundaryM1tLdAWapR8WCJSe--复制代码

注意:abpost.txt文件最好使sublime之类的文本编辑编辑,不要使用Windows下的记事本编辑。

------WebKitFormBoundaryM1tLdAWapR8WCJSe复制代码

开始边界。这是第一行,与边界线T参数里面定义的一样,但必须注意字母前面的短线要变成六条,而不是之前T参数中的四条。

Content-Disposition: form-data; name="file"; filename="file.jpg"

Content-Type: image/jpeg复制代码

头部信息。紧接着的两行是头部信息,包含“Content-Disposition”,

“Content-Type”。其中“Content-Disposition”要指明数据格式,服务端接收文件的名字(file),以及上传文件的名字

而在 Content-Type 中,一般就是指明MIME类型

iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAFMQAABTEBt+0oUgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVUSURBVEiJpZRZbFzVHcZ/5965c2ffV9sz8RjHdpyxweNEoSRN2YJLwxJBqYTahz6URSC1UqtWbSOlIPHQVuoDFeKpaaWqUh+iShRUElUCTBZRm8iBAnHiNfEyZuzxzHjuzHj224fUI4whQeJI5+Ecne/7/b9zjv7ous5XmQ6L/B3Aous6gBHwfBWdxC2G32F8Sgihhm3q8MEu19mQy9zlMCuJvSHbq7fSArcGRJymBx4fDI6ntNrGQ/3+4XjA8reoS33owT3e+zrctju+NqBYbXz0cNw/6DDJz9pVA30h62A8ZPt+PGz3+S3Sk18LYBciYDJIxwC+e3uoz6bK7A3arCN7fJ2VehNZkr4d8qjxm3mI/z8aAG4hXJ0d9uPVejNVrbNyYJfj1/ujzn6X2bBDuFlrIBB8mNQWzs1mXpFkyeU2GzqvrVX+cC1XnNgB2OO3DveErH9+NB4YLFQaldVCpdETsFliu3sJtkcQAj5dWqRer+P1B5ENMqsrSVLJJa6uZOtuk6K7LIpyaSmffHc6c2JiOX8SoFVau8d8/Kn7BweHDhzk3Oio5DRn1L1D+4h2dbeqdnl821IEwu3s7h9AeuffBiEp+uEjI0Q/nGibSZ//AXBy2xu4zIYeh9PF8nKyXtEyisPlJtrVzaamsTB6lvT0TMu4mM2yeP4CxUwG1WQiGuumpOXE5OXLNbvDScCm9gkhrNsSrBWqq1NXr/YaFYMBwOF0AbD+3jjdb15gsTdCPbYLg0Eh+845bjv7AbPfXMP6+DFkWQZgYeoTpdwQxWvZ0qyu68VtCS7NZp94/ePUit6oA2Cx2QGQvG5WQy6KATcGgwJA0+Ug7Xeiu5wA5DLrAOjNJuNz6cql5cJzW76tBBooMa/F9vnf0jacYLOvh5jF2tqL3ns3xf0JonYHpUKBXGadaFc32fQafcGq2zqVbgf+uw0QdZmO7PaZ3VvrxWuzRGJdqCYzZquN02OXSfREqNbqLKU3+EZ/JwCKauTuBx9uJai++U8RshkPAae3ATw2ZcCu3lj6giHaIrsoaHlUkxmASr3BP85+QLFcZX9vtJVGUYykshpehxWDLOH1B/Fa59t2XlG5MVuqNtgVjbD/0Lc+f1McOzhAuVpDMcjIkkQqq3F+Jk3d7OXS5Ay/fSIBQKPRIFuqr+4AzKZLZ+bWN7WhhM8OMH51mcFYAJNRaUHypTLnZ9apmb2UJAs/+c0rqKrKn35/onVmOZUmla+O7QDoun79e0OhRW1jox/AYDTy/MlRjt5zF0I2MDW/yOH7R/jhiWNIksSpU6dQVfWGuJwHTORzWSbmU+nruc13t3y3NbvkRmUyuXidbHqNRMzPzx/dh9UX5ulfvMihkUc4fN8IqqoihGCrxUxdmSSoNgCYn7rC7NrmFV3X178QMLdS/tm5udz8RxPjNJtN+trc7NGX+N2vfoyW30DTtBsiSaLZbJLL5Xj9L3/kzp4w66sp3r74SWY6XXjhs57builAvN3xy6cPtL3Uc1tMjif2tX7Ra2PTlCwBfB1d+IJhzvzrDbqdEo8NRygXNS6Mvs3Lb02ffH8h96ObAoQQ4s5Ox2tPJsJHvXaL3Be/nUhXN0IIACq1OlmtRMjjQNd1UsklLo79h7+OLbw3Op05stUivhSwBRkI247f2+N5Zqjd0WF3OHG6PZitNoQQ1KoVKpUK6dSnTC5nMqcn03+/uJj/qa7r1R1eXwTYGh1u2x0DYfMLQZuxN+Yxd0bcJpMkBMl8pTa3VlpIl2ozHy8XXp7JFE9/mcdNAZ9JJFkVZSDiUY7KQjItbJTPaJv193Vdr91K+z+BklGf3fugXAAAAABJRU5ErkJggg==复制代码

上传的文件数据。数据就是真实的文件数据的 base64 编码后的数据(可以使用在线base64编码文件数据),与之前的文件头信息空格一行。

------WebKitFormBoundaryM1tLdAWapR8WCJSe--复制代码

文件数据最后是结尾边界。一定要注意: 前面有6条线,字母尾部有2条短线,短线的数量严格遵守,否则文件无法上传成功。主要是原因是,如果不严格按照规范写,会导致http提交报文无法正确解析的。

到此abpost.txt文件构造完毕。将构造好的abpost.txt文件放在执行ab命令的当前目录,换上自己的文件上传接口地址,执行命令就可以。

wsbm服务器错误怎么修复,如何使用ab测试上传文件相关推荐

  1. java怎么上传文件到web服务器_Java客户端通过Http发送POST请求上传文件到web服务器...

    http://www.cnblogs.com/WilliamJiang/archive/2012/04/29/2475883.html 1.朋友的一个需求,让我给他实现,需求是这样的,需要用ASP.n ...

  2. php files上传错误,php-PHP上传文件的问题$_FILES['file']['error']

    这段时间一直在啃<Head First PHP & MySQL>,这本书非常好,一步步教授怎么开发一个 PHP网站,一直照着一步步地敲代码,现在看到487页,在测试上传文件功能时, ...

  3. 向服务器上传文件的命令,上传文件到远程服务器的命令

    上传文件到远程服务器的命令 内容精选 换一换 将文件上传至Windows云服务器一般会采用MSTSC远程桌面连接的方式.本节为您介绍本地Windows计算机通过远程桌面连接,上传文件至Windows云 ...

  4. http上传文件到ftp服务器,HTTP协议与FTP协议上传文件的优缺点

    1:用http协议上传更适合web编程的方便:传小于1M文件速度要比用ftp协议上传文件略快.安全性好:不像ftp那样:必须要启动一个ftp服务才行.2:用ftp协议上传文件大于1M的文件速度比htt ...

  5. python2.7通过scp上传文件到指定服务器

    1 说明 实现功能: 扫描指定文件目录下文件,通过scp上传到指定服务器目录下 程序结构简单说明: 包含两个线程,线程一:扫描文件线程:线程二:消费文件线程: 线程一:扫描指定文件目录下文件,把符合要 ...

  6. 向本地的apache服务器上传文件

    上传文件 上传单个文件 通过火狐浏览器中的Firebug插件,可以查看浏览器发送的数据包内容 //上传单个文件的数据包内容解析: // 请求头 Content-Type multipart/form- ...

  7. 【便签纸】记录一次Linux服务器上通过sftp上传文件时的错误

    背景:在Linux服务器上,通过sftp上传文件到远程服务器. 首先,需要登录远程服务器,格式是: sftp [服务器名]@[服务器地址] 然后,需要输入服务器密码: [服务器名]@[服务器地址]'s ...

  8. linux ftp 550 下载,linux ftp服务器上传文件夹时提示550错误问题解决方法

    linux ftp服务器上传文件夹时提示550错误问题解决方法 标签: linux ftp服务器 550 中文文件夹上传错误 问题 分类: 计算机 2010-11-06 22:47 前几天在实验室搭配 ...

  9. 服务器上传文件出现500错误,但是其他不涉及文件的接口均正常

    出现的情景描述: 1.有用户报告说注册无法成功,经过前端的盘查发现实在注册的时候必须调用的上传文件的接口A抛出500错误,但不是每次都抛出不过有很大几率抛出500. 2.A接口接受5个参数和一个文件m ...

最新文章

  1. 使用Cbrgen和Setdest构造无线仿真环境
  2. c语言案例——输入一个字符串,将其逆序输出
  3. 3DSlicer11:体系结构2
  4. C++实现冒泡排序(附完整源码)
  5. SpringCloud Nacos + Ribbon 调用服务的 2 种方法!
  6. 【逆强化学习-1】学徒学习(Apprenticeship Learning)
  7. 如果战斗机飞行员弹出,自动驾驶仪会接管飞机安全降落么?
  8. L2-010 排座位 (25 分)
  9. 五大最佳自动化软件测试工具
  10. 根据时间经纬度高程计算天顶角
  11. IOS下,利用捏合手势实现图像缩放和显示
  12. 四种常见的颜色模式及各自的特点?
  13. 如何在手机上压缩图片?两种免费方法了解一下
  14. LDC(logic data center)与传统的(Internet Data Center-IDC)架构对比与优势(淘宝双十一经典案例解析)
  15. iOS自学-混合编程
  16. mysql报错error2002_mysql中异常出错ERROR:2002的处理办法分享
  17. apple iOS订阅开发-服务端
  18. AndroidStudio配置LitePal时Failed to Resolve
  19. 从ERP谈到中国企业升级
  20. 中小学数学卷子自动生成程序-----队友项目评价

热门文章

  1. 关于tc作用在入口(ingress)和出口(egress)效果的调研
  2. 做微商洗发水怎么做引流?洗发水类微商怎么引流精准客户?
  3. error C251: illegal octal digit 错误提示
  4. Apache日志分割及分析
  5. 家庭自酿葡萄酒入门(转)
  6. MTK: LSK,RSK的标签与响应
  7. 互联网领袖高峰对话:大佬们之间的对掐
  8. HuffmanTree
  9. IE安全系列:IE浏览器的技术变迁(上)
  10. 超过ChatGPT3达到ChatGPT4%90性能的小羊驼来了-Vicuna(校招社招必备,chatgpt风口来了赶紧学起来吧)