私はaws RDSのためのいくつかのユニットテストを書こうとしています。現在のところ、rds api呼び出しの開始ストップはまだモトで実装されていません。私はboto3を嘲笑しようとしましたが、あらゆる種類の奇妙な問題に遭遇しました。私はいくつかのグーグルして見つけたhttp://botocore.readthedocs.io/en/latest/reference/stubber.htmlaws boto3クライアントStubberヘルプスタブユニットテスト
私はrdsの例を実装しようとしましたが、コードは通常のクライアントのように振る舞っているように見えますが、スタブしています。何が起きているのか、私が正しくスタブしているのかどうか分からないのですか?
from LambdaRdsStartStop.lambda_function import lambda_handler
from LambdaRdsStartStop.lambda_function import AWS_REGION
def tests_turn_db_on_when_cw_event_matches_tag_value(self, mock_boto):
client = boto3.client('rds', AWS_REGION)
stubber = Stubber(client)
response = {u'DBInstances': [some copy pasted real data here], extra_info_about_call: extra_info}
stubber.add_response('describe_db_instances', response, {})
with stubber:
r = client.describe_db_instances()
lambda_handler({u'AutoStart': u'10:00:00+10:00/mon'}, 'context')
のでモックはstubber内の最初の行のために動作し、Rの値は、私のスタブデータとして返されます。私が試してみて、私のlambda_function.py内部の私のlambda_handlerメソッドに行くと、まだスタブクライアントを使用する場合には、通常のunstubbedクライアントのように動作します:
lambda_function.py
def lambda_handler(event, context):
rds_client = boto3.client('rds', region_name=AWS_REGION)
rds_instances = rds_client.describe_db_instances()
エラー出力:
File "D:\dev\projects\virtual_envs\rds_sloth\lib\site-packages\botocore\auth.py", line 340, in add_auth
raise NoCredentialsError
NoCredentialsError: Unable to locate credentials
を
典型的なモックを超えるstubberの利点を、それがほぼ正確にクライアントマイナス作るように振る舞うということです実際のHTTPリクエストしたがって、依然として資格情報を使用してクライアントを設定し、地域を設定する必要があります。そうしないと、エラーが発生します。 –
こんにちはジョーダン、私はあなたが私のポストを誤解しているかもしれないと思います。クライアントが別のファイルで初期化しようとするまで私のテストでmocking WORKSを実行する - > lambda_function.py –
スタブ付きクライアントをラムダハンドラに渡しているようには見えません。 –