多个顺序请求导致AWS IOT不一致



我正在写一个简单的单元测试,它正在运行:

botocore.client.IoT.search_index(queryString='connectivity.connected:true')

我的unittest只是连接一个设备,订阅MQTT,发送和接收一条测试消息。这让我有理由相信设备是真正在线的。

我的单元测试有时通过,有时失败。当我进入调试器并反复运行search_index命令时,我看到调用之间的结果不一致。我刚连接的设备有时在线,有时不在线,20秒后设备似乎一直在线。

我相信我可能从不同的服务器得到响应,服务器之间连接状态的传播在AWS端只是延迟了。

如果我的评估是正确的,那么我想知道我是否可以做些什么来强制调用之间的一致状态。围绕这种不一致的行为进行编码非常容易出错,而且几乎肯定会导致难以跟踪的bug。另外,我不相信我向AWS IOT发出的许多其他请求是安全的。简而言之,我不会这样做,如果没有办法强迫AWS IOT在调用之间提供一致的状态,我会找到更好的解决方案。

假设您正在对代码进行单元测试,您可以做的是模拟botocore.client.IoT.search_index响应。在unittest.mock库(https://docs.python.org/3/library/unittest.mock.html)中验证patch函数。对于您的情况,它必须是这样的:

@patch('botocore.client.IoT')
def test(iotMockedClass):
iotMockedClass.search_index.return_value = 'a fixed value that you must define'
# ... your unit test case

同样重要的是,单元测试不应该依赖于环境,必须用模拟或存根替换。

最新更新