Dataaprovider & TestNG XML: Parametrização em Selenium(Exemplo)
Como nós criamos software, nós sempre desejamos que ele funcione de forma diferente com um conjunto diferente de dados. Quando se trata de testar a mesma peça de software, não podemos ser injustos em testá-la com apenas um conjunto de dados. Aqui novamente, precisamos verificar se o nosso sistema está tomando todo o conjunto de combinações que se espera suportar. Para isso, precisamos de parametrizar os nossos test scipts. Aí vem a parametrização na imagem.
Parametrização em Selenium
Parametrização em Selenium é um processo para parametrizar os scripts de teste a fim de passar múltiplos dados para a aplicação em tempo de execução. É uma estratégia de execução que executa automaticamente os casos de teste várias vezes usando valores diferentes. O conceito alcançado pela parametrização dos scripts de teste é chamado Data Driven Testing.
Neste tutorial, você aprenderá –
- Type of Parameterization in TestNG-
- Anotar parâmetros com Testng.xml
- Resolução de problemas
- Parâmetros usando Dataprovider
- Invoque DataProvider de classe diferente
- Tipos de parâmetros no Dataprovider
Tipo de parametrização no TestNG-
Para tornar a parametrização mais clara, vamos percorrer as opções de parametrização em uma das estruturas mais populares para Selenium Webdriver – TestNG.
Existem duas formas de parametrização no TestNG
-
Com a ajuda da anotação Parameters e do arquivo XML TestNG.
-
Com a ajuda da anotação DataProvider.
Parametros do Testng.xml podem ser suite ou nível de teste
Parametros do DataProvider podem ter como parâmetro o Método e o ITestContext.
Vamos estudá-los em detalhe –
Anotar parâmetros no TestNG
Anotar parâmetros no TestNG é um método usado para passar valores para os métodos de teste como argumentos usando o arquivo .xml. Os usuários podem ser obrigados a passar os valores para os métodos de teste durante o tempo de execução. O método de anotação @Parameters pode ser usado em qualquer método que tenha @Test, @Before, @Pós ou @Factory annotation.
Anotação de parâmetros com Testng.xml
Selecionar parametrização usando anotações quando você quer lidar com a complexidade & o número de combinações de entrada é menor.
Vejamos como isto funciona
Cenário de teste
Passo 1) Iniciar navegador &Vá para o Google.com
Passo 2) Introduza uma palavra-chave de pesquisa
Passo 3) Verifique se o valor introduzido é o mesmo que o fornecido pelos dados do nosso teste
Passo 4) Repita 2 & 3 até que todos os valores sejam introduzidos
Autor do teste | SearchKey |
Guru99 | Índia |
Krishna | EUA |
Bhupesh | China |
Aqui está um exemplo de como fazê-lo SEM os parâmetros
Um estudo, o exemplo acima. Imagine como o código se tornará complexo quando fizermos isso para 3 combinações de entrada
Agora, vamos parametrizar isso usando TestNG
Para fazer isso, você precisará
- Criar um arquivo XML que irá armazenar os parâmetros
-
No teste, adicione a anotação @Parametros
Aqui está o código completo
Test Level TestNG.xml
ParâmetroWithTestNGXML.java File
Instruções para executar o script, selecione o arquivo XML e Execute como Test NG Suite
Clique com o botão direito do mouse em .xml file ->Executar como ->Suíte Testng (Nota: Suíte)
Agora, os parâmetros podem ser definidos em 2 níveis
- Suite level – Os parâmetros dentro do <suite> tag do arquivo TestNG XML será um parâmetro de nível de suíte.
- Test Level — Os parâmetros dentro do arquivo XML <Test> tag de teste será um parâmetro de Test level.
Here é o mesmo teste com parâmetros de nível de suíte
NOTE: Caso o nome do parâmetro seja o mesmo em nível de suíte e nível de teste, então o parâmetro de nível de teste terá preferência sobre o nível de suíte. Então, nesse caso, todas as classes dentro desse nível de teste irão compartilhar o parâmetro sobreposto, e outras classes que estão fora do nível de teste irão compartilhar o parâmetro de nível de suíte.
Resolução de problemas
Sua # 1 Valor do parâmetro em testng.xml não pode ser digitado para o parâmetro do método de teste correspondente, ele irá lançar um erro.
Consulte o seguinte exemplo
Aqui, o atributo ‘autor’ é igual a ‘Guru99’ que é uma string e no método de teste correspondente espera um valor inteiro, por isso vamos obter uma excepção aqui.
Issue # 2 Seus @parâmetros não têm um valor correspondente em testing.xml.
Pode resolver esta situação adicionando @ anotação opcional no parâmetro correspondente no método de teste.
Issue # 3: Você quer testar vários valores do mesmo parâmetro usando Testng.xml
A resposta simples é que isso não pode ser feito! Você pode ter vários parâmetros diferentes, mas cada parâmetro só pode ter um único valor. Isto ajuda a evitar que os valores hardcoding entrem no script. Isto faz com que o código seja reutilizável. Pense nisso como arquivos de configuração para o seu script. Se você quiser usar múltiplos valores para um parâmetro use DataProviders
Data Provider in TestNG
Data Provider in TestNG é um método usado quando um usuário precisa passar parâmetros complexos. Parâmetros complexos precisam ser criados a partir de Java, tais como objetos complexos, objetos de arquivos de propriedade ou de um banco de dados podem ser passados pelo método do provedor de dados. O método é anotado pelo @DataProvider e retorna um array de objetos.
Parâmetros usando Dataprovider
@Anotação de parâmetros é fácil, mas para testar com vários conjuntos de dados precisamos usar o Data Provider.
Para preencher milhares de formulários web usando nossa estrutura de teste precisamos de uma metodologia diferente que pode nos dar um conjunto de dados muito grande em um único fluxo de execução.
Este conceito de data driven é alcançado pela anotação @DataProvider no TestNG.
Tem apenas um atributo ‘nome’. Se você não especificar o atributo nome então o nome do DataProvider será o mesmo que o nome do método correspondente.
O provedor de dados retorna um objeto JAVA bidimensional para o método de teste e o método de teste, invocará M vezes em um array de objetos do tipo M*N. Por exemplo, se o DataProvider retorna um array de 2*3 objetos, o banco de dados correspondente será invocado 2 vezes com 3 parâmetros de cada vez.
Exemplo Completo
Invocar DataProvider de classe diferente
Por padrão, DataProvider reside na mesma classe onde está o método de teste ou sua classe base. Para colocá-lo em alguma outra classe precisamos fazer o método DataProvider como estático e no método de teste precisamos adicionar um atributo dataProviderClass em @Test annotation.
Código Exemplo
TestClass ParameterDataproviderWithClassLevel.java
DataproviderClass.java
Tipos de parâmetros no Dataprovider
Existem dois tipos de parâmetros suportados pelo método DataProvider.
Método- Se o SAME DataProvider deve se comportar de forma diferente com método de teste diferente , use o parâmetro Método.
No exemplo seguinte ,
- Verificamos se o nome do método é TestMethodA.
- Se sim retorna um conjunto de valores
- Else retorna outro conjunto de valores
Aqui está o output
ITestContext- Pode usar para criar diferentes parâmetros para casos de teste baseados em grupos.
Na vida real, você pode usar o ITestContext para variar valores de parâmetros com base nos Métodos de Teste, hosts, configurações do teste.
No seguinte exemplo de código
- Temos 2 grupos A & B
- Cada método de teste é atribuído a um grupo
- Se o valor do grupo for A, um determinado conjunto de dados é retornado
- Se o valor do grupo for B, outro conjunto de dados é retornado
Nota: Se você executar diretamente sua classe de teste, ele primeiro chamará o provedor de dados que não pode obter informações de grupo, pois os grupos não estão disponíveis. Mas se você chamar essa classe via testng.xml, ela terá informações de grupos disponíveis com o ITestContext. Use o seguinte XML para chamar o teste
Sumário:
- Parametrização é necessária para criar Data Driven Testing.
- TestNG suporta dois tipos de parametrização, usando @Parameter+TestNG.xml e usando@DataProvider
-
In @Parameter+TestNG.xml os parâmetros podem ser colocados em nível de suite e nível de teste. Se
O mesmo nome de parâmetro é declarado em ambos os lugares; o parâmetro de nível de teste terá preferência sobre o parâmetro de nível de adequação.
- usando @Parameter+TestNG.xml apenas um valor pode ser definido de cada vez, mas @DataProvider retorna um array 2d de Object.
- Se DataProvider estiver presente na classe diferente, então a classe onde o método de teste reside,DataProvider deve ser um método estático.
- Existem dois parâmetros suportados por DataProvider: Method e ITestContext.