Η δοκιμή είναι αναπόσπαστο μέρος της διαδικασίας ανάπτυξης. Και μερικές φορές οι προγραμματιστές πρέπει να εκτελούν δοκιμές τοπικά, πριν πραγματοποιήσουν αλλαγές.
Εάν η εφαρμογή χρησιμοποιεί Amazon υπηρεσίες Web, Πύθων библиотека μοτοποδηλάτων τέλειο για αυτό.
Μπορείτε να δείτε μια πλήρη λίστα κάλυψης πόρων
Υπάρχει ένα γογγύλι στο Github Ούγκο Πικάδο -
Λοιπόν, αυτό είναι αρκετά εύκολο να διορθωθεί.
Επειδή κατά την εκκίνηση πρέπει να καθορίσετε τον τύπο της υπηρεσίας (env μεταβλητός MOTO_SERVICE), πρέπει απλώς να περιγράψουμε τη δημιουργία του πόρου.
Ας το αλλάξουμε λίγο εκκίνηση.σ:
Αντί για
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
Εισάγετε:
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
Το τελικό αρχείο είναι:
εκκίνηση.σ
#!/bin/sh
# validate required input
if [ -z "$MOTO_SERVICE" ]; then
echo "Please define AWS service to run with Moto Server (e.g. s3, ec2, etc)"
exit 1
fi
# setting defaults for optional input
if [ -z "$MOTO_HOST" ]; then
MOTO_HOST="0.0.0.0"
fi
if [ -z "$MOTO_PORT" ]; then
MOTO_PORT="5000"
fi
echo "Starting service $MOTO_SERVICE at $MOTO_HOST:$MOTO_PORT"
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
# Prevent container from exiting when bootstrap.py finishing
wait
Δημιουργούμε μια νέα εικόνα και την εισάγουμε στο μητρώο μας.
Στη συνέχεια, ας γράψουμε, για παράδειγμα, ένα σενάριο προετοιμασίας πόρων Τομέας SWF, χρησιμοποιώντας τη βιβλιοθήκη για εργασία με 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'
Η λογική είναι η εξής:
- Κατά την εκκίνηση, προσαρτούμε το σενάριό μας /opt/init/bootstrap.py.
- Εάν το αρχείο είναι προσαρτημένο, θα εκτελεστεί.
- Εάν δεν υπάρχει αρχείο, ο γυμνός διακομιστής moto θα ξεκινήσει απλώς.
Και, μπορείτε να κοροϊδέψετε έναν ολόκληρο πόρο εκκινώντας ένα κοντέινερ:
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
Ας το δοκιμάσουμε διαδραστικά:
Λειτουργεί!
Έτσι, μπορούμε να δημιουργήσουμε το docker-compose.yml, το οποίο θα εξοικονομήσει χρόνο στις αλλαγές δοκιμής:
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
Στην πραγματικότητα, αυτή η προσέγγιση μπορεί να χρησιμοποιηθεί όχι μόνο σε φορητό υπολογιστή προγραμματιστή. Οι προκαταρκτικές δοκιμές με μακέτες μετά τη συναρμολόγηση θα σας βοηθήσουν να απαλλαγείτε από πιθανά προβλήματα κατά την εκτέλεση σε περιβάλλοντα dev*.
Βιβλιογραφικές αναφορές:
Repo Motocker -
Moto repo -
Έγγραφα Boto3 -
Πηγή: www.habr.com