我来到 mock lib,这是我之前从未在测试中使用过的。我需要来自服务器的响应(服务器实际上并不存在),如果它在线或不在线。首先,我需要检查服务器IP,然后检查其状态,响应为TRUE或FALSE。 Server.object 应该来自 models.py ,所以我想我需要在这里开始使用mock lib。也许你们中的一些人可以向我解释或向我展示一些从“模拟服务器”获得虚假回复的例子。我已经阅读了Django测试,模拟lib官方文档,但没有一个给我足够的信息如何模拟假服务器的响应。
代码示例:
def ssh_server(server_list, timeout=200):
online = False
response = []
server_state = []
timeout_stamp = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
for obj_id in server_list:
server = models.Server.objects.get(id=obj_id)
ip = server.ip
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
while True:
try:
client.connect(ip, username='root')
online = True
except:
online = False
答案 0 :(得分:1)
在你的测试中,你需要修补paramiko。像这样:
import unittest
from mock import patch
from mymodue import ssh_server
class MyTest(unittest.TestCase):
@patch('mymodule.paramiko')
def test_server(self, paramiko):
ssh_server(server_list, timeout=200)
不会引发任何异常,因此client.connect(ip, username='root')
将获得TRUE。
这样做是模仿paramiko模块,它被导入到你的模块中 - 它将是MagicMock的一个实例,只要调用它的方法,它就会返回MagicMock的更多实例。所以,最终client.connect(ip, username='root')
将只返回一个MagicMock实例,它永远不会尝试连接任何东西,你的代码根本不会使用paramiko。
根据您正在测试的内容,您可以检查测试方法中的paramiko变量,断言它已按照您的预期方式使用,即已正确调用其方法。 mock.patch文档将帮助您做到这一点:http://www.voidspace.org.uk/python/mock/patch.html