全栈软件测试工程师宝典连载(11)

简介: 全栈软件测试工程师宝典连载(11)

4. 网络


1)网络协议栈

在大学的时候,都学过网络的协议栈。OSI7层,TCP/IP模型为4层,其对应关系如图3-32所示。


image.png

                         

3-32  OSI 7层协议与TCP/IP模型4层协议对照表


OSI模型仅为教学提供,在日常工作中使用TCP/IP协议。在LinuxTCP网络包如图3-33所示。

image.png

3-33  Linux中的TCP网络包


在应用层仅为具体要用到的应用数据;到了传输层在头部加上TCP头信息;向下进入网络层,在TCP头信息头部再加上IP头信息;最后到达网络接口层,在数据包的头尾部各加上帧头和帧尾两部分。


TCP/IP的传输过程中,发送方从上而下一层一层地在应用数据前后加上头信息与尾信息,接受方从下而上一层一层地把头信息与尾信息去除,直到在应用层只剩下应用信息为止,如图3-34所示。

image.png

3-34  TCP/IP数据包的发送与接受


2Linux 网络栈

Linux的网络栈如图3-35所示。

image.png

3-35  Linux的网络栈


3)网络性能指标

同磁盘一样,网络也有对应的性能指标。


带宽。

表示链路的最大传输速率。单位通常为b/s(比特/秒)。

吞吐量。

表示没丢包时的最大数据传输速率。单位通常为b/s(比特/秒)或者 B/s(字节/秒),吞吐量受带宽限制,而吞吐量/带宽,也就是该网络的使用率

延时。

表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。在不同场景中,这一指标可能会有不同的含义。比如,它可以表示,建立连接需要的时间(比如 TCP 握手延时)或一个数据包往返所需的时间(比如 RTT)。

PPS

Packet PerSecond(包/秒)的缩写,表示以网络包为单位的传输速率。PPS 通常用来评估网络的转发能力,比如硬件交换机,通常可以达到线性转发(即PPS 可以达到或者接近理论最大值)。而基于Linux服务器的转发,则容易受网络包大小的影响。


网络的可用性。

网络能否正常通信

并发连接数。

TCP 的并发连接数量

丢包率。

传输过程中丢包的数量与总包的数量的百分比

重传率。

重新传输的网络数据包占所有包的百分比。


4)常用命令
ifconfig
# ifconfig ens33
ens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.0.108 netmask 255.255.255.0  broadcast192.168.0.255
inet6 fe80::dacc:9183:6dd2:2c6e  prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:55:10:1f  txqueuelen 1000  (Ethernet)
RX packets 23667 bytes 34981398 (34.9 MB)
RX errors 0  dropped 0  overruns 0 frame 0
TX packets 18467 bytes 1668920 (1.6 MB)
TX errors 0 dropped 0 overruns 0  carrier0  collisions 0


ifconfiglinux中用于显示或配置网络设备(网络接口卡)的命令,英文全称是network interfaces configuring。在这里。


RUNNING

表示这个网卡是连通的。

mtu 1500

表示MTU的当前值为1500MTU为最大传输单元,其默认值为1500MTU越大,需要的分包也就越少,自然网络吞吐能力就越好。

inet 192.168.0.108  netmask255.255.255.0  broadcast 192.168.0.255

表示当前的IPv4地址,子网掩码和广播地址。

inet6 fe80::dacc:9183:6dd2:2c6e prefixlen 64  scopeid 0x20

表示IPv6地址和子网掩码。


ip
# ip -s addr show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qdisc fq_codel state UP group default qlen 1000
   link/ether 00:0c:29:55:10:1f brd ff:ff:ff:ff:ff:ff
    inet192.168.0.114/24 brd 192.168.0.255 scope global dynamic noprefixroute ens33
      valid_lft 6024sec preferred_lft 6024sec
    inet6fe80::dacc:9183:6dd2:2c6e/64 scope link noprefixroute
      valid_lft forever preferred_lft forever
    RX:bytes  packets  errors dropped overrun mcast  
   1066174744 1153443  0       0      0       0      
    TX:bytes  packets  errors dropped carrier collsns
   313697585  701189   0      0       0       0      
root@ubuntu:/home/ebusiness#


linuxip命令和ifconfig类似,但ip功能更为强大,并旨在取代ipconfig之意。

LOWER_UP

表示这个网卡是连通的。

mtu 1500

表示MTU1500

inet 192.168.0.108/24 brd 192.168.0.255

表示当前的IPv4地址,子网掩码和广播地址。

inet6 fe80::dacc:9183:6dd2:2c6e/64 scope link noprefixroute

表示IPv6地址和子网掩码。

ifconfigip中其他参数如表3-14所示。


3-14 ifconfigip中其他参数

参数

解释

errors

发生错误的数据包的数量,比如校验错误、帧同步错误等

dropped

丢弃的数据包数,即数据包已经收到了 Ring Buffer,但因为内存不足等原因丢包

overruns

超限数据包的数量,即网络 I/O 速度过快,导致 Ring Buffer 中的数据包来不及处理(队列满)而导致的丢包

carrier

发生 carrirer 错误的数据包数,比如双工模式不匹配、物理电缆出现问题等

collisions

碰撞数据包数


sar
# sar -n DEV 1
Linux 4.15.0-66-generic (ubuntu) 12/11/2019_x86_64_(4 CPU)
12:45:31 AM  IFACE   rxpck/s txpck/s rxkB/stxkB/s rxcmp/s txcmp/s  rxmcst/s %ifutil
12:45:32 AM  ens33   0.00     0.00    0.00    0.00   0.00    0.00     0.00      0.00
12:45:32 AM  lo       0.00     0.00    0.00    0.00   0.00    0.00     0.00      0.00


sar命令配合-n参数可以查看网络的相关信息,有6个不同的开关:DEVEDEV NFSNFSDSOCKALL DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,NFS统计活动的NFS客户端的信息,NFSD统计NFS服务器的信息,SOCK显示套接字信息,ALL显示所有5个开关。它们可以单独或者一起使用。这里的参数如表3-15所示。


3-15 sar -nDEV参数

参数

含义

单位

rxpck/s txpck/s

接收和发送的 PPS

/

rxkB/s txkB/s

接收和发送的吞吐量

KB/

rxcmp/s txcmp/s

接收和发送的压缩数据包数

/

%ifutil

网络接口的使用率

(rxkB/s+txkB/s)/Bandwidth(半双工模式下)

max(rxkB/s, txkB/s)/Bandwidth(全双工模式下)

Bandwidth 可以用  ethtool 来查询,它的单位通常是 Gb/s 或者 Mb/s,不过注意这里小写字母 b ,表示比特而不是字节。


ping

ping命令通过ICMP协议查看网络的连通性和延时。

# ping 192.168.0.106 -c3
PING 192.168.0.106 (192.168.0.106) 56(84) bytes ofdata.
64 bytes from 192.168.0.106: icmp_seq=1 ttl=128time=0.280 ms
64 bytes from 192.168.0.106: icmp_seq=2 ttl=128 time=0.208ms
64 bytes from 192.168.0.106: icmp_seq=3 ttl=128time=0.351 ms
--- 192.168.0.106 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss,time 2007ms
rtt min/avg/max/mdev = 0.208/0.279/0.351/0.061 ms


ttl

表示生存时间,或者跳数。

time

表示往返延时。

icmp_seq

表示ICMP 序列号。

rtt min/avg/max/mdev = 0.208/0.279/0.351/0.061 ms

表示ttl的最小值为208ms、平均值为279ms、最大值为351ms以及平均偏差0.061 ms mdev = SQRT(SUM(RTT×RTT) / N – (SUM(RTT)/N) 2RTT(Round-Trip Time)。往返时延。是指数据从网络一端传到另一端所需的时间。时延由发送时延、传播时延、排队时延、处理时延四个部分组成)。


5)网络性能测试工具
ab

abApache开发的性能测试工具。在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/

测试URL192.168.0.238000端口,并发数为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 transferredHTTP响应数据中的头信息的长度。

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 certaintimems)。

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

wrk

 wrk是一款简单的HTTP压测工具,它托管在Github上,https://github.com/wg/wrkwrk的一个很好的特性就是能用很少的线程压出很大的并发量,原因是它使用了一些操作系统特定的高性能I/O机制, 比如select, epoll, kqueue等。它是复用了redisae异步事件驱动框架。确切地说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秒。

latencyReq/Sec

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

2391 requests in 30.09s, 4.29MB read

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

Requests/secTransfer/sec

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


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

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


# tcpdump -nn udp port 53or host 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 IP 192.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所示。


image.png

3-36  wireshark

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


7)小结

本节所涉及的概念有网络协议栈、Linux 网络栈和网络性能指标。涉及到的命令有ifconfigipsarping、性能测试工具:abwrk、性能分析工具:tcpdumpwireshark


5.性能监控工具nmon


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


—————————————————————————————————


软件安全测试

https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486

接口自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486

DevOps 和Jenkins之DevOps

https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486

DevOps与Jenkins 2.0之Jenkins

https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486

Selenium自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486

性能测试第1季:性能测试基础知识

https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486

性能测试第2季:LoadRunner12使用

https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486

性能测试第3季:JMeter工具使用

https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486

性能测试第4季:监控与调优

https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486

Django入门

https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486

啄木鸟顾老师漫谈软件测试

https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 算法
新时代软件测试工程师的挑战与机遇
随着科技的飞速发展,软件测试在当今信息化社会中扮演着举足轻重的角色。本文将探讨新时代软件测试工程师所面临的挑战和机遇,分析其发展趋势及应对策略,旨在为广大软件测试从业人员提供启示和指导。
|
7月前
|
测试技术 数据库
腾讯游戏测试工程师的经验心得分享
腾讯游戏测试工程师的经验心得分享
287 0
|
7月前
|
测试技术
华为测试工程师面试必备的问题点
华为测试工程师面试必备的问题点
79 0
|
18天前
|
安全 应用服务中间件 网络安全
渗透测试工程师面试题大全
渗透测试工程师面试题大全
|
7月前
|
Kubernetes 测试技术 应用服务中间件
新来的性能测试工程师工资25K,看了他做的性能测试,我砌底服了
新来的性能测试工程师工资25K,看了他做的性能测试,我砌底服了
|
3月前
|
测试技术
软件测试工程师日常工作中需要拒绝哪些工作?
软件测试工程师日常工作中需要拒绝哪些工作?
|
8月前
|
安全 搜索推荐 测试技术
【实测】用chatGPT来完整的走一次测试流程吧,看看它到底相当于我们什么等级的工程师?
【实测】用chatGPT来完整的走一次测试流程吧,看看它到底相当于我们什么等级的工程师?
|
5月前
|
消息中间件 安全 NoSQL
测试工程师如何帮助开发域的质量变好
测试工程师如何帮助开发域的质量变好
59 0
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
软件测试|人工智能如何帮助测试工程师解决问题?
软件测试|人工智能如何帮助测试工程师解决问题?
89 0
|
10月前
|
云安全 存储 运维
如何成为一名专业云渗透测试工程师
从宏观层面来看,新基建成为中国经济热词,政府和企业业务上云全面提速,随着云计算技术的快速发展,云安全问题已成为重点关注的领域。但从安全角度来看,这也意味着安全态势变得更加复杂,安全的范畴也变得更加广泛,漏洞存在于每个地方、攻击可以由世界任何一个地方发起,对于网络安全的准确预测成为保障安全的关键前提。

热门文章

最新文章