Grupos em TestNG

โšก Resumo Inteligente

Grupos em TestNG Permite marcar mรฉtodos de teste com rรณtulos lรณgicos e, em seguida, incluรญ-los ou excluรญ-los por meio de um conjunto de testes XML. Essa abordagem simplifica a execuรงรฃo de testes de fumaรงa, regressรฃo e orientados a dependรชncias sem a necessidade de reescrevรช-los. Java cรณdigo.

  • ๐Ÿท๏ธ Sintaxe de anotaรงรฃo: Uso @Test(groups = {"smoke","regression"}) Para marcar qualquer mรฉtodo com um ou mais nomes de grupos lรณgicos.
  • ๐Ÿ“œ Controle XML: O <groups><run><include> e <exclude> As tags dentro do arquivo testng.xml determinam quais mรฉtodos marcados serรฃo executados.
  • ๐Ÿ”— Dependรชncias: O dependsOnGroups O atributo forรงa a ordenaรงรฃo de forma que os grupos de prรฉ-requisitos sempre terminem antes que os testes dependentes comecem.
  • ๐Ÿค– Seleรงรฃo por IA: As ferramentas de IA para anรกlise de impacto de testes mapeiam as alteraรงรตes de cรณdigo para os grupos relevantes, de forma que apenas os conjuntos de testes afetados sejam executados a cada commit.
  • ๐Ÿงช TestNG 7.x: As versรตes modernas mantรชm os grupos totalmente compatรญveis com execuรงรฃo paralela, listeners e pipelines do Maven Surefire.

Grupos em TestNG

TestNG รฉ uma estrutura de testes que abrange testes de unidade, funcionais, de ponta a ponta, de interface do usuรกrio e de integraรงรฃo para Java projetos.

Vocรช pode executar um รบnico pacote ou vรกrios pacotes (um pacote encapsula classes relacionadas em um layout de diretรณrio definido) criando um conjunto de arquivos XML e acionando-o por meio do Maven.

TestNG Grupos com exemplo

Vocรช usa grupos em TestNG quando:

  • Vocรช nรฃo quer espalhar mรฉtodos de teste por vรกrias classes simplesmente por รกrea funcional, e
  • Vocรช deseja ignorar (nรฃo executar) casos de teste selecionados como se eles nรฃo existissem no cรณdigo-fonte.
  • Para atingir ambos os objetivos, vocรช categoriza os mรฉtodos em grupos lรณgicos. TestNG Em seguida, respeita os filtros "include" e "exclude" declarados no conjunto XML.

O trecho de cรณdigo abaixo mostra a sintaxe de marcaรงรฃo de grupo usada em um mรฉtodo de teste.

@Teste (grupos = { โ€œlaรงosโ€, โ€œlaรงos fortesโ€ })

Aqui sรฃo usados โ€‹โ€‹dois nomes de grupo, a saber: bonding e strong_tiesEssas sรฃo etiquetas lรณgicas que vocรช pode renomear para se adequarem ao seu projeto.

O <groups> A tag marca o inรญcio dos filtros de grupo dentro do conjunto XML.

Em seguida, vocรช personaliza o XML para selecionar um grupo especรญfico dentre as classes marcadas. O exemplo abaixo mostra a sintaxe da declaraรงรฃo de grupo.

<grupos>
<corrida>
<incluir nome=โ€œlaรงosโ€ />
</corrida>
</grupos>

Considere que uma รบnica classe contรฉm 10 mรฉtodos de teste.

Dentre esses mรฉtodos:

  • 6 mรฉtodos carregam o bonding grupo, e
  • 4 mรฉtodos carregam o strong_ties grupo.

Em seguida, vocรช configura o Maven e Java caminhos e use o Eclipse IDE para demonstrar o uso em grupo por meio de arquivos XML dentro de um Java-projeto baseado em Maven.

Criar XML para TestNG com etiquetas

  • O arquivo XML (Extensible Markup Language) no framework Maven armazena a configuraรงรฃo para um ou mais testes, declarados dentro do tag.
  • Cada entrada de teste รฉ envolvida em um etiqueta e pode conter um ou mais TestNG classes.
  • A Java aula com um ou mais @Teste As anotaรงรตes sobre seus mรฉtodos sรฃo tratadas como uma TestNG classe.

Vรกrias tags aparecem em sequรชncia para construir um arquivo testng.xml funcional, a saber: , , e .

  • O A tag contรฉm o nome do nรญvel da suรญte usado em TestNG relatรณrios para resumos de execuรงรฃo.
  • O <test name=โ€Guru 99 Teste de Fumaรงaโ€> A tag contรฉm um nome de teste lรณgico; o relatรณrio a utiliza para contabilizar aprovaรงรตes, reprovaรงรตes e testes ignorados, alรฉm do tempo total de execuรงรฃo e metadados do grupo.
  • O A tag aponta para a classe de teste, onde com.group.guru99 รฉ o pacote e TC_Class1 รฉ o nome da classe.

<!DOCTYPE suรญte SISTEMA โ€œhttp://testng.org/testng-1.0.dtdโ€>
<suรญte nome="Suรญte">
<teste nome="Guru 99 Teste de Fumaรงa - Demonstraรงรฃo">
<grupos>
<corrida>
<incluir nome=โ€œlaรงos fortesโ€ />
</corrida>
</grupos>
<aulas>
<classe nome=โ€œcom.group.guru99.TC_Class1โ€ />
</aulas>
</teste>
</suรญte>

Esta configuraรงรฃo XML รฉ referenciada nos tutoriais em vรญdeo das prรณximas seรงรตes.

โ€œexcluirโ€ ou โ€œincluirโ€ no XML de teste

Se o mecanismo de agrupamento parecer complexo demais para um filtro pequeno, o conjunto de ferramentas testng.xml tambรฉm permite excluir ou incluir mรฉtodos de teste individuais por nome.

Excluir etiquetaSintaxe para a tag de exclusรฃoexcluir nome=โ€œ${TEST_CASE_NAME}โ€ />
Incluir etiquetaSintaxe para a tag de inclusรฃoincluir nome=โ€œ${TEST_CASE_NAME}โ€ />

Observaรงรฃo: Vocรช pode incluir ou excluir vรกrios casos de teste em uma รบnica execuรงรฃo, e a mesma sintaxe se aplica aos filtros de grupo.

Utilizando dependsOnGroups para Execuรงรฃo Ordenada

Alรฉm da simples inclusรฃo, TestNG permite que um grupo dependa de outro usando o dependsOnGroups atributo. O executor garante que todos os mรฉtodos no grupo pai terminem antes que qualquer mรฉtodo dependente seja iniciado, o que mantรฉm as prรฉ-condiรงรตes confiรกveis.

  • Primeiro faรงa login e depois realize as transaรงรตes: Mรฉtodos de login com tags group = "auth"e testes de transferรชncia de etiquetas com dependsOnGroups = {"auth"}Os testes de transferรชncia sรฃo executados somente apรณs o login ser bem-sucedido.
  • Ignorar em caso de falha: Se um mรฉtodo no grupo pai falhar, TestNG Marca os mรฉtodos dependentes como ignorados em vez de os falhar completamente, o que mantรฉm os relatรณrios honestos.
  • Combine com alwaysRun: Os mรฉtodos de limpeza devem ser configurados. alwaysRun = true Assim, o processo de desmontagem continua sendo executado mesmo quando um grupo upstream falha.

Esse padrรฃo รฉ comum em suรญtes de testes ponta a ponta, onde a configuraรงรฃo da API precisa ser concluรญda antes que as verificaรงรตes da interface do usuรกrio sejam iniciadas.

Execute TestNG Agrupar, incluir, excluir cรณdigo (demonstraรงรฃo em vรญdeo)

A seguir, um passo a passo do Java cรณdigo e o conjunto XML que impulsionam o agrupar, excluir e incluir comportamento.

Cenรกrio de teste: Lanรงar o GuruSite de demonstraรงรฃo bancรกria 99: verifique alguns elementos na pรกgina de login, insira as credenciais e verifique novamente alguns itens no painel apรณs o login.

Execute TestNG Agrupar, Incluir, Excluir Code

Observaรงรฃo: Cada etapa reside em seu prรณprio mรฉtodo, mas em tempo de execuรงรฃo a ordem depende das entradas no conjunto XML.

  • Mรฉtodo 1: Inicialize o navegador e inicie o URL (tc01LaunchURL()).
  • Mรฉtodo 2: Verifique o cabeรงalho da pรกgina de login (tc02VerifyLaunchPage()).
  • Mรฉtodo 3: Insira o nome de usuรกrio e a senha no formulรกrio de login (tc03EnterCredentials()).
  • Mรฉtodo 4: Verifique a presenรงa do ID do gerente no painel do usuรกrio (tc04VerifyLoggedInPage()).
  • Mรฉtodo 5: Verifique os links adicionais no painel do usuรกrio (tc05VerifyHyperlinks()).

Code para o cenรกrio:

pacote com.group.guru99;

importar java.util.concurrent.TimeUnit;

importar org.openqa.selenium.By;
importar org.openqa.selenium.WebDriver;
importar org.openqa.selenium.firefox.FirefoxMotoristas;
importar org.testng.Assert;
importar org.testng.annotations.Test;

aula pรบblica TC_Classe1 {
final estรกtica pรบblica webdriver webDriver = new FirefoxDirigir();

Tanga cabeรงalhoDaPรกginaDeLanรงamento = โ€œ//h3[text()='Guru99 Bank']โ€;
final Tanga elemento_nome_de_usuรกrio = โ€œ//input[@name='uid']โ€, elemento_senha = โ€œ//input[@name='password']โ€,
elemento_de_entrada = โ€œ//input[@name='btnLogin']โ€;
final Tanga valor_userName = โ€œmngr28642โ€, valor_da_senha = โ€œydAnateโ€;
final Tanga ID do gerente = โ€œ//td[contains(text(),'ID do Gerente')]โ€;
final Tanga novoCliente = โ€œ//a[@href='addcustomerpage.php']โ€, transferรชnciaDeFundos = โ€œ//a[@href='FundTransInput.php']โ€;

/** Este caso de teste inicializa o webDriver */
@Teste(grupos = { โ€œlaรงosโ€, โ€œlaรงos fortesโ€ })
vazio pรบblico tc01LanรงamentoURL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SEGUNDOS);
webDriver.get(โ€œhttps://www.demo.guru99.com/V4/โ€);
}

/** Verifica a presenรงa do cabeรงalho na pรกgina de login */
@Teste(grupos = { โ€œlaรงosโ€ })
vazio pรบblico tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
O cabeรงalho da pรกgina inicial nรฃo estรก sendo exibido.);
System.out.println(โ€œO cabeรงalho da pรกgina inicial estรก sendo exibidoโ€);
}

/** Insere o nome de usuรกrio, a senha e clica em Entrar */
@Teste(grupos = { โ€œlaรงosโ€, โ€œlaรงos fortesโ€ })
vazio pรบblico tc03EnterCredentials() {
webDriver.findElement(By.xpath(userName_element)).sendKeys(userName_value);
webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);
webDriver.findElement(By.xpath(signIn_element)).click();
}

/** Verifica o ID do gerente no painel de controle */
@Teste(grupos = { โ€œlaรงos fortesโ€ })
vazio pรบblico tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
โ€œA etiqueta de identificaรงรฃo do gerente nรฃo estรก sendo exibidaโ€);
System.out.println(โ€œA etiqueta de identificaรงรฃo do gerente estรก sendo exibidaโ€);
}

/** Verifica o link de novo cliente e o link de transferรชncia de fundos no painel de controle */
@Teste(grupos = { โ€œlaรงosโ€ })
vazio pรบblico tc05VerificarHiperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
O link para "Novo cliente" nรฃo estรก sendo exibido.);
System.out.println(โ€œExibido o hiperlink para novo clienteโ€);

Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
O link para transferรชncia de fundos nรฃo estรก sendo exibido.);
System.out.println(โ€œO link para transferรชncia de fundos รฉ exibidoโ€);
}
}

Atenรงรฃo: as credenciais bancรกrias de demonstraรงรฃo permanecem vรกlidas por aproximadamente 20 dias, portanto, uma execuรงรฃo local pode exibir um erro de credenciais invรกlidas apรณs esse perรญodo expirar.

Explicaรงรฃo do cรณdigo:

Cinco mรฉtodos de teste, um por aรงรฃo, cada um com um groups atributo no @Test anotaรงรฃo.

Os dois rรณtulos de grupo lรณgico sรฃo strong_ties e bonding.

  • O primeiro e o terceiro mรฉtodos carregam ambos bonding e strong_tiesPortanto, elas sรฃo executadas sempre que qualquer um dos grupos estiver incluรญdo no conjunto de testes. Esse รฉ um padrรฃo comum para sistemas compartilhados. caso de teste passos.
  • O segundo mรฉtodo estรก marcado apenas com bonding, entรฃo ele sรณ funciona quando o bonding O grupo estรก incluรญdo.
  • O quarto mรฉtodo estรก marcado apenas com strong_tiesPortanto, ele sรณ รฉ executado quando esse grupo estรก incluรญdo.
  • O quinto mรฉtodo estรก marcado apenas com bonding, entรฃo ele sรณ funciona quando o bonding O grupo estรก incluรญdo.

Seguem-se quatro cenรกrios de execuรงรฃo:

Cenรกrio 1: Execute todos os mรฉtodos de teste, independentemente do grupo. Remova o <groups> bloco do XML em execuรงรฃo.

Cenรกrio 2: Execute apenas os mรฉtodos associados a um grupo escolhido, a saber: strong_ties or bondingPor favor, veja o vรญdeo abaixo.

  • Na primeira parte do vรญdeo, o <groups> O bloco estรก comentado, entรฃo todos os mรฉtodos de teste sรฃo executados.
  • Na segunda parte, o filtro de grupo รฉ restaurado e apenas os mรฉtodos correspondentes sรฃo executados.

Cenรกrio 3: Aplique o filtro de exclusรฃo para ignorar casos de teste selecionados. Consulte o vรญdeo.

  • A demonstraรงรฃo exclui tc02 pelo nome no XML em execuรงรฃo, e o relatรณrio de resultados confirma que o mรฉtodo excluรญdo nรฃo รฉ executado.

Cenรกrio 4: Aplique o filtro de inclusรฃo para executar somente tc01LaunchURL, tc03EnterCredentials e tc05VerifyHyperlinksPor favor, consulte o vรญdeo.

Nessa execuรงรฃo, somente os mรฉtodos listados no filtro de inclusรฃo sรฃo executados, exatamente como configurado.

Faรงa o download do projeto de exemplo no link abaixo.

Faรงa o download do arquivo acima. Code

Conclusรฃo

Grupos em TestNG dar estrutura a grandes Selenium e conjuntos de unidades, substituindo divisรตes de classe pontuais por filtros XML declarativos.

Identifique seus mรฉtodos com @Test(groups = {...}), entรฃo use <include>, <exclude> e dependsOnGroups para gerar testes de fumaรงa, regressรฃo e ponta a ponta a partir do mesmo projeto Maven em TestNG 7.x.

Perguntas Frequentes

Um grupo รฉ um rรณtulo lรณgico atribuรญdo a um mรฉtodo de teste por meio do groups atributo em @TestO conjunto de ferramentas XML seleciona grupos usando filtros de inclusรฃo e exclusรฃo, permitindo que vocรช decida em tempo de execuรงรฃo quais mรฉtodos marcados serรฃo executados.

Dentro da <groups><run>, <include name="..."> A tag lista grupos permitidos para a execuรงรฃo, e <exclude name="..."> bloqueia-os. TestNG A funรงรฃo `excludes` aplica-se apรณs a funรงรฃo `includes`, portanto, um grupo excluรญdo รฉ sempre ignorado, mesmo quando tambรฉm estรก listado na funรงรฃo `includes`.

O dependsOnGroups atributo em @Test forรงas TestNG Executar todos os mรฉtodos do grupo listado antes do inรญcio do mรฉtodo dependente. Se algum mรฉtodo prรฉ-requisito falhar, TestNG marca o mรฉtodo dependente como ignorado em vez de falho.

Sim. O groups O atributo aceita um array, entรฃo @Test(groups = {"smoke", "regression"}) Coloca um mรฉtodo em ambos os grupos. TestNG Executa esse mรฉtodo sempre que qualquer um dos grupos estiver incluรญdo no conjunto de tarefas, o que mantรฉm as etapas compartilhadas livres de repetiรงรฃo.

TestNG A versรฃo 7.x รฉ a linha com suporte, com lanรงamentos sob a categoria org.testng:testng Coordenadas do Maven. Mantรฉm grupos, execuรงรฃo paralela e listeners totalmente compatรญveis com as tecnologias modernas. Selenium Projetos 4 e JDK 17.

Ferramentas de IA para anรกlise de impacto de testes analisam as diferenรงas de cรณdigo e mapeiam as classes alteradas para os grupos que as abrangem. O pipeline executa apenas os grupos marcados em cada solicitaรงรฃo de pull request, reduzindo o tempo de feedback e mantendo a qualidade.ping Caminhos arriscados em teste.

Sim. Os algoritmos de agrupamento de IA leem registros histรณricos de falhas, sinalizam testes instรกveis โ€‹โ€‹e propรตem um subconjunto estรกvel etiquetado como regressionOs engenheiros aprovam a lista, entรฃo TestNG Executa esse grupo todas as noites, o que mantรฉm a suรญte segura sem perder a cobertura.

Resuma esta postagem com: