我开发了一个使用docker库的类
self.client = docker.from_env(timeout=5, version="auto")
例如:
def run_container_in_background(self,application,branch,name_container,mount_dir):
container =self.client.containers.run(image,command"bash",detach=True,name=name_container)
我需要对这个方法进行单元测试,所以我需要模拟docker服务器。那么,有没有人知道如何使用python来模拟它呢
当我试图模拟“self.client=docker.from_env(timeout=5,version=“auto”)”
自我=<;0x0EE644D0处的docker.api.client.APIClient对象>
def _retrieve_server_version(self):
try:
return self.version(api_version=False)["ApiVersion"]
except KeyError:
raise DockerException(
'Invalid response from docker daemon: key "ApiVersion"'
' is missing.'
)
except Exception as e:
raise DockerException('Error while fetching server API version:
{0}'.format(e))
E docker.errors.DockerException: Error while fetching server API version: (2, 'CreateFile', 'Le fichier spécifié est introuvable.')
PS:docker守护进程被停用,以重现我想要解决的相同问题。 有没有办法解决模拟问题来解决这个问题
您可能应该重构此类,将Docker客户端作为参数,而不是创建自己的类。除了支持此测试设置外,这还将帮助您执行诸如在对象之间共享连接池之类的操作,并避免重复超时之类的某些细节
完成此操作后,可以创建所需的任何对象,并将其作为
client
参数传入。特别是因为Python通常是动态类型的,所以您可以使用模拟对象代替真实的客户端,只要您创建的对象具有与调用代码所期望的相同的“形状”(也考虑你的应用程序需要EME>直接调用DOCKER API,如果它可以被重构以使用其他技术。正如你在这个问题中所指出的,DOCKER API是复杂的,所需的测试方法并不简单。因为你可以将任意的主机目录绑定到一个容器中,这也是很容易得到的。以root用户身份运行的容器,可以写入主机的
/etc
目录,从而成为整个主机的root用户。)相关问题 更多 >
编程相关推荐