我正在尝试为这个硬件+软件测试主题创建自动化集成测试,它运行一个 SNMP 代理作为它的命令接口。我们的测试设置如下所示:我们使用 Fitnesse 作为测试运行器,使用 PyFit 能够在 Python 中编写测试。然后我们使用带有 Python 绑定的 netsnmp 来发送 SNMP 命令。这工作得很好。
但是,当我尝试运行一个套件时,SNMP 代理(测试对象)会重新启动(通常在不同的模拟时间),这会使 netsnmp 的内部得到各种有趣的错误。
事实证明,netsnmp 库中存储了很多全局状态,例如社区和上下文名称,以及有问题的 EngineTime 和 EngineBootCnt,它们用于防止 SNMP v3 中的重放攻击。这会导致代理拒绝我的 snmp 命令。
我的问题是如何以重置内部全局状态的方式重新初始化 netsnmp 库(来自 Python 绑定)?Python 绑定中的 netsnmp.Session 对象确实采用参数 EngineTime 和 EngineBoots 并将它们设置为 0 应该重置它们,但实际上它似乎没有这样做。我也不知道那里是否还有其他需要重置的全局状态。
我正处于我认为需要重写测试以使用纯 python snmp 库 pysnmp 的地步,但我希望避免它。