当前位置:   article > 正文

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

switchyard time

一、问题来源

最近在实验中编写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")
  • 1
  • 2

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

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

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

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

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

PacketInputTimeoutEvent(15.0)
  • 1

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

三、观察结果

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/706809
推荐阅读
相关标签
  

闽ICP备14008679号