Testiranje je sastavni dio razvojnog procesa. A ponekad programeri moraju pokrenuti testove lokalno, prije nego što izvrše izmjene.
Ako aplikacija koristi Amazon Web Services, piton библиотека moto savršeno za ovo.
Potpuni popis pokrivenosti resursa može se vidjeti
Ima repa na Githubu Hugo Picado -
Pa, to je dovoljno lako popraviti.
Budući da prilikom pokretanja morate navesti vrstu usluge (eNV promjenjivo MOTO_SERVIS), moramo samo opisati stvaranje izvora.
Promijenimo to malo početak.sh:
Umjesto
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
Umetnuti:
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
Konačna datoteka je:
početak.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
Gradimo novu sliku i guramo je u naš registar.
Zatim, napišimo, na primjer, skriptu za inicijalizaciju resursa SWF domena, koristeći biblioteku za rad 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 sljedeća:
- Prilikom pokretanja montiramo našu skriptu /opt/init/bootstrap.py.
- Ako je datoteka montirana, bit će izvršena.
- Ako nema datoteke, goli moto-poslužitelj će se jednostavno pokrenuti.
I možete ismijavati cijeli resurs pokretanjem jednog spremnika:
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
Pokušajmo interaktivno:
Djeluje!
Dakle, možemo napraviti docker-compose.yml, što će uštedjeti vrijeme testiranja promjena:
doker-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
Zapravo, ovaj se pristup može koristiti ne samo na prijenosnom računalu programera. Preliminarni testovi s mockovima nakon sklapanja pomoći će vam da se riješite mogućih problema pri radu u dev* okruženjima.
reference:
Motocker repo -
Moto repo -
Boto3 dokumenti -
Izvor: www.habr.com