Quando trabalhamos com o Robot Framework, é essencial entender quais são os escopos possíveis de variáveis que podemos utilizar em nossos testes. Isso nos permite controlar o acesso e o valor das variáveis em diferentes partes do nosso código de automação. Neste tópico, vamos explorar os conceitos de Escopo de Variáveis no Robot Framework e como eles influenciam nossos testes.
No Robot Framework existem quatro tipos de escopo de variáveis, vamos ver cada uma delas abaixo:
Variáveis Globais
- São definidas globalmente e estão disponíveis em todo o projeto.
- Podem ser definidas na linha de comando usando as opções -v ( ou –variable) e -V ( ou –variablefile), ou usando a keyword Set Global Variable.
Exemplo:
Em seu projeto, crie os arquivos abaixo:
No terminal, execute o comando abaixo, para que os cenários com a tag global_var sejam executados:
robot -i global_var -v COMMAND_LINE_VAR:GLOBAL_123 .
Você deverá ver o seguinte log de execução:
==============================================================================
Robot-Courses.Módulo 2.Tópico 2 - Variáveis.Global Var1
==============================================================================
Variável global em um test case
Usando uma variável global em uma keyword -> GLOBAL_123
.Usando uma variável global em um Test Case -> GLOBAL_123
Variável global em um test case | PASS |
------------------------------------------------------------------------------
Variável Global Criada pelo Set Global Variable .
Usando uma variável global croara pela Set Global Variable -> GLOBAL_KW_123
Variável Global Criada pelo Set Global Variable | PASS |
------------------------------------------------------------------------------
Robot-Courses.Módulo 2.Tópico 2 - Variáveis.Global Var1 | PASS |
2 tests, 2 passed, 0 failed
==============================================================================
Robot-Courses.Módulo 2.Tópico 2 - Variáveis.Global Var3
==============================================================================
Acessando variável global criada em outra suíte
Usando uma variável global croara pela Set Global Variable -> GLOBAL_KW_123
Acessando variável global criada em outra suíte | PASS |
------------------------------------------------------------------------------
Robot-Courses.Módulo 2.Tópico 2 - Variáveis.Global Var3 | PASS |
1 test, 1 passed, 0 failed
==============================================================================
Robot-Courses.Módulo 2.Tópico 2 - Variáveis | PASS |
3 tests, 3 passed, 0 failed
==============================================================================
Robot-Courses.Módulo 2 | PASS |
3 tests, 3 passed, 0 failed
==============================================================================
Robot-Courses | PASS |
3 tests, 3 passed, 0 failed
==============================================================================
Vamos entender o que aconteceu:
- No arquivo global_var1.robot:
- No cenário “Case 1” tanto o cenário de teste quanto a keyword “Utilizando Variável de Linha de Comando em uma Keyword“, do arquivo de recurso “global_var2.robot” possuem acesso a variável global de linha de comando, nomeada ${COMMAND_LINE_VAR}. Nesse caso, ela não foi criada pelo script, ela é criada a partir do momento que o comando “robot” é executado, através da opção “-v“, tornando-se acessível em todo projeto.
- No cenário “Case 2” está sendo criado uma variável global, nomeada de ${GLOBAL_VAR} dentro da keyword “Definindo uma Variável Global“, importada do arquivo de recurso “global_var2.robot“. Assim como o caso anterior, essa variável ficará acessível em todo projeto.
- No arquivo global_var3.robot:
- No cenário “Case 3“, demonstra que as variáveis ${COMMAND_LINE_VAR} e ${GLOBAL_VAR} podem também ser acessadas por outras suítes.
A variável global será apagada da memória somente após a execução de todas as suítes de teste do projeto.
Por convenção, o Robot Framework sugere que as variáveis que tenham escopo global tenham seu nome escritos em letras MAÍSCULAS, para que torne fácil a identificação do seu escopo.
Variáveis de Test Suite
- São definidas no escopo de uma suíte de testes e estão disponíveis para todos os cenários de teste dessa suíte.
- Podem ser criadas usando a Seção Variables , importadas de arquivos de recursos e variáveis ou definidas durante a execução dos testes usando a keyword Set Suite Variable.
Exemplo:
Crie os arquivos abaixo em seu projeto.
No terminal, execute o comando abaixo, para que os cenários com a Tag suite_var sejam executados:
robot -i suite_var .
Você deverá ver o seguinte log de execução:
==============================================================================
Robot-Courses.Módulo 2.Tópico 2 - Variáveis
==============================================================================
Robot-Courses.Módulo 2.Tópico 2 - Variáveis.Suite Var1
==============================================================================
Criando Variável de Suite | PASS |
------------------------------------------------------------------------------
Utilizando Variável de Suite Criada por um Arquivo de Keyword .
Acessando variável criada em arquivo de keyword -> 0147_KW
Utilizando Variável de Suite Criada por um Arquivo de Keyword | PASS |
------------------------------------------------------------------------------
Utilizando Variável de Seção
Acessando a váriável de seção -> 456_section
.
Acessando variável criada em arquivo de keyword -> 0147_KW
Utilizando Variável de Seção | PASS |
------------------------------------------------------------------------------
Utilizando Variável de Suite Criada pela Set Suite Variables
Acessando a váriável de seção -> 123_suite
.
Acessando variável criada em arquivo de keyword -> 0147_KW
Utilizando Variável de Suite Criada pela Set Suite Variables | PASS |
------------------------------------------------------------------------------
Utilizando Variável de Suite Criada por um Arquivo de Variável
Acessando variável criada em arquivo de variável -> 789_FILE
.
Acessando variável criada em arquivo de keyword -> 0147_KW
Utilizando Variável de Suite Criada por um Arquivo de Variável | PASS |
------------------------------------------------------------------------------
Robot-Courses.Módulo 2.Tópico 2 - Variáveis.Suite Var1 | PASS |
5 tests, 5 passed, 0 failed
==============================================================================
Robot-Courses.Módulo 2.Tópico 2 - Variáveis.Suite Var4
==============================================================================
Acessando Variável de Suíte de Outra Suíte | FAIL |
Variable '${SUITE_VAR}' not found.
------------------------------------------------------------------------------
Robot-Courses.Módulo 2.Tópico 2 - Variáveis.Suite Var4 | FAIL |
1 test, 0 passed, 1 failed
==============================================================================
Agora vamos entender o que aconteceu:
- No arquivo suite_var1.robot:
- O cenário “Case 1” está criando uma variável com escopo de suíte nomeada ${SUITE_VAR}, utilizando a Keyword Set Suite Variable. A partir do momento da criação da variável, todas os cenários daquela suíte passarão a ter acesso a ela.
- O cenário “Case 2” utiliza a User Keyword nomeada de “Criando Variável de Suíte” criada no arquivo de recurso “suite_var2.robot“ para encapsular a criação de uma variável de suíte nomeada de${KW_SUITE_VAR}. E assim como no ponto anterior, a partir do momento em que a variável for criada, todas os cenários daquela suíte passarão a ter acesso a ela.
- O cenário “Case 3” utiliza o arquivo de variável “suite_var3.py“, importado na seção Settings. Nesse caso, como está sendo importado diretamente como Variables, a variável FILE_VAR é importada com o escopo de suíte, e também passará a ser acessada por todos os cenários da suíte na qual foi importada.
- O cenário “Case 4” utiliza a variável de seção ${SECTION_VAR}, que será criada com escopo de suíte, e também passará a ser acessada por todos os cenários da suíte na qual foi importada.
- O cenário “Case 5” utiliza todas as variáveis criadas e disponíveis para a suíte na quelas elas foram criadas ou importadas.
- No arquivo suite_var4.robot:
- O cenário “Case 6” demonstra que, as variáveis criadas na suíte anterior não estão disponíveis para esta suíte. Já que elas são apagadas da memória ao fim da execução da suíte que as criou.
Por terem uma heurística global dentro da suíte, por convenção, o Robot Framework sugere que as variáveis sejam nomeadas com letras MAIÚSCULAS.
Variáveis de Test Case
- São visíveis apenas dentro de um cenário de teste específico e também podem ser acessadas por palavras-chave personalizadas usadas nesse caso de teste.
- Podem ser definidas durante a execução do caso de teste usando a keyword Set Test Variable.
- Variáveis de teste não estão disponíveis em outros cenários de teste ou suítes.
Exemplo:
Crie os arquivos abaixo em seu projeto:
No terminal, execute o comando abaixo, para que os cenários com a tag test_var sejam executados:
robot -i test_var .
Você deverá ver o seguinte log de execução:
==============================================================================
Robot-Courses.Módulo 2.Tópico 2 - Variáveis.Test Var1
==============================================================================
Case 1: Criando Variável de Teste .
Acessando variável de teste -> TEST_123
Case 1: Criando Variável de Teste | PASS |
------------------------------------------------------------------------------
Case 2: Keyword acessando variável de teste .
Acessando variável de teste -> TEST_456
Case 2: Keyword acessando variável de teste | PASS |
------------------------------------------------------------------------------
Case 3: Acessando variável de teste de outro cenário | FAIL |
Variable '${test_var}' not found.
------------------------------------------------------------------------------
Robot-Courses.Módulo 2.Tópico 2 - Variáveis.Test Var1 | FAIL |
3 tests, 2 passed, 1 failed
==============================================================================
Vamos entender o que aconteceu:
- No arquivo test_var1.robot:
- O cenário “Case 1” está criando uma variável com escopo de teste, nomeada de ${test_var}, e a utilizando.
- O cenário “Case 2” está criando uma variável com escopo de teste, nomeada de ${test_var_2}, e a keyword “Utilizando Variável de Teste“, criada no arquivo test_var2.robot, está usando a variável. Nesse caso, vemos que a partir do momento que a variável é criada no escopo de teste, ela passa a ser acessível em qualquer keyword que compõe o corpo do cenário de teste. Ela será eliminada da memória logo que o cenário de teste for finalizado.
- O cenário “Case 3” demonstra que a variável ${test_var} criada no cenário Case 1 não está acessível para ele, causando uma falha na execução.
Por terem uma heurística global dentro do cenário de teste, por convenção, o Robot Framework sugere que as variáveis sejam nomeadas com letras MAIÚSCULAS.
Variáveis Locais
- São visíveis apenas dentro de uma keyword específica ou corpo de cenário de teste específico.
- Podem ser criadas usando variáveis de retorno de keywords executadas ou como argumentos em User Keywords.
Exemplo:
Crie os arquivos abaixo:
No terminal, execute o comando abaixo, para que os cenários com a tag local_var sejam executados:
robot -i local_var .
Você deverá ver o seguinte log de execução:
==============================================================================
Robot-Courses.Módulo 2.Tópico 2 - Variáveis.Local Var1
==============================================================================
Case 1: Criando Variável Local .
Acessando variável local -> LOCAL_123
Case 1: Criando Variável Local | PASS |
------------------------------------------------------------------------------
Case 2: Keyword tentando acessar variável local criada no corpo do... | FAIL |
Variable '${local_var}' not found.
------------------------------------------------------------------------------
Case 3: Keyword recebendo valor de variável local do cenário por a... .
Acessando variável local -> LOCAL_789
Case 3: Keyword recebendo valor de variável local do cenário por a... | PASS |
------------------------------------------------------------------------------
Case 4: Variável local criada por um retorno de keyword .
Acessando variável local -> LOCAL_147
Case 4: Variável local criada por um retorno de keyword | PASS |
------------------------------------------------------------------------------
Robot-Courses.Módulo 2.Tópico 2 - Variáveis.Loca Var1 | FAIL |
4 tests, 3 passed, 1 failed
==============================================================================
Vamos entender o que aconteceu:
- No arquivo local_var1.robot:
- O cenário “Case 1” está criando uma variável local, nomeada ${local_var}, e a utilizando
- O cenário “Case 2” está criando uma variável local, nomeada ${local_var_2}, e a keyword “Tentenado acessar variável local do cenário de teste“, importada do arquivo “local_var_2“, está tentando utilizá-la. Como a variável foi criada com escopo local, a keyword não tem acesso a ela, causando uma falha na execução do teste.
- O cenário “Case 3” está criando uma variável local, nomeada ${local_var_2}, e a keyword “Recebendo valor de uma variável local por argumento“, importada do arquivo “local_var_2“, está recebendo a variável local por meio de um argumento, tendo acesso ao valor armazenado na variável local.
- O cenário “Case 4” está usando a keyword “Retornando o valor de uma variável local de uma keyword“, importada do arquivo “local_var_2“, para criar uma variável local por meio de um retorno dessa keyword, e usando a variável.
Para se diferenciar dos outros escopos, que tem comportamentos globais, o Robot Framework sugere que as variáveis sejam nomeadas com letras minúsculas.
Pontos importantes
- Entenda o escopo: Compreenda claramente os diferentes escopos de variáveis. Saiba quando e onde cada tipo de variável deve ser usada.
- Evite vazamento de variáveis: Certifique-se de que as variáveis estão sendo usadas no escopo apropriado. Evite definir variáveis globais quando elas devem ser usadas apenas em um nível de suíte, teste ou local. Isso pode levar a vazamento de variáveis e causar resultados inesperados.
- Evite sobrescrever variáveis: Tenha cuidado ao nomear variáveis para evitar sobrescrever variáveis existentes com o mesmo nome. Certifique-se de usar nomes únicos para cada variável ou use escopos diferentes para evitar conflitos.
- Mantenha a consistência: Siga uma convenção de nomenclatura consistente ao nomear suas variáveis. Isso facilita a leitura e compreensão do código por você e por outros membros da equipe.
- Evite reutilizar variáveis: Evite reutilizar o mesmo nome de variável em diferentes partes do código. Isso pode levar a confusão e tornar o código mais difícil de entender e manter. É uma boa prática criar novas variáveis com nomes descritivos, mesmo que sejam usadas para armazenar valores semelhantes.
- Documente suas variáveis: Adicione comentários ou documentação adequada às suas variáveis para explicar seu propósito, escopo e qualquer informação relevante. Isso ajuda a evitar confusão e facilita a manutenção futura.