背景
我们做软件测试的时候,经常需要页面有点数据,特别是涉及到一些数据统计的测试用例的时候,更是需要源源不断的测试数据让前端页面生成对应的报表测试统计的数据正确性。如果我们通过手工的方式操作业务流程来实现数据的构造的话,少量数据或许还可以,数据一多就会让测试效率直线降低了。
所以作为测试,我们经常需要用一些工具来模拟业务流程,发送一些流量,从而构造出前端页面显示的数据。
那么,可以构造出流量的工具其实很多:
比如接口测试的时候,Jmeter工具就可以通过csv的方式,读取文件进行数据构造;
比如压力测试的时候,Loadrunner,Jmeter或者avalanche和Ixia这些工具,都可以实现不同数量级的数据构造,来实现对产品持续的压力;
比如还可以通过sql脚本来直接在数据库里添加数据,构造海量数据;
......
当然,这些工具和方法,每一个都可以列为一个专业测试领域,比如接口测试、性能测试、大数据测试等;我们今天要讲的方法,是相对来说比较轻量级的一些工具,大家比较容易掌握,也比较容易上手,可以直接通过Linux命令发送流量,简单便捷迅速!
Linux下的流量小工具
要是用Linux的流量工具模拟用户流量,需要准备一台Linux作为客户端,然后连接上目标软件的服务器,网络拓扑如下:
命令都是在Linux里执行,从客户端发送的流量会被送到目标服务器中。
Hping : 可以发送ICMP,TCP,UDP协议的流量,并且可以指定IP和端口。
其常用参数如下:
-c / --count : 发送数据包的个数
-i /--interval : 包发送间隔时间(单位是毫秒) 缺省时间是1秒,此功能在增加传输率上很重
-fast 每秒发10个数据包,可用作dos攻击
-q/ --quiet: 退出什么都不会输出,除了开始结诉时间
-I --interface interface name 指定借口
-v /--verbose : 显示很多信息
-1/--icmp : ICMP模式,此模式下,HPING会发送ICMP应答报文
-2 /--udp :UDP 模式,缺省下,HPING会发送UDP报文到主机的0端口,可以用--baseport --destport --keep选项指定其模式
-a/ --spoof : 指定源IP地址,也可用于伪造IP攻击,防火墙就不会记录真实IP,回应的包也接收不到了,
应用实例:
- 发送普通TCP流量:
hping 172.16.127.10 --spoof 172.16.127.2 --quiet --setack 0 -S -p 8080 --data 1024 --count 1
第一个IP地址是目的IP地址(服务器的IP地址),第二个IP地址是指定源IP地址(一般就是跟服务器连接的客户端的IP地址);指定了目标端口为8080,发包数量为1.
- 发送普通UDP流量:
hping 172.140.3.70 --spoof 172.14.3.70 --quiet --udp -p 5532 --data 1024 --count 100
- 构造出DOS攻击,比如SYN洪泛攻击:
hping --flood -p 2000 -a 172.20.3.90 --syn -s 2000 172.200.3.90
只发送syn包,造成syn洪范攻击的流量。或者也可以用以下命令:
hping 172.20.3.66 --setack 0 -p 5000 -S -V -i u100 --flood --rand-source
注意:hping命令不会建立真正的连接和server端交互数据
iperf:可以发送TCP和UDP的流量
常用参数
-s : 以server模式启动
-c :host以client模式启动,host是server端地址,比如:
iperf -c 222.35.11.23
-p :指定服务器端使用的端口或客户端所连接的端口,比如:
iperf -s -p 9999
iperf -c 222.35.11.23 -p 9999
-u :使用udp协议
-n :指定传输的字节数,比如:
iperf -c 222.35.11.23 -n 100000
-t 测试时间,默认10秒,比如:
iperf -c 222.35.11.23 -t 5
-F 指定需要传输的文件
-V 发送IPv6的数据,比如:
iperf -c 2001::172:16:127:11 -t 60 -p 8080 -V
应用实例:
- 在客户机上发送数据到服务器上,指定发送的端口为8080
iperf -s -p 8080 //服务器机器上启动为服务器模式,并监听 8080 端口
iperf -c 172.16.127.10 -t 60 -p 8080 -n 100 //客户机上启动为客户端器模式,指定目标IP地址 和 端口 (172.16.127.10 和 8080端口),发送100字节
curl :一个非常实用的、用来与服务器之间传输数据的工具,可以支持http 和https协议等。
常用参数:
url :需要抓取的一到多个URLs
-v / --verbose :显示更详细的信息,调试时使用
-m/ --max-time : 限制整个curl操作的最长时间,单位为秒
-s / --silent: 安静模式, 不要显示进度表或错误消息;
-g : 针对IPv6的地址
--retry/ --retry-delay / --retry-max-time :失败重试次数/重试间隔时间/最大重试时间;
--interface: 使用指定的网卡接口访问,可以跟接口名字或者IP地址
***curl --interface eth0 http://aiezu.com ***
curl --interface 10.0.0.101 http://aiezu.com
-0/--http1.0 : 强制curl使用HTTP 1.0而不是使用默认的HTTP 1.1
应用实例:
- 获取一个http网站的资源,指定接口
curl http://172.140.3.70/foooo/ccn1.html -v --max-time 1 --interface 172.14.3.70
2. 获取一个https网站的资源,并使用ipv6的指定接口
curl -g -k https://[2001::172:16:127:11] -v --max-time 1 --interface 2001::172:16:127:2
3.配合循环一起使用:
while true;do curl http://172.140.3.70/foooo/ccn1.html -v --max-time 1 --interface 172.14.3.70; done
dig: 是一个在Linux命令行模式下查询DNS的命令,可以发送DNS的流量
应用实例:
- 发送TCP为底层协议的DNS请求
**dig @172.16.127.10 www.a10.com -4 +time=1 +tries=3 -b 172.16.127.2 +tcp**
- 发送UDP为底层协议的DNS请求
**dig @172.16.127.10 www.a10.com -4 +time=1 +tries=3 -b 172.16.127.2** - 发送IPv6地址的DNS请求
dig -6 @2001::172:16:127:11 test.a10.com +time=1 -b 2001::172:16:127:2
wget :是Linux中的一个下载文件的工具,可以支持http/https协议ftp/tftp协议等
应用实例:
- 从ftp服务器上下载资源
wget ftp://172.16.127.10/pub/2k.html
- 从IPv6的ftp服务器上下载资源,并启动被动模式
wget -6 ftp://[2001::172:16:127:11]/pub/2k.html -P /root --no-passive(关闭主动模式)
3. 使用wget -c重新启动下载中断的文件
wget -c https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
- 使用 wget -b 后台下载
wget -b https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
欢迎来到testingpai.com!
注册 关于