Тестирање је саставни део процеса развоја. А понекад програмери морају да покрећу тестове локално, пре него што унесу промене.
Ако апликација користи Амазон Веб Сервицес, питон библиотека Мото савршено за ово.

Може се видети комплетна листа покривености ресурса .
На Гитхуб-у постоји репа Хуго Пицадо - . Спремна слика, покретање и употреба. Једина нијанса је да након лансирања, не АВС ресурси тамо још нису створени.
Па, то је довољно лако поправити.
Пошто приликом покретања потребно је да наведете врсту услуге (енв променљива МОТО_СЕРВИЦЕ), морамо само да опишемо креирање ресурса.
Хајде да то мало променимо старт.сх:
Уместо
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $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
wait
Коначна датотека је:
старт.сх
#!/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Правимо нову слику и гурамо је у наш регистар.
Затим, хајде да напишемо скрипту за иницијализацију ресурса, на пример СВФ домен, користећи библиотеку за рад са АВС - бото3:
боотстрап_свф.пи
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'
Логика је следећа:
- Када почињемо, монтирамо нашу скрипту /опт/инит/боотстрап.пи.
- Ако је датотека монтирана, биће извршена.
- Ако нема датотеке, голи мото-сервер ће се једноставно покренути.
И можете се ругати читавом ресурсу покретањем једног контејнера:
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
Хајде да пробамо интерактивно:

Ради!
Тако можемо да направимо доцкер-цомпосе.имл, што ће уштедети време приликом тестирања промена:
доцкер-цомпосе.имл
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
У ствари, овај приступ се може користити не само на лаптопу програмера. Прелиминарни тестови са имитацијама након склапања ће помоћи да се решите могућих проблема при покретању у дев* окружењима.
Референце:
Мотоцкер репо -
Мото репо -
Бото3 документи -
Извор: ввв.хабр.цом
