前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件性能测试(连载16)

软件性能测试(连载16)

作者头像
顾翔
发布2020-03-06 09:49:47
7950
发布2020-03-06 09:49:47
举报
文章被收录于专栏:啄木鸟软件测试

5)网络性能测试工具

① ab

ab是Apache开发的性能测试工具。在Ubuntu 中使用要通过apt-get install -yapache2-utils命令来安装。

代码语言:javascript
复制
# ab -c 10 -n 1000 http://192.168.0.23:8000/
This is ApacheBench, Version 2.3 <$Revision: 1807734$>
Copyright 1996 Adam Twiss, Zeus Technology Ltd,http://www.zeustech.net/
Licensed to The Apache Software Foundation,http://www.apache.org/
 
Benchmarking 192.168.0.23 (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:        WSGIServer/0.2
Server Hostname:        192.168.0.23
Server Port:            8000
 
Document Path:          /
Document Length:        1515 bytes
 
Concurrency Level:      10
Time taken for tests:   14.477 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      1882000 bytes
HTML transferred:       1515000 bytes
Requests per second:    69.08 [#/sec] (mean)
Time per request:       144.767 [ms] (mean)
Time per request:       14.477 [ms] (mean, across all concurrentrequests)
Transfer rate:          126.96 [Kbytes/sec] received
 
Connection Times (ms)
             min  mean[+/-sd] median   max
Connect:     0    0    0.1    0        1
Processing: 38  144   42.5   142     330
Waiting:     17  119   39.3   117     298
Total:       38  144   42.5    142     330
 
Percentage of the requests served within a certaintime (ms)
  50%    142
  66%    158
  75%    171
  80%    177
  90%    197
  95%    219
  98%    244
  99%    263
 100%    330 (longest request)
•ab -c 10 -n 1000 http:// 192.168.0.23:8000/。

测试URL为192.168.0.23的8000端口,并发数为10,共发送1000个请求。

代码语言:javascript
复制
•Server Software: WSGIServer/0.2。

测试服务器的名字。

代码语言:javascript
复制
•Server Hostname: 192.168.0.23。

请求的URL主机名。

代码语言:javascript
复制
•Server Port: 8000。

Web服务器监听的端口。

代码语言:javascript
复制
•Document Path: /。

请求的URL中的根绝对路径,通过该文件的后缀名,一般可以了解该请求的类型。

代码语言:javascript
复制
•Document Length: 1515 bytes。

HTTP响应数据的正文长度。

代码语言:javascript
复制
•Concurrency Level: 10。

并发用户数,即-c中的参数。

代码语言:javascript
复制
•Complete requests: 1000。

总请求数量,即-n中的参数。

代码语言:javascript
复制
•Failed requests: 0。

表示失败的请求数量,这里的失败是指请求在连接服务器、发送数据等环节发生异常,以及无响应后超时的情况。

代码语言:javascript
复制
•Total transferred: 1882000 bytes。

有请求的响应数据长度总和,包括每个HTTP响应数据的头信息和正文数据的长度。

代码语言:javascript
复制
•HTML transferred: 1515000 bytes。

所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度。

代码语言:javascript
复制
•Requests per second: 69.08 [#/sec] (mean) 。

吞吐率,计算公式为Complete requests/Time taken for tests,总请求数/处理完成这些请求数所花费的时间。

代码语言:javascript
复制
•Time per request: 144.767 [ms] (mean)。

用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。处理完成所有请求数所花费的时间/(总请求数/并发用户数)。

代码语言:javascript
复制
•Time per request: 14.477 [ms] (mean, across allconcurrent requests)。

表示服务器平均请求等待时间,计算公式为Time taken for tests/Complete requests,恰好是吞吐率的倒数。也可以这么统计Time per request/Concurrency Level。

代码语言:javascript
复制
•Transfer rate: 126.96 [Kbytes/sec] received。

表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests。这个统计说明服务器的处理能力达到极限时,其出口宽带的需求量。

代码语言:javascript
复制
•Percentage of requests served within a certaintime(ms)。

这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,80%的请求处理时间都不超过177ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间。

②wrk

wrk是一款简单的HTTP压测工具,它托管在Github上,https://github.com/wg/wrk。wrk的一个很好的特性就是能用很少的线程压出很大的并发量,原因是它使用了一些操作系统特定的高性能I/O机制, 比如select, epoll, kqueue等。它是复用了redis的ae异步事件驱动框架。确切地说ae事件驱动框架并不是redis发明的, 而是至于Tcl的解释器jim, 这个小巧高效的框架, 因为被redis采用而更多的被大家所熟知。

代码语言:javascript
复制
# wrk -t12 -c100 -d30s --latency http://192.168.0.23:8000
Running 30s test @ http://192.168.0.23:8000
  12 threadsand 100 connections
  ThreadStats   Avg        Stdev     Max     +/- Stdev
   Latency       689.04ms 229.05ms   1.57s    71.98%
   Req/Sec       12.43     9.36      80.00    82.00%
  LatencyDistribution
    50%  736.88ms
    75%  852.13ms
    90%  933.50ms
    99%    1.08s 
  2391requests in 30.09s, 4.29MB read
Requests/sec:    79.46
Transfer/sec:   146.04KB
•--latency。

查看响应时间的分布。

代码语言:javascript
复制
•-t12 -c100 -d30s。

总共12个线程,100个连接(注意:并不是一个线程对应一个连接),持续30秒。

代码语言:javascript
复制
•latency和Req/Sec。

表示单个线程的统计数据,latency代表延迟时间,Req/Sec代表单个线程每秒完成的请求数,都具有平均值、标准偏差、最大值、正负一个标准差占比。

代码语言:javascript
复制
•2391 requests in 30.09s, 4.29MB read。

在30秒之内总共有2391个请求,总共读取4.29MB MB的数据。

代码语言:javascript
复制
•Requests/sec和Transfer/sec。

所有线程平均每秒钟完成了79.46个请求,每秒钟读取146.04KB数据量。

6)分析网络的两个重要工具
① tcpdump

tcpdump工具可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。在运行性能测试的时候,可以通过tcpdump抓取,然后进行分析。

代码语言:javascript
复制
# tcpdump -nn udp port 53 orhost 123.56.135.186
tcpdump: verbose outputsuppressed, use -v or -vv for full protocol decode
listening on ens33,link-type EN10MB (Ethernet), capture size 262144 bytes
22:42:01.829302 IP192.168.58.129.39735 > 192.168.58.2.53: 49863+ A? www.3testing.com. (34)
22:42:01.829565 IP192.168.58.129.43751 > 192.168.58.2.53: 24308+ AAAA? www.3testing.com. (34)
22:42:01.960297 IP192.168.58.2.53 > 192.168.58.129.39735: 49863 1/0/0 A 123.56.135.186 (50)
22:42:01.961346 IP192.168.58.2.53 > 192.168.58.129.43751: 24308 0/1/0 (94)
22:42:01.961820 IP192.168.58.129 > 123.56.135.186: ICMP echo request, id 2414, seq 1, length64
22:42:01.996723 IP123.56.135.186 > 192.168.58.129: ICMP echo reply, id 2414, seq 1, length 64
22:42:01.997380 IP192.168.58.129.49101 > 192.168.58.2.53: 29852+ PTR?186.135.56.123.in-addr.arpa. (45)
22:42:02.856462 IP192.168.58.129.49101 > 192.168.58.2.53: 29852+ PTR?186.135.56.123.in-addr.arpa. (45)
22:42:04.606587 IP192.168.58.129.49101 > 192.168.58.2.53: 29852+ PTR? 186.135.56.123.in-addr.arpa.(45)
22:42:07.856421 IP192.168.58.129.49101 > 192.168.58.2.53: 29852+ PTR?186.135.56.123.in-addr.arpa. (45)
22:42:12.008686 IP192.168.58.129 > 123.56.135.186: ICMP echo request, id 2414, seq 2, length64
22:42:12.050959 IP123.56.135.186 > 192.168.58.129: ICMP echo reply, id 2414, seq 2, length 64
•tcpdump -nn udp port 53 or host 123.56.135.186。

Ø-nn。

表示不解析抓包中的域名(即不反向解析)、协议以及端口号。

Øudp port 53。

只显示UDP协议的端口号(包括源端口和目的端口)为53的包。

Øhost123.56.135.186。

只显示 IP 地址(包括源地址和目的地址)为123.56.135.186的包。这两个过滤条件中间的"or"表示或的关系,也就是说,只要满足上面两个条件中的任一个,就可以展示出来。

代码语言:javascript
复制
•22:42:01.829302 IP 192.168.58.129.39735 > 192.168.58.2.53: 49863+A? www.3testing.com. (34)

Ø22:42:01.829302。

时间戳。

ØIP。

协议。

Ø192.168.58.129.39735。

源地址.源端口。

Ø> 。

到。

Ø192.168.58.2.53:。

目的地址.目的端口。

Ø49863+ A? www.3testing.com.(34)。

网络包详细信息。

u49863+。

查询标识值,它也会出现在响应中,加号表示启用递归查询。

uA?。

查询A记录。

uwww.3testing.com.。

表示待查询的域名。

u(34)。

报文长度。

② wireshark

wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。在运行性能测试的时候,首先通过tcpdump工具加上-w 把结果存储在.pcap文件中。

tcpdump -nn host 192.168.58.129 -w web.pcap

然后启动wireshark工具就可以分析软件性能了。如图3-36所示。

图3-36 wireshark

关于wireshark的介绍资料在网上很多,在这里不进行详细介绍。

7)小结

本节所涉及的概念有网络协议栈、Linux 网络栈和网络性能指标。涉及到的命令有ifconfig、ip、sar、ping、性能测试工具:ab和wrk、性能分析工具:tcpdump和wireshark。

5.性能监控工具nmon

Linux性能分析工具nmon请查看第8.4.1节,一般在做性能测试的时候,采用这个工具进行服务器端的监控,而上面进到的命令作为调试的时候使用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试培训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ① ab
  • ②wrk
  • 6)分析网络的两个重要工具
    • ① tcpdump
      • ② wireshark
      • 7)小结
      • 5.性能监控工具nmon
      相关产品与服务
      云数据库 Redis
      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档