Python 3.x ecs的moto测试

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

我有一个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 " + 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我认为你是对的,将错误指向我,让我修复它并再次测试。快回去吧,这很有效。