Python 3.x ecs的moto测试
我有一个python方法,它使用boto3 get_paginator根据一些标记和一些名称列出某些ECS Fargate服务Python 3.x ecs的moto测试,python-3.x,boto3,moto,Python 3.x,Boto3,Moto,我有一个python方法,它使用boto3 get_paginator根据一些标记和一些名称列出某些ECS Fargate服务 def list_service_name(environment, resource_owner_name, ecs_client): list_of_service = list() cluster_name = "my cluster name &qu
def list_service_name(environment,
resource_owner_name,
ecs_client):
list_of_service = list()
cluster_name = "my cluster name " + environment
target_string = "-somedummy"
resource_owner_tag = resource_owner_name
service_paginator = ecs_client.get_paginator('list_services')
for page in service_paginator.paginate(cluster=cluster_name,
launchType='FARGATE'):
for service in page['serviceArns']:
response = ecs_client.list_tags_for_resource(resourceArn=service)
for tags in response['tags']:
if tags['key'] == 'ResourceOwner' and \
tags['value'] == resource_owner_tag and \
service.endswith(target_string):
list_of_service.append(service)
return list_of_service
现在我想用moto测试一下。
因此,我创建了conftest.py
,在这里我定义了与ecs等服务的所有moto模拟连接。此外,我还创建了test_main.py
文件,如下所示,我在其中创建了连接到ECS Fargate的虚拟服务。但出于某种原因,如果我试图在测试文件中断言main方法的结果,服务列表将返回empty
。然而,我希望看到测试服务的成功
。是否有我遗漏的内容或moto中的分页仍然不可用
from my_code.main import *
@pytest.fixture
def env_name():
return "local"
@pytest.fixture
def cluster_name(env_name):
return "my dummy" + env_name + "cluster_name"
@pytest.fixture
def successful_service_name():
return "test-service-for-successful"
@pytest.fixture
def un_successful_service_name():
return "test-service-for-un-successful"
@pytest.fixture
def resource_owner():
return "dummy_tag"
@pytest.fixture
def test_create_service(ecs_client,
cluster_name,
successful_service_name,
un_successful_service_name,
resource_owner):
_ = ecs_client.create_cluster(clusterName=cluster_name)
_ = ecs_client.register_task_definition(
family="test_ecs_task",
containerDefinitions=[
{
"name": "hello_world",
"image": "docker/hello-world:latest",
"cpu": 1024,
"memory": 400,
"essential": True,
"environment": [
{"name": "environment", "value": "local"}
],
"logConfiguration": {"logDriver": "json-file"},
}
],
)
ecs_client.create_service(
cluster=cluster_name,
serviceName=successful_service_name,
taskDefinition="test_ecs_task",
desiredCount=0,
launchType="FARGATE",
tags=[{"key": "resource_owner", "value": resource_owner}]
)
ecs_client.create_service(
cluster=cluster_name,
serviceName=un_successful_service_name,
taskDefinition="test_ecs_task",
desiredCount=0,
launchType="FARGATE",
tags=[{"key": "resource_owner", "value": resource_owner}]
)
yield
def test_list_service_name(env_name,
resource_owner,
ecs_client):
objects = list_service_name(env_name,
resource_owner,
ecs_client)
# here object is []
# Where as I should see successful_service_name
“列表\服务\名称”中使用的clustername错误(我的\群集\名称\本地与我的\虚拟\本地\群集\名称)。标记键也错误(resource_owner vs ResourceOwner)。最后,“target_string”应该有值“_successful”(如果你不想得到_successful服务)@BertBlommers我认为你是对的,将错误指向我,让我修复它并再次测试。快回去吧,这很有效。