يعد الاختبار جزءًا لا يتجزأ من عملية التطوير. وفي بعض الأحيان يحتاج المطورون إلى إجراء اختبارات محليًا، قبل إجراء التغييرات.
إذا كان التطبيق يستخدم أمازون ويب سيرفيسز, الثعبان библиотека دراجة نارية مثالي لهذا.
يمكن الاطلاع على قائمة كاملة لتغطية الموارد
هناك اللفت على جيثب هوجو بيكادو -
حسنا، هذا سهل بما فيه الكفاية لإصلاحه.
لأنه عند البدء تحتاج إلى تحديد نوع الخدمة (الحياة الفطرية عامل خدمة MOTO_SERVICE)، علينا فقط وصف إنشاء المورد.
دعونا نغيرها قليلا start.sh:
بدلا من
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
الملف النهائي هو :
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
نحن نبني صورة جديدة وندفعها إلى سجلنا.
بعد ذلك، لنكتب نصًا برمجيًا لتهيئة الموارد، على سبيل المثال مجال 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.
- إذا تم تحميل الملف، سيتم تنفيذه.
- إذا لم يكن هناك ملف، فسيبدأ خادم Moto العاري ببساطة.
ويمكنك الاستهزاء بمورد بأكمله عن طريق تشغيل حاوية واحدة:
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، مما سيوفر الوقت في اختبار التغييرات:
عامل ميناء-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
في الواقع، يمكن استخدام هذا الأسلوب ليس فقط على الكمبيوتر المحمول الخاص بالمطور. ستساعد الاختبارات الأولية مع النماذج بعد التجميع في التخلص من المشكلات المحتملة عند التشغيل على بيئات التطوير*.
المراجع:
موتوكر ريبو -
موتو الريبو -
مستندات Boto3 -
المصدر: www.habr.com