Neste artigo, reuni algumas dicas úteis sobre o uso de garantia REST, uma das bibliotecas Java mais comuns para automatizar o teste da API REST.
Todos os exemplos são vitais, eles são coletados da minha prática de realizar revisão de código em mais de 50 projetos com testes automáticos.
Leve os pontos finais para um local separado
Parece que isso é óbvio. Mas não, muitas vezes você precisa ver código com pontos finais codificados na solicitação.
É melhor colocar pontos finais nas constantes estáticas da classe final. Ao mesmo tempo, a "interface constante" antipadrão deve ser evitada - isso é uma prática ruim.
Não esqueça que a garantia REST permite criar parâmetros de caminho, por exemplo:
public final class EndPoints { public static final String users = "/users/{id}"; ... } given().pathParams("id", someId).get(EndPoints.users)...;
Além disso, se em muitas consultas você usar o mesmo caminho base, será uma boa prática colocá-lo em uma constante de hotel e passá-lo para basePath, por exemplo:
O mesmo se aplica ao host e à porta do aplicativo em teste.
ContentType / Accept
Esses cabeçalhos são usados em quase todas as solicitações HTTP. Os autores garantidos pelo REST, percebendo isso, tornaram possível instalá-los chamando métodos especiais:
É uma boa prática definir esses cabeçalhos em uma especificação ou globalmente. Isso aumentará a legibilidade do seu código.
StatusCode etc.
A garantia REST fornece sintaxe conveniente para verificar cada componente da resposta HTTP, mas na prática você continua a encontrar código semelhante:
Use especificações
A duplicação de código está incorreta. Use especificações para reduzir a duplicação. Na garantia REST, você pode criar especificações para solicitação e resposta. Na especificação da solicitação, colocamos tudo o que pode ser duplicado nas solicitações.
RequestSpecification requestSpec = new RequestSpecBuilder() .setBaseUri("http://localhost") .setPort(8080) .setAccept(ContentType.JSON) .setContentType(ContentType.ANY) ... .log(LogDetail.ALL) .build();
Na especificação da resposta, fazemos todas as verificações duplicadas de solicitação para solicitação.
ResponseSpecification responseSpec = new ResponseSpecBuilder() .expectStatusCode(200) .expectBody(containsString("success")) .build();
Você pode criar várias especificações para diferentes tipos de solicitações / respostas e usá-las na situação certa.
Não escreva suas muletas para transformar objetos
Você não deve converter seus POJOs em JSON usando o Jackson ObjectMapper e depois transferir a cadeia resultante para o corpo da solicitação. O REST-assegurado faz um ótimo trabalho nisso. Para isso, o mesmo Jackson ou Gson é usado, dependendo do que está no caminho de classe. JAXB é usado para converter em XML. O formato original é determinado automaticamente pelo valor do tipo de conteúdo.
given().contentType(ContentType.JSON).body(somePojo) .when().post(EndPoints.add) .then() .statusCode(201);
Além disso, a garantia REST faz um ótimo trabalho de conversão do HashMap para JSON e vice-versa.
Aproveite o poder do Groovy
A própria biblioteca garantida por REST é escrita no Groovy e permite aplicar vários métodos do Groovy à resposta JSON / XML recebida. Por exemplo:
O uso de métodos do Groovy pode reduzir bastante a quantidade de código que você escreve para encontrar o valor necessário da resposta.
Isso é tudo, se você tiver mais dicas e exemplos, escreva-os nos comentários.