linux服务器上使用ab压测文件上传接口

使用ab压测文件上传接口

背景

通常大家使用的压测软件都是通过通过网络进行压测的,但是作为后端开放人员,在进行压测的时候网络因素要尽可能的减小。所以通常来说我们会在服务器上直接针对接口进行进行压力测试。在服务器端的压力测试软件通常为ab和http_bulid

http_bulid

http_bulid这款软件作为轻量级压测软件,是普通接口压测的利器,只需要准备部分url即能发起压测,但是确定也很明显,不支持post的请求方式。

ab

ab作为一款开源软件能简单便捷的发起各种压测请求,本文的主题,使用ab进行文件上传接口的压测。但是其中上传文件接口的压力测试在网络上的资料少之又少(我翻了好多都没有找到相关说明),但是由于ab支持post的请求,我坚信他可发起文件上传请求

安装

yum -y install httpd-tools

命令详解

详细文档可见官方文档

Server Software:        Apache          #服务器软件
Server Hostname:        www.taoquan.ink #域名
Server Port:            80              #请求端口号
Document Path:          /               #文件路径
Document Length:        40888 bytes     #页面字节数
Concurrency Level:      10              #请求的并发数
Time taken for tests:   27.300 seconds  #总访问时间
Complete requests:      1000            #请求成功数量
Failed requests:        0               #请求失败数量
Write errors:           0
Total transferred:      41054242 bytes  #请求总数据大小(包括header头信息)
HTML transferred:       40888000 bytes  #html页面实际总字节数
Requests per second:    36.63 [#/sec] (mean)  #每秒多少请求,这个是非常重要的参数数值,服务器的吞吐量
Time per request:       272.998 [ms] (mean)     #用户平均请求等待时间 
Time per request:       27.300 [ms] (mean, across all concurrent requests) # 服务器平均处理时间,也就是服务器吞吐量的倒数                  
Transfer rate:          1468.58 [Kbytes/sec] received  #每秒获取的数据长度
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       43   47   2.4     47      53
Processing:   189  224  40.7    215     895
Waiting:      102  128  38.6    118     794
Total:        233  270  41.3    263     945

Percentage of the requests served within a certain time (ms)
  50%    263    #50%用户请求在263ms内返回
  66%    271    #66%用户请求在271ms内返回
  75%    279    #75%用户请求在279ms内返回
  80%    285    #80%用户请求在285ms内返回
  90%    303    #90%用户请求在303ms内返回
  95%    320    #95%用户请求在320ms内返回
  98%    341    #98%用户请求在341ms内返回
  99%    373    #99%用户请求在373ms内返回
 100%    945 (longest request)

步入正题(后续有如何实现的心路历程 可以为大家提供更多的解决问题的思路)

准备文件

准备一张想要测试的文件 例如 把这张图片上传到要压测的服务器上

编辑文件

使用vim打开该文件 在开头加入如下3行 注 // 为注释的意思不要在正式压测的文件中加入//后的信息

------WebKitFormBoundaryAFQSEaLDUcBnvQtT//边界值
Content-Disposition: form-data; name="name"

e9ec28e8caac000ae122951b99af9f26.png //文件的路径 
------WebKitFormBoundaryAFQSEaLDUcBnvQtT
Content-Disposition: form-data; name="image";filename="e9ec28e8caac000ae122951b99af9f26.png"
Content-Type: image/png //

在结尾加入

------WebKitFormBoundaryAFQSEaLDUcBnvQtT----  边界值结尾 可以随便取名但是要跟开头对应

文件内容图

发起压测

具体请求如下
-T : 标识设置Content-Type请求头信息 例如multipart/form-data 使用表单进行信息传输
boundary : 标识文件边界 跟修改文件的时候的边界进行对应 http://localhost/interface/Resource/upload :上传文件接口
e9ec28e8caac000ae122951b99af9f26.txt 修改之后保存的文件

ab -n 10 -c 6 -p e9ec28e8caac000ae122951b99af9f26.txt -T "multipart/form-data; boundary=----WebKitFormBoundaryAFQSEaLDUcBnvQtT" http://localhost/interface/Resource/upload

返回数据和日志查看

压测返回


Server Software:        nginx
Server Hostname:        localhost
Server Port:            80

Document Path:          /interface/Resource/upload
Document Length:        64 bytes

Concurrency Level:      6
Time taken for tests:   0.075 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      2700 bytes
Total body sent:        4835660
HTML transferred:       640 bytes
Requests per second:    133.82 [#/sec] (mean)
Time per request:       44.836 [ms] (mean)
Time per request:       7.473 [ms] (mean, across all concurrent requests)
Transfer rate:          35.28 [Kbytes/sec] received
                        63194.35 kb/s sent
                        63229.64 kb/s total

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:    22   26   3.8     26      35
Waiting:       21   26   3.8     26      35
Total:         22   26   3.9     27      35

Percentage of the requests served within a certain time (ms)
  50%     27
  66%     27
  75%     28
  80%     28
  90%     35
  95%     35
  98%     35
  99%     35
 100%     35 (longest request)

日志文件

[ 2020-04-03T04:49:27+00:00 ] /interface/Resource/upload | INFO: File = Array
(
    [image] => Array
        (
            [name] => Octocat.png
            [type] => image/pngÿٿ
            [tmp_name] => /tmp/phpEffiu2
            [error] => 0
            [size] => 483204
        )

)

由以上返回可以看出 本次压测成功了 具体可以在根据相关的参数进行调整具体测试接口的抗压能力了

心路历程

由于网络上的文档较少只能靠着自己摸索,但是我想到咱们在web端的from表单上传文件大家都用过我们能不能通过浏览器的打印的接口信息发现点有用的东西呢 如下图即为web端上传文件的例子
web端发起上传文件的请求
我们注意到其中 Content-Type 里指明了数据是以 mutipart/form-data 来编码,本次请求的 boundary 是什么内容。
表单信息
消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary 开始,紧接着内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。
还包含文件名和文件类型信息。消息主体最后以 --boundary-- 标示结束。
我就尝试模拟该请求
这样
但是后端一直在报错
报错信息
我就思考是那个地方出问题了那
然后想到我的内容主题没有放进去,但是我的内容主题应该是啥呢?
我就想到传递文件都是以二进制的形式创建的 那我把二进制放进去行吗?我就把二进制文件直接放到了里面再次请求就成功了。到现在总算是完成了上传接口的调通

后记

这次经历我也感觉到自己的基本功并不扎实,当遇到一些比较难的问题的时候往往基本原理能给你一点新的思路
最后送大家 :学无止境、永攀高峰-------你敬爱的隔壁老王

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ab是Apache HTTP服务器自带的一个工具,也可以独立使用。以下是ab的用法和一个简单的案例: 1. 安装ab ab通常与Apache HTTP服务器一起安装,可以通过以下命令确认ab是否已经安装: ``` ab -V ``` 如果输出包含"ApacheBench"字样,则表示ab已经安装。 如果没有安装,则可以通过以下命令安装: Ubuntu/Debian系统: ``` sudo apt-get install apache2-utils ``` CentOS/RHEL系统: ``` sudo yum install httpd-tools ``` 2. 使用ab进行 以下是一个例子: ``` ab -n 1000 -c 100 http://localhost:8080/index.html ``` 这条命令表示发起1000个请求,每次并发100个请求,访问http://localhost:8080/index.html页面,并输出结果。 3. 结果分析 ab的输出结果包含三个部分:请求的数量、请求的吞吐量和请求的延迟。其中,请求的数量和吞吐量可以直接用于评估系统的性能,而请求的延迟则可以用于优化系统的性能。 例如,以下是一条ab的输出结果: ``` Concurrency Level: 100 Time taken for tests: 2.256 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 130000 bytes HTML transferred: 11000 bytes Requests per second: 443.72 [#/sec] (mean) Time per request: 225.602 [ms] (mean) Time per request: 2.256 [ms] (mean, across all concurrent requests) Transfer rate: 56.24 [Kbytes/sec] received ``` 其中,Requests per second表示每秒钟处理的请求数量,Time per request表示每个请求的平均延迟。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值