Testimine on arendamisprotsessi lahutamatu osa. Ja mõnikord peavad arendajad testima kohaliku tasemega enne muudatuste commitimist.
Kui rakendus kasutab Amazon Web Services, python raamatukogu moto sobib sellele ideaalselt.

Kogu ressursside katvuse nimekirja saab vaadata .
Githubis on repo Hugo Picado — . Valmis pilt, käivita ja kasuta. Ainult detail on see, et pärast käivitamist ei ole seal veel ühtegi AWS ressurssi loodud.
Noh, see on üsna lihtne parandada.
Kuna käivitamisel tuleb määrata teenuse tüüp (env muutuja MOTO_SERVICE), jääb meil üle ressursi loomise kirjeldamine.
Teeme natuke muudatust start.sh:
Asenda
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
Sisestame:
if [ -f /opt/init/bootstrap.py ]; then
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT & (sleep 5 && echo "Käivitame bootstrap skripti." && python /opt/init/bootstrap.py)
else
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
fi
wait
Lõplik fail on järgmine:
start.sh
#!/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
waitKogume uue pildi ja pushime oma registry'sse.
Seejärel kirjutame ressursi initsialiseerimise skripti, näiteks SWF domeen, kasutades AWS-i jaoks mõeldud raamatukogu - 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 domeen",
workflowExecutionRetentionPeriodInDays="10"
)
except ClientError as e:
print "Domeen eksisteerib juba: ", e.response.get("Error", {}).get("Code")
response = client.list_domains(
registrationStatus='REGISTERED',
maximumPageSize=123,
reverseOrder=True|False
)
print 'Valmis'
Loogika on järgmine:
- Kinnitatakse meie skript käivitamisel /opt/init/bootstrap.py.
- Kui fail on kinnitatud - see täidetakse.
- Kui faili pole - käivitub lihtsalt puhas moto-server.
Ja sellega saab terve ressursi takistada ühe konteineri käivitamisega:
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
Proovime interaktiivses režiimis:

Töötab!
Seega saame luua docker-compose.yml, mis aitab testimise muudatuste ajal aega kokku hoida:
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
Tegelikult ei saa sellist lähenemist kasutada ainult arendaja sülearvutil. Eelnevad testid mokeid kasutades pärast koostamist aitavad vabaneda võimalikest probleemidest dev* keskkondades.
Lingid:
Motocker repo —
Moto repo —
Boto3 Docs —
Allikas: habr.com
