在switchyard中编写scenario测试脚本如何间隔一段时间发送报文

一、问题来源

最近在实验中编写scenario脚本测试自己编写的switch/hub模块时需要间隔一段时间再发送报文,第一时间想到的是用python的time模块中sleep函数实现,但经过测试,sleep函数并不能达到预期效果,而是在执行开始之前就会先进入sleep函数。
查阅switchyard官方文档:找到以下接口函数:
在这里插入图片描述
这里PacketInputTimeoutEvent函数是指,调用该模块会使得该模块在timeout时间内尝试接收包但并没有包到达端口,因此正如文档所说,switch需要正确处理该情况。

二、解决方案

1.首先需要在switch模块正确处理报文目的地是自身的情况

如果报文的目的地址是自身mac地址的话,switch只需要什么也不做,并且循环接收报文即可。

if eth.dst in mymacs:
            log_info("Received a packet intended for me")

(代码写法多样,这里取实验框架的内容)

2.在测试脚本中构造一个发往switch的包,并调用PacketInput() 和 PacketInputTimeoutEvent()函数

包的构建可以调用API文档的函数,也可以自己写一个函数,这里就不展示了,只需要将dst调整为switch自身mac地址之一即可。
发送发可以随便指定switch的一个eth接口:

PacketInputEvent("eth0", testpkt, display=Ethernet)

接收的时候PacketInputTimeoutEvent(timeout)中的timeout参数指定为自己想要暂停的时间即可(单位是秒)。

PacketInputTimeoutEvent(15.0)

也可以将上述时间置于expect中进行观察。

三、观察结果

这里在虚拟环境下运行测试脚本和switch脚本,观察是否实现预期效果。
在这里插入图片描述
switch在接收到发给自己的报文后暂停了15s,再执行接下来的测试,最终执行完成了所有测试!
在这里插入图片描述
说实话,按我的理解这其实是一种“伪实现”,因为并不是真正意义上使测试脚本暂停了15s,而是在某个时间节点构造了一个发给switch自身的报文,交由switch处理。但也算是实现了预期效果!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值