Testes de API com Python



  • Vou começar a automatizar os testes de API da empresa usando Python e Py.test mas queria saber se alguém conhece algum projeto no github aonde mostre uma boa estrutura pra montar os testes (por exemplo, usando page object).

    Qualquer material sobre testes de api é bem vindo também





  • Sergio… por que você precisa de page objects para testar API?

    Eu acho que vc precisa de fixtures e models com a estrutura de dados e exemplos dos requests que vc tem que fazer para não ter que ficar se repetindo nos seus casos de teste.

    Da uma olhadinha no factoryboy :)

    https://github.com/pytest-dev/pytest-factoryboy

    http://factoryboy.readthedocs.io/en/latest/

    https://github.com/bertonha/factory-boy-rest (sem documentação… eu acho que tenho algum exemplo de implementação em algum lugar… vou procurar e se achar eu posto aqui)



  • Quando vc diz PageObject em teste de API, acredito que vc esteja se referindo ao que chamamos de Contrato de API.

    Tenho um projeto básico no git de uma talk que fiz que talvez possa te dar um norte não é python e sim JS, mas o conceito é o mesmo…

    https://github.com/eduardocini/api_test

    Qlq dúvida só falar…



  • Obrigado pessoal, e voces indicam algum material para aprender o que verificar em um teste de API?

    Exemplo: Eu tenho um endpoint GET que retorna milhares de informações e campos. O que exatamente deve ser verificado dentre esses milhares de valores que retornam?



  • Sergio… você precisa primeiro parar e pensar o que vc quer / precisa testar para depois pensar em como testar.

    Se vc tem esse endpoint com milhares de inf. e campos, o que faz sentido verificar para que vc garanta que o cenário que vc escreveu esteja correto?

    :)



  • Obrigado pela resposta @Leonardo-Galani. Ainda seguindo nessa linha de “o que verificar”: Quando uma API retorna valores randomicos em cada chamada, vale a pena fazer um assert nesses valores ou devemos apenas verificar suas properties?

    Se um json retorna valores randomicos toda hora, como verificar esses valores?



  • Até onde vai esse valor randomico? Você precisa validar ele? Ele faz parte da regra de negócio? Você tem como prever esse fator que deixar o valor “randomico” ?

    Tipo… ou te mostrar um exemplo.

    Imagina um endpoint que retorne nome de bebes para mães indecisas… O nome é randomico mas com certas propriedades ligadas ( pode ser respostas a certos gostos da mãe) pode retornar um subset menor de nomes…

    Você pode testar se a propriedade nome consta no response.body e se essa propropriedade que está sendo retornado é uma string, não nulo, e sem números.

    Se você tiver acesso ao subset de nomes de acordo com certas opções demarcadas… você pode verificar se o nome recebido está dentro do array de possiveis nomes…

    Também é legal verificar o status code do response antes de qualquer coisa, para evitar fazer assert em objeto vazio.