Validação no banco - raialmeida/mindqa-db-commons GitHub Wiki
Validação no banco
Embora o exemplo use RestAssured, a biblioteca é independente de framework e pode ser usada em qualquer automação de testes com Java 17 ou superior. Ela funciona com JUnit, TestNG, Cucumber, Selenium, Playwright para Java ou uma suíte própria, desde que o projeto tenha acesso ao banco configurado. Pode validar dados antes ou depois de uma ação realizada por qualquer ferramenta.
RestAssured
Depois de enviar um POST, capture o ID retornado e consulte o banco. O exemplo pressupõe uma API local que recebe nome e email e conclui a gravação antes de responder.
import io.mindqa.database.DatabaseService;
import io.restassured.http.ContentType;
import java.util.List;
import java.util.Map;
import static io.restassured.RestAssured.given;
import static org.junit.jupiter.api.Assertions.assertEquals;
String email = "[email protected]";
Map<String, String> payload = Map.of("nome", "Cliente QA", "email", email);
String id = given().baseUri("http://localhost:8080")
.contentType(ContentType.JSON).body(payload)
.when().post("/clientes")
.then().statusCode(201).extract().path("id");
List<Map<String, Object>> rows = DatabaseService.select(
"SELECT nome, email FROM clientes WHERE id = ?", id);
assertEquals(1, rows.size());
assertEquals(email, rows.get(0).get("email"));
GET com dados preparados pelo teste
Também é possível inserir um registro no banco, chamar a API e validar o retorno.
O exemplo pressupõe GET /clientes/{id} retornando id, nome e email:
import io.mindqa.database.DatabaseService;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.UUID;
import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.jupiter.api.Assertions.assertEquals;
class ConsultaClienteTest {
private final String id = UUID.randomUUID().toString();
@Test
void deveConsultarClienteAtualizado() {
String email = "qa-" + id + "@example.com";
assertEquals(1, DatabaseService.execute(
"INSERT INTO clientes (id, nome, email) VALUES (?, ?, ?)",
id, "Cliente inicial", email));
assertEquals(1, DatabaseService.execute(
"UPDATE clientes SET nome = ? WHERE id = ?", "Cliente atualizado", id));
given()
.baseUri("http://localhost:8080")
.pathParam("id", id)
.when()
.get("/clientes/{id}")
.then()
.statusCode(200)
.body("id", equalTo(id))
.body("nome", equalTo("Cliente atualizado"))
.body("email", equalTo(email));
}
@AfterEach
void limparCadastro() {
DatabaseService.execute("DELETE FROM clientes WHERE id = ?", id);
}
}
Como uma asserção com falha interrompe o método de teste, faça a limpeza em um
@AfterEach, @AfterAll ou outro mecanismo de teardown adequado à sua suíte. A
conexão deve apontar para o destino onde o dado que será validado foi persistido,
como a base usada pela API ou uma réplica quando esse for o objetivo do teste.
Outros contextos de automação
Em um teste JUnit, use os mesmos métodos diretamente. Com TestNG, adapte as anotações e as asserções ao framework. Nos fragmentos seguintes, os IDs e os dados esperados vêm da preparação ou da ação executada pelo teste:
import io.mindqa.database.DatabaseService;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
@Test
void deveValidarCadastroPersistido() {
List<Map<String, Object>> rows = DatabaseService.select(
"SELECT status FROM pedidos WHERE id = ?", pedidoId);
assertEquals(1, rows.size());
assertEquals("PROCESSADO", rows.get(0).get("status"));
}
Em um step do Cucumber, a consulta pode validar o efeito de uma ação executada no step anterior:
import io.cucumber.java.pt.Então;
import io.mindqa.database.DatabaseService;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
@Então("o pedido deve estar processado no banco")
public void pedidoDeveEstarProcessado() {
List<Map<String, Object>> rows = DatabaseService.select(
"SELECT status FROM pedidos WHERE id = ?", pedidoId);
assertEquals(1, rows.size());
assertEquals("PROCESSADO", rows.get(0).get("status"));
}
Em uma automação de interface com Selenium ou outra ferramenta, execute a consulta depois de submeter o formulário e valide os dados persistidos:
import io.mindqa.database.DatabaseService;
import org.openqa.selenium.By;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
driver.findElement(By.id("salvar")).click();
List<Map<String, Object>> rows = DatabaseService.select(
"SELECT email FROM clientes WHERE id = ?", clienteId);
assertEquals(1, rows.size());
assertEquals(emailEsperado, rows.get(0).get("email"));
O fluxo pode ser adaptado para testes de API, interface, integração, contrato ou end-to-end.
RestAssured, Selenium, Cucumber e o framework de asserção continuam
sendo dependências do projeto de automação; mindqa-db-commons fornece somente a
configuração e a execução JDBC.