تست بخشی جدایی ناپذیر از فرآیند توسعه است. و گاهی اوقات توسعه دهندگان باید قبل از انجام تغییرات، تست ها را به صورت محلی اجرا کنند.
اگر برنامه استفاده می کند آمازون خدمات وب, پایتون کتابخانه موتور مناسب برای این
فهرست کاملی از پوشش منابع قابل مشاهده است
یک شلغم در Github وجود دارد هوگو پیکادو -
خوب، این به اندازه کافی آسان برای تعمیر است.
از آنجایی که هنگام شروع باید نوع سرویس را مشخص کنید (env متغیر MOTO_SERVICE، فقط باید نحوه ایجاد منبع را شرح دهیم.
بیایید کمی آن را تغییر دهیم شروع.ش:
به جای
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
ما یک تصویر جدید می سازیم و آن را وارد رجیستری می کنیم.
در مرحله بعد، برای مثال، اجازه دهید یک اسکریپت مقداردهی اولیه منابع بنویسیم دامنه SWF، با استفاده از کتابخانه برای کار با 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'
منطق این است:
- هنگام شروع، ما اسکریپت خود را در آن نصب می کنیم /opt/init/bootstrap.py.
- اگر فایل نصب شده باشد، اجرا می شود.
- اگر فایلی وجود نداشته باشد، سرور موتو برهنه به سادگی شروع به کار می کند.
و می توانید با راه اندازی یک کانتینر کل یک منبع را مسخره کنید:
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
بیایید آن را به صورت تعاملی امتحان کنیم:
این کار می کند
بنابراین ما میتوانیم docker-compose.yml را بسازیم، که باعث صرفهجویی در زمان تغییرات آزمایشی میشود:
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
در واقع، این رویکرد می تواند نه تنها در لپ تاپ یک توسعه دهنده استفاده شود. آزمایشهای اولیه با ماک پس از مونتاژ به خلاص شدن از شر مشکلات احتمالی هنگام اجرا در محیطهای dev* کمک میکند.
لینک ها:
مخزن موتور -
مخزن موتور -
Boto3 Docs -
منبع: www.habr.com