1 Pregunta: monkeypatching boto3 s3 llamada en pytest

pregunta creada en Wed, Apr 10, 2019 12:00 AM

Quiero probar la función save_doc utilizando pytest y simular la llamada a continuación

    boto3.resource('s3').Object(bucket_name, key).put(Body=json.dumps(body))

Estoy tratando de averiguar cómo puedo usar el decorador "parche" para burlarme de esta llamada. ¿Hay algún ejemplo /indicador que pueda ver?

def save_doc(doc_id, body):

    bucket_name = os.environ['bucket_name']
    key = '{}{}.json'.format(os.environ['key'], doc_id)

    boto3.resource('s3').Object(bucket_name, key).put(Body=json.dumps(body))
    
0
  1. El paquete Moto parece ser una buena opción para este caso de uso - github.com/spulec/moto
    2019-04-10 02: 18: 24Z
1 Respuestas                              1                         

El siguiente caso de prueba funciona para el escenario publicado en las preguntas

@mock_s3
def test_save_doc(doc_id, body):
    bucket_name = os.environ['bucket_name']
    key = os.environ['key']
    conn = boto3.resource('s3', region_name='us-east-1')
    conn.create_bucket(Bucket=bucket_name)
    save_doc(doc_id, body)
    response = conn.Object(bucket_name, key).get()['Body'].read().decode("utf-8")
    assert body == response
    
0
2019-04-10 02: 53: 01Z
fuente colocada aquí