Les tests font partie intégrante du processus de développement. Et parfois, les développeurs doivent exécuter des tests localement, jusqu'à ce que la modification soit validée.
Si l'application utilise
Amazon Web Services , la bibliothèque
moto python est idéale pour cela.

Une liste complète de la couverture des ressources peut être trouvée
ici .
Github a un navet
Hugo Picado -
moto-serveur . Image prête, exécutez et utilisez. La seule nuance est qu'après le lancement, aucune ressource
AWS n'y a encore été créée.
Eh bien, c'est assez facile à corriger.
Puisqu'au démarrage il faut préciser le type de service (
env de la variable
MOTO_SERVICE ), il nous reste à décrire la création de la ressource.
Modifions un peu
start.sh :
Au lieu de cela
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
Insérer:
if [ -f /opt/init/bootstrap.py ]; then moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT & (sleep 5 && echo "Executing bootstrap script." && python /opt/init/bootstrap.py) else moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT fi wait
Le fichier résultant est obtenu:
Créez une nouvelle image et insérez-la dans votre registre.
Ensuite, nous écrivons un script d'initialisation de ressource, par exemple, un
domaine SWF , en utilisant la bibliothèque pour travailler avec AWS - boto3:
bootstrap_swf.py import boto3 from botocore.exceptions import ClientError import os os.environ["AWS_ACCESS_KEY_ID"] = "fake" os.environ["AWS_SECRET_ACCESS_KEY"] = "fake" client = boto3.client('swf', region_name='us-west-2', endpoint_url='http://localhost:5000') try: client.register_domain( name='test-swf-mock-domain', description="Test SWF domain", workflowExecutionRetentionPeriodInDays="10" ) except ClientError as e: print "Domain already exists: ", e.response.get("Error", {}).get("Code") response = client.list_domains( registrationStatus='REGISTERED', maximumPageSize=123, reverseOrder=True|False ) print 'Ready'
La logique est la suivante:
- Montez au démarrage notre script dans /opt/init/bootstrap.py .
- Si le fichier est monté, il sera exécuté.
- S'il n'y a pas de fichier, le serveur moto nu démarrera simplement.
Et, vous pouvez tamponner une ressource entière en lançant un conteneur:
docker run --name swf -d \ -e MOTO_SERVICE=swf \ -e MOTO_HOST=0.0.0.0 \ -e MOTO_PORT=5000 \ -p 5001:5000 \ -v /tmp/bootstrap_swf.py:/opt/init/bootstrap.py \ -i awesome-repo.com/moto-server:latest
Nous essayons en mode interactif:

Ça marche!
Ainsi, nous pouvons créer docker-compose.yml, ce qui permettra de gagner du temps sur les tests de modifications:
docker-compose.yml version: '3' services: s3: image: picadoh/motocker environment: - MOTO_SERVICE=s3 - MOTO_HOST=10.0.1.2 ports: - "5002:5000" networks: motonet: ipv4_address: 10.0.1.2 volumes: - /tmp/bootstrap_s3.py:/opt/init/bootstrap.py swf: image: picadoh/motocker environment: - MOTO_SERVICE=swf - MOTO_HOST=10.0.1.3 ports: - "5001:5000" networks: motonet: ipv4_address: 10.0.1.3 volumes: - /tmp/bootstrap_swf.py:/opt/init/bootstrap.py ec2: image: picadoh/motocker environment: - MOTO_SERVICE=ec2 - MOTO_HOST=10.0.1.4 ports: - "5003:5000" networks: motonet: ipv4_address: 10.0.1.4 volumes: - /tmp/bootstrap_ec2.py:/opt/init/bootstrap.py networks: motonet: driver: bridge ipam: config: - subnet: 10.0.0.0/16
En fait, non seulement sur l'ordinateur portable du développeur, vous pouvez utiliser cette approche. Les tests préliminaires avec les mokas après l'assemblage aideront à se débarrasser des problèmes possibles lors de l'exécution sur des environnements dev *.
Références:
Dépôt Motocker -
github.com/picadoh/motockerDépôt de moto -
github.com/spulec/motoDocuments
Boto3 -
boto3.amazonaws.com/v1/documentation/api/latest/index.html