适配器完整性、性能测试
定义
命名空间:TouchSocket.Core
程序集:TouchSocket.Core.dll
一、说明
适配器测试是测试适配器在正常情况下,极端工作的一种测试方式。能够在前期,解决100%的算法问题。也能在极端配置下,模拟极端工作环境,能够简单,直观的展示出适配器的稳定性和工作性能。
1.1 测试原理
假设发送数据为[0,1,2,3,4],连续发送10次。 当bufferLength=1时,会先接收一个字节,然后适配器判断无法解析,然后缓存,然后再接收下一个字节,直到成功解析一个完整数据包。该模式解决的就是大家所说的分包,也就是能很好的模拟网络很差的环境。 当bufferLength>5时,假如为8,则会先接收[0,1,2,3,4,0,1,2],然后适配器成功判断解析前五字节,然后缓存后三字节,然后再接收下一个续包,直到解析结束。
1.2 测试事项
- bufferLength应该多次设置,且最好不要整除于发送数据的长度,这样避免巧合发生,测不出极端问题。
- Run的次数应该多设,模拟高频情况。
二、Tcp适配器
Tcp适配器的工作环境,只需考虑单线程即可。因为是客户端与适配器是一一对应的。
下列以 固定包头数据处理适配器 为例
//Tcp适配器测试
//bufferLength的作用是模拟tcp接收缓存区,例如:
//发送数据为{0,1,2,3,4}时
//当bufferLength=1时,会先接收一个字节,然后适配器判断无法解析,然后缓存,然后再接收下一个字节,直到成功解析。
//该模式能很好的模拟网络很差的环境。
//当bufferLength=8时,会先接收{0,1,2,3,4,0,1,2},然后适配器判断解析前五字节,然后缓存后三字节,然后再接收下一个续包,直到解析结束
for (int bufferLength = 1; bufferLength < 1024 * 10; bufferLength += 1024)
{
bool isSuccess = true;
var data = new byte[] { 0, 1, 2, 3, 4 };
SingleStreamDataAdapterTester tester = SingleStreamDataAdapterTester.CreateTester(new FixedHeaderPackageAdapter()
, bufferLength, (byteBlock, requestInfo) =>
{
//此处就是接收,如果是自定义适配器,可以将requestInfo强制转换为实际对象,然后判断数据的确定性
if (byteBlock.Len!=5||(!byteBlock.ToArray().SequenceEqual(data)))
{
isSuccess = false;
}
});
//data是发送的数据,因为此处使用的是固定包头适配器,
//发送前适配器会自动添加包头,所以,此处只发送数据即可。
//如果测试的是自定义适配器,发送前没有封装的话,就需要自行构建发送数据。
//随后的两个参数,10,10是测试次数,和期望次数,一般这两个值是相等的。
//意为:本次数据将循环发送10次,且会接收10次。不然此处会一直阻塞。
//最后一个参数是测试的最大超时时间。
var time = tester.Run(data, 10, 10, 1000 * 10);
Thread.Sleep(1000);
Console.WriteLine($"测试结束,状态:{isSuccess},用时:{time}");
}
Console.WriteLine("测试结束");