Pyhon引用Socket和Scapy实现稳定性测试

前言

在日常测试中,稳定性测试是必不可少的环节,但是难以模拟真实的客户场景是短板,而且稳定性测试开始后,执行数据的收集也是少之又少,所以我们结合ptyhon中的Socket库和Scapy库,来实现稳定性测试,可以做到随机EPS、区间EPS出现概率、设定执行时长、模拟发生源IP、指定目的IP都是可以配置,并且具备打印日志的功能。

Socket和Scapy

两者都是用于传输数据,我们用到的主要是传输报文,都可以按照TCP和UDP的方式传输,TCP传输入使用字节流的方式,UDP是数据包,所以在使用两种传输方式时代码的引用也有一些差异。

Socket特性

Python 提供了两个基本的 socket 模块保存,第一个是 Socket,它提供了标准的 BSD Sockets API,第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发,TCP发送数据时,已建立好TCP连接,所以不需要指定地址。UDP是面向无连接的,每次发送要指定是发给谁。

Scapy特性

scapy涉及了pf_packet套结字编程,路由以及面向对象设计等诸技术,它本身使用python编写。一般情况下接收报文需要遵从某一些协议,这样双方可以通过特定的粘包解包操作处理数据,很多情况自定义协议都是比较简单,先接收报文头,获取消息长度,再获取消息体,但是有很多协议写起来很麻烦,于是就用到scapy这个库,就可以每次获取一个报文,一般报文头信息都是类似的,都带有源地址,目标地址,消息长度。

模块组成

计时器模块用于每X秒执行一次函数

在这里插入图片描述

随机变量的概率函数用于EPS出现概率

在这里插入图片描述

读取文件模块用于读取原始日志的文档在这里插入图片描述

发送函数用于随机提取任意原始日志按照EPS发送数据包

在这里插入图片描述

执行流程

设置变量

EPS区间 可以设置多个例如 ,A、B、C,EPS出现概率 列表的值必须是三个且和为100,在运行脚本时只修改变量即可,代码区域无需变动
文件路径不能为空,解析文件函数会在运行整体脚本前校对文件
下图变量解读:脚本运行时长1800000秒,EPS分为两个区间0-500和500-2000,0-500区间随机值出现的概率是95%,500-2000区间随机值出现的概率是5%,读取了根目录下的txt文件,指定接收端的IP是10.176.63.31,指定接收端 端口是 514,初始化总执行次数、区间执行次数,声明socket。
在这里插入图片描述

执行方法

在这里插入图片描述

日志打印

打印日志包含:文件的路径、文件行数、开始执行时间、每秒EPS发送数据数量及发送的文件对应行数(需要详细信息的同学也可以打印行数对应的日志样本)、结束执行时间、发送的总数据量、发送EPS区间的概率、发送用时,有需要的还可以加入抛异常输出信息,在程序异常中断或者是手动中断时,依旧可以输出完整的日志,需要文本对应也可以加入日志写入txt文件。
在这里插入图片描述

拓展

模拟发生源IP

以上粘贴的发送方式是按照Socket以本地IP进行发送数据包的,如果有特殊的需要还可以模拟发生源IP发送数据包。
需要引入的模块:from scapy.layers.inet import IP, UDP、from scapy.all import *,这样数据包就可以按照我们预先设定好的IP来发送数据包了
在这里插入图片描述

数据包乱码问题(python3的用法)

引入模块import importlib importlib.reload(sys)
如果还是发送的数据包乱码,就需要检查是否是发送的编码格式有问题,尝试.encode(‘GBK’)与.encode(‘UTF-8’)。
若修改了编码格式没有收到,那么就需要检查是否是发送的数据包过长了,当前发送数据包过长的是发不出去的。

其他连接方式

我们选择连接方式的时候也可以选择TCP的SOCK_STREAM,他比UDP要可靠,但是相对应着开销会大

猜你喜欢

转载自blog.csdn.net/qq_36616956/article/details/128928988