Testovanie je neoddeliteľnou súčasťou procesu vývoja. A niekedy musia vývojári pred vykonaním zmien vykonať testy lokálne.
Ak aplikácia používa Amazon Web Services, krajta библиотека moto ideálne na to.
Môžete si pozrieť úplný zoznam pokrytia zdrojov
Na Githube je repka Hugo Picado -
No, to sa dá celkom ľahko opraviť.
Pretože pri spustení musíte zadať typ služby (ca. premenná MOTO_SERVICE), musíme len opísať vytvorenie zdroja.
Poďme to trochu zmeniť štart.sh:
Namiesto toho
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
Vložiť:
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
Konečný súbor je:
štart.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
Vytvoríme nový imidž a vložíme ho do nášho registra.
Ďalej si napíšme napríklad inicializačný skript zdroja doména SWF, pomocou knižnice na prácu s 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'
Logika je takáto:
- Pri spustení pripojíme náš skript /opt/init/bootstrap.py.
- Ak je súbor pripojený, vykoná sa.
- Ak neexistuje žiadny súbor, jednoducho sa spustí holý moto-server.
A môžete zosmiešniť celý zdroj spustením jedného kontajnera:
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
Skúsme to interaktívne:
Funguje to!
Takže môžeme vytvoriť docker-compose.yml, čo ušetrí čas pri testovaní zmien:
prístavný robotník-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
V skutočnosti sa tento prístup dá použiť nielen na notebooku vývojára. Predbežné testy s modelmi po zostavení pomôžu zbaviť sa možných problémov pri spustení v prostrediach dev*.
odkazy:
Motocker repo -
Moto repo -
Boto3 Docs -
Zdroj: hab.com