python - Django 单元测试模拟

标签 python django unit-testing mocking paramiko

我来到了之前在测试中从未使用过的mock库。我需要服务器的响应(服务器实际上并不在那里)是否在线。首先,我需要检查该服务器 IP,然后检查其状态以及 TRUE 或 FALSE 的响应。 Server.object 应该来自 models.py 所以我想我需要在这里开始使用模拟库。也许你们中的一些人可以向我解释或向我展示一些从“模拟”服务器获取虚假响应的示例。我已经阅读了 Django 测试、mock 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

最佳答案

在您的测试中,您需要修补 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

关于python - Django 单元测试模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28238284/

相关文章:

python - 如何在Snakemake中引用anaconda环境中的可执行文件

Python 多处理不断生成 pythonw.exe 进程而不做任何实际工作

python - Django json字段形成字段

python - 分析和改进 Django 的 ORM (SORT) 生成的查询的性能

c++ - 条件中的 Switch 语句和 & 号

javascript - 使用 sinonjs 测试方法调用的上下文

Python 在大矩阵中查找相似向量的最快方法

python - Django 多对五月 : how get row id in related table

python /django,火狐 : Is there a way that I can use python code to call firefox's functionality

java - 单元测试正确的数据结构创建