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 em um único testng.xml (usei diferentes sites de demonstração para demonstrar diferentes ações que podem ser automatizadas usando o Selenium WebDriver).

Penso em iluminar o uso de vários arquivos testng.xml e como executar testes. Uma vez que 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 com vários testes, e estou executando todos os testes nessess 9 arquivos testng.xml diferentes usando um único arquivo testng.xml. Sim, isso é possível!

Então, junte-se à minha jornada onde irei demonstrar como executar vários arquivos testng.xml usando um único arquivo testng.xml. Também irei iluminar um pouco sobre a execução de um único arquivo testng.xml dentre os 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 nos concentrar em executar todos os testes com todos os 9 testng.xml diferentes arquivos. A solução para isso é usar a tag <suite-files> </suitefiles>  no seu arquivo testng.xml e fornecer o caminho para o outro testng.xml 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 depois, “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.

O seguinte 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 forem 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 Comando

Nós precisamos configurar as seguintes opções para ser capaz de 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á configurado 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 que usamos na seção acima deste blog e atualizamos o caminho de suite-files nele.

Então, agora se você executar o comando mvn clean install ou mvn clean test, o Maven irá pegar o arquivo testng.xml padrão baseado na pasta atualizada nas propriedades e executar todos os testes.

Now, a pergunta que surge é: “O que devo fazer se quiser executar qualquer outro arquivo testng.xml, é possível fazer isso?”

A resposta é “Sim”: podemos executar qualquer arquivo testng.xml em nosso projeto adicionando o -Dsuite-xml=<caminho do arquivo testng.xml> em nosso comando mvn .

Lembre-se, configuramos isso anteriormente no nosso bloco do plugin Maven Surefire no pom.xml.

Somos apenas precisar 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>

Agora vamos tentar usar a linha de comando para executar diferentes arquivos testng.xml usando Maven da linha de comando, conforme acabamos de aprender.

Executaremos o arquivo testng-internet.xml, verifique que deve sobrescrever o testng.xml padrão existente, e executar apenas o que passarmos no 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 executaremos (certifique-se de estar na pasta raiz do projeto no prompt de comando antes de executar o comando Maven):

Plain Text

 

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


A opção “-Dsuite-xml” pode ser usada com outros comandos Maven como segue: mvn clean install/ mvn clean verify, etc.

As testes foram executadas com sucesso e os resultados foram impressos na consola. Dizemos que 32 testes foram executados e passados com sucesso.

Para confirmar que o arquivo XML correto foi escolhido e os testes foram executados, executemos os testes para o arquivo testng-theinternet.xml usando o IDE e verifique 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