专栏首页用户6517667的专栏软件性能测试(连载16)

软件性能测试(连载16)

5)网络性能测试工具

① ab

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

# 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个请求。

•Server Software: WSGIServer/0.2。

测试服务器的名字。

•Server Hostname: 192.168.0.23。

请求的URL主机名。

•Server Port: 8000。

Web服务器监听的端口。

•Document Path: /。

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

•Document Length: 1515 bytes。

HTTP响应数据的正文长度。

•Concurrency Level: 10。

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

•Complete requests: 1000。

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

•Failed requests: 0。

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

•Total transferred: 1882000 bytes。

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

•HTML transferred: 1515000 bytes。

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

•Requests per second: 69.08 [#/sec] (mean) 。

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

•Time per request: 144.767 [ms] (mean)。

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

•Time per request: 14.477 [ms] (mean, across allconcurrent requests)。

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

•Transfer rate: 126.96 [Kbytes/sec] received。

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

•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采用而更多的被大家所熟知。

# 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。

查看响应时间的分布。

•-t12 -c100 -d30s。

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

•latency和Req/Sec。

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

•2391 requests in 30.09s, 4.29MB read。

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

•Requests/sec和Transfer/sec。

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

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

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

# 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"表示或的关系,也就是说,只要满足上面两个条件中的任一个,就可以展示出来。

•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节,一般在做性能测试的时候,采用这个工具进行服务器端的监控,而上面进到的命令作为调试的时候使用。

本文分享自微信公众号 - 软件测试培训(iTestTrain),作者:顾翔

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于Django的电子商务网站开发(连载5)

    HTTP的请求方式共分为OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT八种(注意:这些方法均为大写),其中比较常用...

    小老鼠
  • 全网最全fiddler使用教程和fiddler如何抓包

    抓包工具有很多,比如常用的抓包工具Httpwatch,通用的强大的抓包工具Wireshark.为什么使用fiddler?原因如下:

    小老鼠
  • DevOps工具介绍连载(30)——Atlassian Bamboo

    Atlassian Bamboo 是一款持续集成构建服务器软件(Build Server)。 Bamboo的特点: 1.简单的用户界面 2.容易安装 - 顺利的...

    小老鼠
  • Python爬虫--- 1.1请求库的安装与使用

    http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

    緣來
  • Python爬虫--- 1.1请求库的安装与使用

    原文链接:https://www.fkomm.cn/article/2018/7/16/16.html

    圆方圆PYTHON学院
  • Python网络爬虫与信息抽取笔记02 requests库入门

    WZEARW
  • Python爬虫系列(一)入门教学

    大家好,我是新来的小编小周。今天给大家带来的是python爬虫入门,文章以简为要,引导初学者快速上手爬虫。话不多说,我们开始今天的内容。

    短短的路走走停停
  • Python3网络爬虫实战-25、req

    在前面一节我们了解了 Requests 的基本用法,如基本的 GET、POST 请求以及 Response 对象的用法,本节我们再来了解下 Requests 的...

    py3study
  • golang、go mod环境变量配置、goland永久激活

    首先你的下载golang的sdk,写文章的时候最下版本是1.13,网速可以的去官网下载,无法下载的,提供两个地址csdn下载 和 服务器下载。

    用户2235302
  • CocoaPods install error

    用户6094182

扫码关注云+社区

领取腾讯云代金券