测试是开发过程中不可或缺的一部分。 有时,开发人员需要在本地运行测试,直到提交更改为止。
如果应用程序使用
Amazon Web Services ,则
python moto库非常适合此操作。

可以在
此处找到资源覆盖范围的完整列表。
Github有一个
Hugo Picado萝卜
-moto服务器 。 准备好图像,运行并使用。 唯一的区别是,启动后,尚未在其中创建任何
AWS资源。
好吧,这很容易修复。
由于在启动时必须指定服务的类型(变量
MOTO_SERVICE的 env ),因此保留描述资源创建的工作。
让我们更改一下
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
得到的文件如下:
构建一个新映像并推送到您的注册表中。
接下来,我们使用该库编写用于AWS的资源初始化脚本,例如
SWF domain -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
实际上,不仅在开发人员的笔记本电脑上,您还可以使用这种方法。 组装后对mokas进行的初步测试将有助于消除在dev *环境上运行时可能出现的问题。
参考文献:
Motocker回购
-github.com/picadoh/motockerMoto回购
-github.com/spulec/motoBoto3文件
-boto3.amazonaws.com/v1/documentation/api/latest/index.html