Test er en integreret del af udviklingsprocessen. Og nogle gange skal udviklere køre test lokalt, før de foretager ændringer.
Hvis applikationen bruger Amazon Web Services, python библиотека moto perfekt til dette.
En komplet liste over ressourcedækning kan ses
Der er en majroe på Github Hugo Picado —
Nå, det er nemt nok at ordne.
Siden du starter skal du angive typen af tjeneste (env variabel MOTO_SERVICE), skal vi blot beskrive oprettelsen af ressourcen.
Lad os ændre det lidt start.sh:
I stedet for
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
Indsæt:
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
Den endelige fil er:
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
wait
Vi bygger et nyt image og skubber det ind i vores registreringsdatabasen.
Lad os derefter skrive et ressourceinitialiseringsscript, for eksempel SWF domæne, ved at bruge biblioteket til at arbejde med 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'
Logikken er denne:
- Når vi starter, monterer vi vores script ind /opt/init/bootstrap.py.
- Hvis filen er monteret, vil den blive udført.
- Hvis der ikke er nogen fil, vil den blottede moto-server simpelthen starte.
Og du kan håne en hel ressource ved at starte en container:
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
Lad os prøve det interaktivt:
Det virker!
Så vi kan lave docker-compose.yml, hvilket vil spare tid ved at teste ændringer:
havnearbeider-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
Faktisk kan denne tilgang ikke kun bruges på en udviklers bærbare computer. Foreløbige tests med mocks efter montering vil hjælpe med at slippe af med mulige problemer, når de kører på dev*-miljøer.
referencer:
Motocker repo -
Moto repo -
Boto3 Docs -
Kilde: www.habr.com