Testiranje je sestavni del razvojnega procesa. In včasih morajo razvijalci izvajati teste lokalno, preden potrdijo spremembe.
Če aplikacija uporablja Amazon Web Services, python библиотека moto kot nalašč za to.
Ogledate si lahko celoten seznam pokritosti virov
Na Githubu je repa Hugo Picado -
No, to je enostavno popraviti.
Ker morate ob zagonu določiti vrsto storitve (env spremenljivka MOTO_SERVIS), opisati moramo le ustvarjanje vira.
Spremenimo ga malo start.sh:
Namesto
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
Vstavi:
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
Končna datoteka je:
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
Izdelamo novo sliko in jo potisnemo v naš register.
Nato napišimo na primer skript za inicializacijo vira SWF domena, z uporabo knjižnice za delo z 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 naslednja:
- Ob zagonu priklopimo naš skript /opt/init/bootstrap.py.
- Če je datoteka nameščena, bo izvedena.
- Če datoteke ni, se bo goli moto-strežnik preprosto zagnal.
Poleg tega se lahko norčujete iz celotnega vira tako, da zaženete en vsebnik:
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
Poskusimo interaktivno:
Deluje!
Tako lahko naredimo docker-compose.yml, kar bo prihranilo čas pri testiranju sprememb:
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
Pravzaprav je ta pristop mogoče uporabiti ne samo na prenosnem računalniku razvijalca. Preliminarni preizkusi z lažnimi različicami po sestavljanju bodo pomagali odpraviti morebitne težave pri izvajanju v razvijalskih* okoljih.
Reference:
Motocker repo -
Moto repo -
Dokumenti Boto3 -
Vir: www.habr.com