使用Placebo中的默认会话对Boto3代码进行单元测试

时间:2017-08-06 10:03:01

标签: python amazon-web-services boto3

我有传统的Boto3代码,它大量使用默认的Boto3会话,例如。

import boto3
client = boto3.client('ec2')
client.describe_images(DryRun=False)
...

我希望使用placebo为此遗留代码编写单元测试。

然而,那里的文档似乎暗示被测代码需要始终明确地管理Boto3会话,即

import boto3
import placebo

session = boto3.Session()
pill = placebo.attach(session, data_path='/path/to/response/directory')
pill.record()

client = session.client('ec2')
client.describe_images(DryRun=False)
...

我对代码(e.g.)的阅读是这是对Placebo Mock框架的一个限制,尽管我不是Python程序员的专家。

我是否误解了一些基本的东西 - 有什么方法可以解决这个问题,还是我必须重构所有遗留代码以明确传递会话?

2 个答案:

答案 0 :(得分:2)

安慰剂需要一个Session对象,所有示例都显示创建一个显式的Session对象,但我认为你可以引用“内置”Session对象。

import boto3
import placebo

pill = placebo.attach(boto3.session, data_path='/path/to/response/directory')

答案 1 :(得分:1)

我通过阅读Boto3单元测试(ref)来解决这个问题。

要将Placebo附加到默认会话,必须在调用Placebo之前显式设置默认会话:

import boto3
import placebo

boto3.setup_default_session()
session = boto3.DEFAULT_SESSION
pill = placebo.attach(session, data_path='/path/to/response/directory')
pill.record()

client = boto3.client('ec2')
client.describe_images(DryRun=False)

现在,只需添加这四行,我就可以在遗留代码中记录Boto3调用,而无需进一步重构。

我将提出拉动请求,以便在安慰剂自述文件中添加这些注释。