You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当前从Moto中获取SESBackend对象的正确方法是什么?

如何更简洁地访问Moto的SESBackend对象?

我需要访问Moto的mock_ses库背后的SESBackend对象,用来检查发送的邮件是否具备正确属性。但Moto的SES文档只展示了基础的装饰器包裹语法。

我已经有可运行的实现,但感觉太繁琐,肯定有更优方案:

import pytest
import boto3    
from moto import mock_ses
from moto.core.utils import AccountSpecificBackend
from moto.ses.models import SESBackend

# **************************************
# *** Is this code really necessary? ***
# **************************************
def get_ses_backend(ses_object) -> SESBackend:
    for key, value in ses_object.backends.items():
        if isinstance(value, AccountSpecificBackend):
            return value['global']

def test_my_email_function():
    with mock_ses() as ses_object:
        ses_conn = boto3.client("ses", region_name='eu-west-2')

        backend = get_ses_backend(ses_object)

        # 执行邮件发送逻辑...

        assert len(backend.sent_messages) == 1

优化方案(针对Moto 4.0.1版本)

你写的遍历函数完全可以省去,Moto提供了更直接的方式获取SESBackend:

方式一:通过mock实例直接获取

利用Moto默认的AWS测试账户ID(123456789012)和SES的全局服务特性,直接从mock对象的backends字典取值:

import pytest
import boto3    
from moto import mock_ses
from moto.ses.models import SESBackend

def test_my_email_function():
    with mock_ses() as ses_object:
        ses_conn = boto3.client("ses", region_name='eu-west-2')

        # 直接获取默认账户的全局SES后端
        backend = ses_object.backends["123456789012"]["global"]

        # 执行邮件发送逻辑...

        assert len(backend.sent_messages) == 1

方式二:导入全局后端字典

Moto会维护一个全局的ses_backends字典,直接导入后即可获取目标实例:

import pytest
import boto3    
from moto import mock_ses
from moto.ses.models import ses_backends

def test_my_email_function():
    with mock_ses():
        ses_conn = boto3.client("ses", region_name='eu-west-2')

        # 从全局后端字典获取默认账户的实例
        backend = ses_backends["123456789012"]["global"]

        # 执行邮件发送逻辑...

        assert len(backend.sent_messages) == 1

说明

  • Moto默认使用的测试账户ID是123456789012,如果你的测试使用了自定义账户ID,替换掉这个值即可。
  • SES是AWS全局服务,所以对应的区域键固定为global,不用指定具体地区。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:50:26