2017-08-06 1 views
0

J'ai un code Boto3 hérité qui utilise beaucoup la session Boto3 par défaut, par ex.Utilisation de la session par défaut dans Placebo pour tester le code Boto3

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

Je souhaite écrire des tests unitaires pour ce code existant en utilisant placebo.

Cependant, docs il semble impliquer que le code sous test devrait toujours gérer la session Boto3 explicitement, à savoir

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) 
... 

Ma lecture du code (e.g.) est que cela est tout à fait une limitation du framework Placebo Mock, bien que je ne sois pas un programmeur expert Python. Suis-je en train de mal comprendre quelque chose de fondamental - y a-t-il un moyen de contourner ce problème, ou devrais-je refactoriser tout mon code existant pour transmettre explicitement une session?

Répondre

1

j'ai tout compris en lisant les tests unitaires Boto3 (ref).

Pour joindre Placebo à la session par défaut, il est nécessaire de configurer explicitement la session par défaut, avant d'appeler 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) 

Maintenant, tout en ajoutant ces quatre lignes, j'enregistre Boto3 appelle dans mon héritage code, sans autre refactoring.

Je vais soulever une demande d'extraction pour ajouter ces notes dans le fichier README de Placebo.

2

placebo a besoin d'un objet Session et les exemples montrent tous la création d'un objet Session explicite mais je pense que vous pourriez juste faire référence à l'objet Session "intégré".

import boto3 
import placebo 

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

Oh wow. Merci beaucoup. Si cela fonctionne, je vais envoyer un PR pour clarifier les docs. –

+0

Non, cela ne fonctionne pas - Je vais mettre à jour le problème dans votre projet montrant les détails. –