我试图熟悉使用Mock来测试lambdafunctions,但是我似乎无法超越基础知识。我写了一个非常简单的脚本,开始测试是否进行了boto3调用。这只是打印找到的第一个实例的实例ID:
import boto3
def get_client():
session = boto3.Session(profile_name='ec2')
client = session.client('ec2')
return client
def get_instance_id(client):
response = client.describe_instances()
return response['Reservations'][0]['Instances'][0]['InstanceId']
def main():
client = get_client()
id = get_instance_id(client)
print(id)
if __name__ == "__main__":
main()
我正在尝试修补整个boto3类以用于各种断言,主要是断言已进行了所有适当的调用。以下是断言boto3会话被称为的基本尝试:
import unittest
from unittest.mock import patch
from main import *
@patch('main.boto3')
class TestMain(unittest.TestCase):
def setUp(self):
pass
def test_get_client(self,boto3):
get_client() # test client call function directly
boto3.Session().assert_called()
我只是无法使assert_call起作用。当我打印出通过boto3.mock_calls发出的呼叫时,它可以清楚地标识出发出的呼叫:
[call.Session(profile_name ='ec2'),call.Session()。client('ec2')]
但是使用assert_call,我得到以下信息: AssertionError:预期已调用“无”。
如果我尝试类似boto3.Session()。assert_call_with(profile_name ='ec2')
我得到: AssertionError:预期的调用:模拟(profile_name ='ec2')
我尝试了诸如boto3.session.assert_call(),boto3.session.Session()。assert_Called()等变化形式
我的想法是我没有正确调用对象,或者没有正确获得会话对象的路径。谁能帮助我至少使会话断言起作用?