Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Quando trabalhamos com testes de integração que envolvem serviços AWS simulados, uma das bibliotecas mais usadas é a moto, que fornece stubs para recursos como S3, DynamoDB, entre outros. No entanto, mudanças recentes na API dessa biblioteca podem pegar os desenvolvedores de surpresa, especialmente aqueles que já tinham scripts funcionando em versões anteriores.
Muitos times que utilizavam a abordagem direta de importar funções específicas, como 'mock_s3' do módulo 'moto', estão encontrando a seguinte exceção ao rodar seus testes após a atualização da biblioteca:
ImportError: cannot import name 'mock_s3' from 'moto'
Esse erro indica que a API da moto foi alterada, eliminando a possibilidade de importar funções específicas de mocks de serviços isolados. O código que antes funcionava, como:
from moto import mock_s3
@pytest.fixture(scope='module')
def s3():
with mock_s3():
os.environ['AWS_ACCESS_KEY_ID'] = 'test'
os.environ['AWS_SECRET_ACCESS_KEY'] = 'test'
os.environ['AWS_DEFAULT_REGION'] = 'us-east-1'
s3 = boto3.resource('s3')
s3.create_bucket(Bucket='test_bucket')
yield s3 Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
passou a gerar erro, pois a função 'mock_s3' foi removida ou substituída.
A versão 5.0 da moto trouxe uma alteração significativa na forma de aplicar mocks. Em versões anteriores, era comum importar funções específicas como 'mock_s3' e usá-las como decoradores ou context managers. Agora, toda essa funcionalidade foi consolidada em uma única função chamada 'mock_aws', que atua como decorador ou gerenciador de contexto. Essa mudança visa simplificar a API e evitar confusões. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Ao revisar o changelog oficial, é possível verificar que:
A solução prática é ajustar seus testes para usar 'mock_aws' do módulo 'moto'. Veja como fazer: Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
from moto import mock_aws
@pytest.fixture(scope='module')
def s3():
with mock_aws():
os.environ['AWS_ACCESS_KEY_ID'] = 'test'
os.environ['AWS_SECRET_ACCESS_KEY'] = 'test'
os.environ['AWS_DEFAULT_REGION'] = 'us-east-1'
s3 = boto3.resource('s3')
s3.create_bucket(Bucket='test_bucket')
yield s3 O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Note que agora, 'mock_aws' funciona como um gerenciador de contexto, encapsulando toda a configuração do mock. Essa mudança garante compatibilidade com a API atual e evita erros de importação. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Apesar de simplificar o uso, essa mudança requer atenção ao atualizar bibliotecas. O impacto maior é na refatoração de código legado, que precisa migrar de importações específicas para uma única função. Além disso, há uma pequena diferença na granularidade de controle — alguns desenvolvedores preferem mocks específicos por serviço, o que agora exige uma abordagem diferente ou uma customização adicional. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Outro ponto a considerar é a compatibilidade de versões: ao migrar para a nova API, é importante garantir que a versão da moto seja compatível com o restante do stack de testes e CI/CD. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
1. Atualize a dependência da moto para a versão 5.0 ou superior.
2. Substitua importações de funções específicas como 'mock_s3' por 'mock_aws'.
3. Envolva seu código de testes com 'with mock_aws()' ao invés de decoradores específicos.
4. Teste localmente e ajuste quaisquer configurações adicionais necessárias para sua infraestrutura de testes.
5. Verifique se há outros mocks específicos que também sofreram alterações na API.
A mudança na API da moto, embora possa gerar frustração inicialmente, traz uma abordagem mais limpa e unificada para mocks de serviços AWS. Para quem trabalha com testes automatizados, entender essas mudanças e adaptar o código rapidamente é fundamental para manter a confiabilidade e agilidade no desenvolvimento. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Se você já passou por essa transição, como foi o impacto na sua equipe? Existe alguma outra alternativa que vocês têm usado para facilitar esse tipo de mock em larga escala? O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Carregando comentários...