【发布时间】:2021-01-28 21:46:14
【问题描述】:
有很多资源可用于使用 pytest、Moto 和 botocore Stubber 编写单元测试。
编辑。在进一步调查后,我重新表述了这个问题:
我有一个lambda_function python 脚本,我想用 pytest 和 Boto Stubber 对其进行测试。在lambda_function 内部,我从另一个 python 文件中导入了一个 ssm_client (ssm_clt = boto3.client('ssm', region_name=region))
问题是当我像这样设置 pytest 时:
def test_lambda_handler(ssm_stubber):
ssm_stubber.activate()
ssm_stubber.add_response(
'get_parameters_by_path',
expected_params={'Path': 'my/ssm/parameter', 'Recursive': 'True'},
service_response={
'Parameters': [
{
'Name': 'my/ssm/parameter',
'Type': 'String',
'Value': 'my_string returned',
},
],
},
)
ssm_stubber.deactivate()
ssm_stubber.assert_no_pending_responses()
将 ssm_stubber 定义为 pytest 夹具:
@pytest.fixture(autouse=True)
def ssm_stubber():
with Stubber(clients.ssm_clt) as stubber:
yield stubber
它使用实际的 boto3 客户端而不是 stubber 客户端,因为我在 lambda_function 中有一个导入语句。我正在努力解决这个问题。我不想在仅用于测试的常规lambda_function 中放入一堆代码。
这几乎就像我需要一个条件导入,但据我所知这是不好的做法。
我是否以一种几乎不可能以这种方式将 stubber 与 pytest 一起使用的方式来构建我的项目?
【问题讨论】:
标签: aws-lambda pytest