[Python] Mock response di un api server esterno

Marco Giusti marco.giusti a posteo.de
Sab 24 Set 2016 14:43:25 CEST


On Sat, Sep 24 2016, Karim wrote:
>2016-09-22 16:55 GMT+10:00 Karim <lemieliste a gmail.com>:
>
>> Salve lista, voglio creare un sistema per testare delle funzioni che fanno
>> delle chiamate ad un server api.
>>
>>
>Mi rispondo da solo.
>
>Sto creando un sistema di classi che tramite una fixture json e' possibile
>simulare gli endpoints creando la situazione che si vuole emulare.​

Ho avuto la stessa necessità ed sono arrivato a due implementazioni
differenti. Entrambe usano la, secondo il mio modesto parere, ottima
`responses` poiché usavo `requestes`.

Nel primo caso ho cercato di emulare le risposte del server ricreando,
in piccolo e approssimativamente, il servizio web. Trovo che questa
soluzione sia la più macchinosa e flessibile. Il problema maggiore è che
l'affidabilità dei test è tanto maggiore, quanto è fedele la tua
implementazione al servizio.

La seconda soluzione è esattamente la stessa alla quale sei arrivato tu.
Mi sono creato un "database" con le fixture e di volta in volta andavo a
pescare quella necessarie. Questa soluzione è piuttosto potente ma
presenta delle limitazioni. Ne cito due, una dipendente da `responses` e
l'altra indipendente dalla libreria che utilizzi.

La prima è che `responses` non fà match né sugli header, né sul body.
Questo è un peccato perché per esempio per testare l'autenticazione era
necessario crearsi un secondo mock. La seconda limitazione è che le
richieste devono essere idempotenti, ed questa sembrava essere piuttosto
noiosa. Immagino che una possibile sia creare un qualcosa di ibrido.

Ciao
Marco


Maggiori informazioni sulla lista Python