Trabalhando com Múltiplos arquivos testng.xml

Trabalhando em um projeto de código aberto GitHub criado para demonstrar o funcionamento do framework Selenium WebDriver com Java, à medida que o projeto crescia, havia a necessidade de criar vários arquivos testng.xml para executar diferentes testes.

Esses vários arquivos foram criados para segregar os testes e colocar todos os testes relacionados a um respectivo site na mesma testng.xml (usei diferentes sites de demonstração para demonstrar diferentes ações que podem ser automatizadas usando o Selenium WebDriver).

Eu pensei em iluminar sobre o uso de vários arquivos testng.xml e como executar testes. Como o Maven é a ferramenta de build que está sendo usada, é necessário um único arquivo testng.xml para executar todos os testes no projeto. Também há casos que tive que depurar as falhas de teste executando um único arquivo testng.xml.

Neste projeto, criei 9 arquivos testng.xml diferentes que contêm vários testes, e estou executando todos os testes nessas 9 diferentes testng.xml usando um único arquivo testng.xml. Sim, isso é possível!

Então, junte-se à minha jornada onde eu vou demonstrar como executar vários arquivos testng.xml usando um único arquivo testng.xml. Eu também irei iluminar sobre a execução de um único arquivo testng.xml dos 9 disponíveis e executá-lo a partir da linha de comando usando o Maven.

Executando Múltiplos arquivos testng.xml Usando um Único arquivo testng.xml

Vamos primeiro concentrar em executar todos os testes com todos os 9 testng.xml arquivos diferentes. A solução para isso é usar a tag <suite-files> </suitefiles>  no seu arquivo testng.xml e fornecer a outra testng.xml caminho do arquivo entre essa tag. Aqui está o exemplo de arquivo para mostrar o que estou falando:

XML

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Selenium 4 POC Tests ">
<suite-files>
    <suite-file path="testng-saucedemo.xml"/>
    <suite-file path="testng-automationpractice.xml"/>
    <suite-file path="testng-theinternet.xml"/>
    <suite-file path="testng-juice-shop.xml"/>
    <suite-file path="testng-lambdatestecommerce.xml"/>
    <suite-file path="testng-seleniumgrid-theinternet.xml"/>
    <suite-file path="testng-lambdatest-selenium-playground.xml"/>
    <!--        <suite-file path="testng-seleniumgrid-juiceshop.xml"/>-->
</suite-files>
</suite> 

Assim que executarmos este arquivo, ele executará os respectivos testng.xml na ordem atualizada entre a tag <suite-files>. Portanto, “testng-saucedemo.xml” será executado primeiro, e em seguida, “testng-automationpractice.xml” será executado, e assim por diante.

Todos os arquivos testng.xml fornecidos no exemplo acima contêm muitos testes. Portanto, todos os testes dentro dos respectivos testng.xml serão executados e, após a conclusão, o próximo arquivo XML será selecionado para execução.

Os seguintes são os conteúdos do arquivo testng-saucedemo.xml :

XML

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Sauce Demo Website Tests" parallel="tests" thread-count="4" verbose="2">
<test name="selenium 4 Tests with Chrome Browser">
    <parameter name="browser" value="chrome"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Firefox Browser">
    <parameter name="browser" value="firefox"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Edge Browser" enabled="false">
    <parameter name="browser" value="edge"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Opera Browser" enabled="false">
    <parameter name="browser" value="opera"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

Assim que todos os testes atualizados neste arquivo XML sejam executados (não importa se passa ou falha) e a execução for concluída, o próximo arquivo será selecionado para executar outro conjunto de testes.

Executar os arquivos de suite em paralelo não é suportado por testng.

Executar um único arquivo testng.xml Usando Maven

Você tem uma opção no IDE para executar seus testes usando o arquivo testng.xml ao clicar com o botão direito nele e selecionando a opção para executar os testes. No entanto, quando se trata de executar os testes no pipeline CI/CD, essa opção não funciona bem, já que você precisa executar os testes usando comandos no pipeline automatizado.

Configurando Seu Projeto Para Executar o Arquivo suite-xml Usando a Linha de Comandos

Precisamos configurar as seguintes opções para conseguirmos executar o arquivo testng.xml usando o Maven.

Atualize o plugin Maven Surefire no seu pom.xml:

Note a tag <SuiteXmlFile> na imagem acima. O valor para suiteXmlFile está definido como ${suite-xml}. Vamos definir o valor padrão para essa declaração no bloco de propriedades do arquivo pom.xml da seguinte forma:

O caminho padrão para testng.xml está definido para o arquivo usado na seção acima deste blog e atualizamos o caminho de suite-files nele.

Então, se agora executarmos o comando mvn clean install ou mvn clean test, o Maven irá pegar o arquivo testng.xml padrão com base no caminho do arquivo atualizado no bloco de propriedades e executará todos os testes.

A questão que surge é: “O que eu devo fazer se quiser executar qualquer outro arquivo testng.xml? Será possível fazer isso?”

A resposta é “Sim”: podemos executar qualquer arquivo testng.xml no nosso projeto adicionando o -Dsuite-xml=<caminho do arquivo testng.xml> na nossa instrução mvn comando.

Lembre-se, nós configurámos isso anteriormente no bloco de plugin Maven Surefire no pom.xml.

Tudo o que precisamos fazer é passar os valores para a variável de propriedade suite-xml na linha de comando, o que pode ser feito usando a opção -D no comando mvn:

 
mvn clean test -Dsuite-xml=<testng.xml file path>

Vamos agora tentar as nossas mãos com a linha de comando e executar diferentes arquivos testng.xml usando o Maven a partir da linha de comando, conforme aprendemos.

Vamos executar o arquivo testng-internet.xml, verifique se deve sobrescrever o padrão existente testng.xml, e executar apenas o que passamos na linha de comando. Precisamos passar o caminho completo onde o testng.xml está salvo, e no nosso caso, está disponível na pasta test-suite, então o caminho completo é test-suites\testng-theinternet.xml. Aqui está o comando que vamos executar (certifique-se de estar na pasta raiz do projeto no console de linha de comando antes de executar o comando Maven):

Plain Text

 

mvn clean test -Dsuite-xml=test-suite\testng-theinternet.xml


“-Dsuite-xml” pode ser usado com outros comandos Maven, como os seguintes: mvn clean install / mvn clean verify, etc.mvn clean install/ mvn clean verify, etc.

As testes foram executadas com sucesso e os resultados foram impressos na saída padrão. Dizemos que 32 testes foram executados e passados com sucesso.

Para confirmar que o arquivo XML correto foi escolhido e os testes foram executados, vamos executar os testes para o arquivo testng-theinternet.xml usando o IDE e verificar o número de testes executados.

Podemos ver que 32 testes foram executados e passados, o que confirma que os testes executados usando o comando mvn foram executados corretamente para o arquivo testng.xml que passamos.

Conclusão

Nós podemos ter vários arquivos testng.xml para separar os testes baseados em diferentes módulos/websites em nosso projeto e esses vários arquivos testng.xml podem ser executados usando um único arquivo testng.xml.

Do mesmo modo, podemos executar um arquivo testng.xml da linha de comando usando o plugin Maven Surefire.

Source:
https://dzone.com/articles/working-with-multiple-testngxml-files