Como executar vários casos de teste em TestNG suíte
⚡ Resumo Inteligente
Execute vários casos de teste com TestNG Suíte em Selenium Permite acionar diversas classes, pacotes ou suítes filhas a partir de um único arquivo testng.xml. Este guia passo a passo aborda threads paralelas, hierarquia de suítes, geração de relatórios e assistência de IA para aplicações modernas. TestNG Projetos 7.x.
TestNG Permite executar métodos de teste, classes e suítes de teste completas em paralelo dentro de um mesmo projeto. A execução paralela reduz o tempo total de execução, pois as threads iniciam os testes simultaneamente, em vez de uma após a outra. Este guia explica como executar várias classes (suítes de teste diferentes) usando o comando `run`. TestNG 7.x com Selenium WebDriver.
Etapa 1) Criando um TestNGArquivo .xml para executar testes
Para criar a configuração, siga os passos abaixo.
- Criar um novo projeto em Eclipse.
- Crie dois pacotes no projeto (dê a eles um nome). com.suite1 e com.suite2).
- Crie uma classe em cada pacote (e dê um nome a elas). Flipkart.java e Snapdeal.java) e copie o código abaixo para as respectivas classes.
- Crie um novo arquivo em seu projeto e dê a ele um nome. testeng.xml. Certifique-se de que TestNG O plugin está instalado (instruções disponíveis). aqui.O arquivo testng.xml contém todas as configurações, como nomes de classes, nomes de testes e nomes de suítes de testes.
Flipkart.java
package com.suite1; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class Flipkart { WebDriver driver = new FirefoxDriver(); String username = ""; // Change to your username and password String password = ""; // This method navigates to the Flipkart URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.flipkart.com"); } // Log in to Flipkart @Test public void login() { driver.findElement(By.partialLinkText("Login")).click(); driver.findElement(By.cssSelector(".fk-input.login-form-input.user-email")).sendKeys(username); driver.findElement(By.cssSelector(".fk-input.login-form-input.user-pwd")).sendKeys(password); driver.findElement(By.cssSelector(".submit-btn.login-btn.btn")).click(); } // Search for a product @Test public void searchAndSelectProduct() { driver.findElement(By.id("fk-top-search-box")).sendKeys("moto g3"); driver.findElement(By.cssSelector("search-bar-submit.fk-font-13.fk-font-bold")).click(); String css = ".gd-row.browse-grid-row:nth-of-type(1) > div:nth-child(1)>div>div:nth-child(2)>div>a"; driver.findElement(By.cssSelector(css)).click(); } @Test public void buyAndRemoveFromCart() { driver.findElement(By.cssSelector(".btn-express-checkout.btn-big.current")).click(); driver.findElement(By.cssSelector(".remove.fk-inline-block")).click(); Alert a = driver.switchTo().alert(); a.accept(); } @Test public void logout() { Actions s = new Actions(driver); WebElement user = driver.findElement(By.partialLinkText(username)); s.moveToElement(user).build().perform(); driver.findElement(By.linkText("Logout")).click(); } @AfterClass public void quit() { driver.close(); } }
SnapDeal.java
package com.suite2; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class SnapDeal { WebDriver driver = new FirefoxDriver(); String username = ""; // Change to your username and password String password = ""; String pinCode = ""; // This method navigates to the Snapdeal URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.snapdeal.com"); } @Test public void login() { driver.findElement(By.xpath("//button[text()='Login']")).click(); driver.switchTo().frame("loginIframe"); driver.findElement(By.cssSelector("div[onClick='getLoginForm()']")).click(); driver.findElement(By.id("j_username")).sendKeys(username); driver.findElement(By.id("j_password_login")).sendKeys(password); driver.findElement(By.id("signin_submit")).click(); driver.switchTo().defaultContent(); } @Test public void searchAndSelectProduct() { driver.findElement(By.cssSelector(".col-xs-20.searchformInput.keyword")).sendKeys("iphone 6s"); driver.findElement(By.cssSelector(".sd-icon.sd-icon-search")).click(); String css = ".product_grid_row:nth-of-type(1)>div:nth-child(1)"; driver.findElement(By.cssSelector(css)).click(); } @Test public void buyAndRemoveFromCart() { driver.findElement(By.xpath("//li[contains(text(),'Silver')]")).click(); driver.findElement(By.id("pincode-check")).sendKeys(pinCode); driver.findElement(By.id("buy-button-id")).click(); driver.findElement(By.cssSelector("i[title='Delete Item']")).click(); Alert a = driver.switchTo().alert(); a.accept(); } @Test public void logout() { driver.findElement(By.linkText("START SHOPPING NOW")).click(); Actions s = new Actions(driver); WebElement user = driver.findElement(By.cssSelector(".sd-icon.sd-icon-user")); s.moveToElement(user).build().perform(); driver.findElement(By.linkText("Logout")).click(); } @AfterClass public void quit() { driver.close(); } }
TestNG.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite thread-count="2" verbose="1" name="Gmail Suite" parallel="tests"> <test name="flipkart"> <classes> <class name="com.suite1.Flipkart"/> </classes> </test> <test name="Myntra"> <classes> <class name="com.suite2.SnapDeal"/> </classes> </test> </suite>
A estrutura final do projeto se assemelha ao exemplo abaixo.
Etapa 2) Execução paralela em TestNG
Após salvar o arquivo XML acima, o próximo passo é executar os testes paralelos. O código é mostrado abaixo.
1) contagem de fiosDefine quantas threads TestNG Pode-se iniciar a execução em paralelo. Um valor mais alto executa mais testes simultaneamente, até o limite da CPU.
2) detalhado: Exibe detalhes da execução no console. Os valores permitidos variam de 1 a 10. Valores mais altos geram registros mais detalhados e granulares.
3) nomeNome da suíte. Aqui está:Gmail Suíte".
4) paralelo: Conta TestNG O que executar simultaneamente. Os valores válidos são testes, classes, métodos ou instâncias. O valor padrão é Nenhum.
Clique com o botão direito do mouse no arquivo testng.xml e selecione Executar como > TestNG suíteAssim que terminar, você verá os resultados consolidados.
Ao executar o código acima, você obterá a seguinte saída.
Saída:
1) Nome do conjunto de testes definido em testng.xml.
2) Nome do teste definido em testng.xml.
3) Nome da classe declarada em testng.xml.
4) Nomes de métodos anotados com @Test no arquivo .java.
O mesmo fluxo é executado para o teste SnapDeal, portanto, ambas as classes são executadas em paralelo.
Etapa 3) Executando vários conjuntos de testes a partir de um arquivo testng.xml pai.
Um requisito comum em projetos maiores é encadear vários arquivos testng.xml em um único gatilho. TestNG A versão 7.x suporta um conjunto de aplicativos principal que faz referência a um aplicativo filho. arquivo de suíte entradas, para que cada filho possa manter sua própria contagem de threads, listeners e parâmetros. Salve cada suíte filha separadamente e, em seguida, indique o caminho para o arquivo pai. Execute apenas o arquivo pai a partir do arquivo filho. Eclipse, Maven ou a linha de comando.
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Parent Suite" parallel="tests" thread-count="4"> <suite-files> <suite-file path="./flipkart-suite.xml"/> <suite-file path="./snapdeal-suite.xml"/> </suite-files> </suite>
Esse padrão mantém os conjuntos de testes de regressão, fumaça e sanidade separados, porém reutilizáveis. Você também pode acionar o arquivo pai a partir do Maven Surefire configurando <suiteXmlFile>parent-suite.xml</suiteXmlFile> dentro da configuração do plugin, o que permite que o mesmo layout paralelo funcione em pipelines de integração contínua.
Etapa 4) Melhores práticas para paralelo TestNG é executado
- pino TestNG 7.x: Uso TestNG 7.10 ou posterior com Selenium 4. Assim, os drivers compatíveis com W3C se comportam de maneira consistente em todas as threads.
- Evite estados compartilhados: Mova o webdriver O campo é transformado em um ThreadLocal para que cada thread mantenha sua própria sessão.
- Ajuste a quantidade de fios: Comece verificando a quantidade de núcleos da CPU e, em seguida, observe o relatório HTML que pode ser enviado por e-mail e a carga do Grid antes de aumentá-la.
- Dados de teste de isolamento: Utilize usuários, carrinhos e códigos PIN exclusivos para cada tópico, evitando conflitos de login.
- Capturar screenshots em caso de falha: Prenda-os através de um ITestListener para depurar execuções paralelas instáveis mais rapidamente.
- Utilize a assistência da IA: Ferramentas como Testim, mabl e CodiumAI podem sinalizar testes instáveis e sugerir seletores estáveis antes da próxima execução.
Conclusão
O exemplo acima mostra como usar TestNG Para executar testes em paralelo. TestNG A versão 7.x oferece um único arquivo XML para executar várias classes de teste, vincular diversos conjuntos de testes filhos e ajustar threads paralelas, de modo que seja possível executar testes de grande porte. Selenium Os projetos são concluídos muito mais rapidamente.





