Ich versuche, einige Komponententests für AWS RDS zu schreiben. Derzeit sind die Start-Stopp-Rds-API-Aufrufe in moto noch nicht implementiert. Ich habe nur versucht, Boto3 zu verspotten, aber ich hatte alle möglichen seltsamen Probleme. Ich habe etwas googeln und gefunden http://botocore.readthedocs.io/en/latest/reference/stubber.htmlaws boto3 client Stubber Hilfe Stubbing Unit Tests
So habe ich versucht, das Beispiel für RDS zu implementieren, aber der Code verhält sich wie der normale Client, obwohl ich es stubbed. Nicht sicher, was los ist oder ob ich richtig stoße?
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')
so arbeitet, um die spöttische für die erste Zeile in dem Stubber und der Wert von r wird als meine stubbed Daten zurückgegeben. Wenn ich versuche, und in meine lambda_handler Methode in meinem lambda_function.py gehen und immer noch den Stub-Client verwenden Sie es wie ein normales unstubbed Client verhält:
lambda_function.py
def lambda_handler(event, context):
rds_client = boto3.client('rds', region_name=AWS_REGION)
rds_instances = rds_client.describe_db_instances()
Fehlerausgang:
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
Der Vorteil der Glutabstreifer über eine typische Mock ist, dass es fast genau wie ein Client verhält minus Herstellung einer tatsächliche http-Anfrage. Also müssen Sie den Client noch mit Anmeldeinformationen einrichten und die Region konfigurieren oder es wird so ein Fehler auftreten. –
Hallo Jordon, ich denke du hast meinen Beitrag falsch gelesen. Das Mocking ARBEITET in meinem Test, bis ich versuche, den Client in einer anderen Datei zu initialisieren -> lambda_function.py –
Sie scheinen den stubbed-Client nicht an Ihren Lambda-Handler zu übergeben. –