This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
# Executar todos os testes
./gradlew test
# Limpar build anterior e executar
./gradlew clean test
# Executar cenários por tag
./gradlew test -Dcucumber.filter.tags="@smoke"
./gradlew test -Dcucumber.filter.tags="@usuarios and not @negativo"Framework de testes de API REST com BDD contra https://serverest.dev. Os cenários são escritos em Gherkin (.feature), mapeados para Java via Cucumber 7, e executados pelo JUnit Platform.
CucumberRunner → features/*.feature → steps/*Steps.java → REST Assured → serverest.dev
↑ ↑
utils/BaseAPI.java ScenarioContext.java
(@Before: carrega (estado compartilhado
config.properties) via PicoContainer)
O projeto usa PicoContainer (cucumber-picocontainer) para injeção de dependência. ScenarioContext é instanciado uma vez por cenário e injetado via construtor em todas as classes de steps que precisam de estado compartilhado (response da última requisição, token de auth, ID criado, credenciais do usuário).
Toda classe de steps que precise de estado declara o construtor:
public class MinhaSteps {
private final ScenarioContext context;
public MinhaSteps(ScenarioContext context) { this.context = context; }
}Toda a configuração do engine fica em src/test/resources/junit-platform.properties:
cucumber.glue=dev.serverest- pacote raiz onde o Cucumber procura steps e hookscucumber.plugin- Allure + pretty para output no terminal
O CucumberRunner declara apenas o engine e o classpath das features. Não deve conter @ConfigurationParameter - conflitaria com o properties file.
runners/-CucumberRunnersteps/- uma classe por recurso de API;CommonStepscontém os steps de validação reutilizados (o status code deve ser,o campo X deve conter Y)utils/-BaseAPI(hook@Before) eScenarioContext(estado do cenário)models/- POJOs com Lombok (@Data @NoArgsConstructor @AllArgsConstructor) e anotações Jackson (@JsonInclude(NON_NULL),@JsonProperty)constants/-ApiEndpointseApiMessagescom as strings fixas da APIfactories/-UserDataFactoryeProductDataFactoryusando javafaker para dados dinâmicos
- Nomes de métodos nas step definitions em inglês, camelCase. O texto da anotação é o contrato com o Gherkin.
- URL base nunca hardcoded: sempre via
src/test/resources/config.properties(base.url). - Campos nulos são excluídos do JSON serializado via
@JsonInclude(NON_NULL)nos models - necessário para steps como "login sem informar o email", onde o campo simplesmente não aparece no payload. - Relatórios Allure gerados em
allure-results/via pluginallure-cucumber7-jvm.
- Criar o cenário em
src/test/resources/features/<recurso>.feature - Criar a step definition em
src/test/java/dev/serverest/steps/<Recurso>Steps.javacomScenarioContextinjetado no construtor - Steps de validação genéricos (
status code,campo X) já existem emCommonSteps- reutilizar antes de criar novos - Nenhuma alteração no runner ou no properties file é necessária
notes/ contém anotações sobre BDD e as ferramentas do projeto. Ao criar novos arquivos .md nessa pasta, usar o template em .github/NOTE_TEMPLATE.md. O índice das notas está em notes/README.md.