J'écris un test pour les fonctions boto3
et en utilisant la bibliothèque moto
pour simuler boto3
.Mocking boto3 appels réels boto3
L'exemple qu'ils fournissent en tant que tel:
import boto3
from moto import mock_ec2
def add_servers(ami_id, count):
client = boto3.client('ec2', region_name='us-west-1')
client.run_instances(ImageId=ami_id, MinCount=count, MaxCount=count)
@mock_ec2
def test_add_servers():
add_servers('ami-1234abcd', 2)
client = boto3.client('ec2', region_name='us-west-1')
instances = client.describe_instances()['Reservations'][0]['Instances']
assert len(instances) == 2
instance1 = instances[0]
assert instance1['ImageId'] == 'ami-1234abcd'
Cependant quand j'essayer quelque chose de similaire, en utilisant un exemple trivial ici, en faisant ceci:
def start_instance(instance_id):
client = boto3.client('ec2')
client.start_instances(InstanceIds=[instance_id])
@mock_ec2
def test_start_instance():
start_instance('abc123')
client = boto3.client('ec2')
instances = client.describe_instances()
print instances
test_start_instance()
ClientError: An error occurred (InvalidInstanceID.NotFound) when calling the StartInstances operation: The instance ID '[u'abc123']' does not exist
Pourquoi est-il en fait faire la demande à AWS quand j'ai clairement la fonction enveloppée dans le moqueur?
Regardez également dans des choses comme FakeS3, si vous avez besoin d'un vrai simulacre de services S3 qui vous permettent de stocker temporairement des fichiers pour tester la fonctionnalité des applications sur S3. – mootmoot
Je fais plus de travail EC2 que tout, mais je vais le garder à l'esprit. Une autre bibliothèque sympa que j'ai vue était 'placebo' qui enregistre vos appels réels vers AWS et stocke les résultats dans un répertoire que vous pouvez ensuite utiliser pour tester. – eagle
Je teste généralement le script de déploiement pour déployer des tâches sur l'instance t2.nano/micro. Ijust échanger l'instance t2 avec l'instance réelle pour la production – mootmoot