Frequentemente precisamos escrever testes e2e para verificação de processos que solicitam recursos protegidos ou que exigem credenciais apropriadas. Por exemplo, um formulário de login que espera um nome de usuário e senha válidos, um terminal que usa uma chave API ou uma solicitação HTTP que precisa de um token verificável. Uma das abordagens comuns é salvar os dados protegidos como variáveis de ambiente.
O Cypress oferece várias maneiras de trabalhar com variáveis de ambiente. Em sua documentação sobre variáveis de ambiente são listadas diferentes opções demonstrando o seu uso, e também prós e contras de cada abordagem.
Variáveis de ambiente são muito úteis quando:
- Os valores são diferentes nas máquinas do desenvolvedor;
- Os valores são diferentes em vários ambientes: dev, staging, qa, prod, hml, sandbox;
- Os valores são altamente dinâmicos e mudam com frequência;
- Você pode alterar facilmente as variáveis de ambiente, especialmente quando estiver executando em CI;
- Você está lidando com credenciais que não podem ser expostas por segurança;
Ao invés de colocar diretamente no seu código
cy.request('https://api.acme.corp') // this will break on other environments`
Você pode mover para uma variável de ambiente Cypress como exemplificado abaixo, em que foi criada uma variável de ambiente chamada EXTERNAL_API deixando o código com uma melhor manutenibilidade e liberdade de execução em diferentes ambientes.
cy.request(Cypress.env('EXTERNAL_API')) // this will point to a dynamic env var
Existem diferentes formas de definir variáveis de ambiente. Cada uma delas tem um caso de uso ligeiramente diferente.E nesse tutorial vamos nos concentrar em duas opções: configuration file e cypress.env.json. Você não deve se sentir obrigado a escolher apenas um método, inclusive na documentação você terá acesso a outros métodos.
Quando você executa seus testes, você pode usar a função Cypress.env para acessar os valores de suas variáveis de ambiente.
Qualquer par de chave/valor que você definir em seu arquivo de configuração (cypress.json por padrão) na chave env se tornará uma variável de ambiente.
{
"projectId": "128076ed-9868-4e98-9cef-98dd7a705d75",
"env": {
"login_url": "/login",
"login_user": "usuariomaster",
"login_password": "Senha123"
}
}
E no arquivo de teste você chamará as variáveis da seguinte maneira:
Cypress.env() // { "login_url": "/login","login_user":"usuariomaster","login_password": "Senha123"}
Cypress.env('login_url') // '/login'
Cypress.env('login_user') // 'usuariomaster'
Cypress.env('login_password') // 'Senha123'
Essa opção é ótima para valores que precisam ser verificados no controle de origem e permanecem os mesmos em todas as máquinas.
A desvantagem dessa opção é que ela só funciona para valores que devem ser iguais em todas as máquinas.
Alternativamente, você pode decidir criar seu próprio arquivo cypress.env.json que o Cypress verificará automaticamente. Os valores neste arquivo sobrescreverão variáveis de ambiente conflitantes em seu arquivo de configuração (cypress.json por padrão).
Esta é uma estratégia muito útil porque, se você adicionar cypress.env.json ao seu arquivo .gitignore, os valores no arquivo podem ser diferentes para cada máquina de desenvolvedor ou ambiente sem nenhum problema.
{
"host": "testandoapi.dev.local",
"api_server": "http://localhost:8080/api/v1/"
}
E no arquivo de teste você chamará as variáveis da seguinte maneira:
Cypress.env() // {host: 'testandoapi.dev.locall', api_server: 'http://localhost:8888/api/v1'}
Cypress.env('host') // 'testandoapi.dev.local'
Cypress.env('api_server') // 'http://localhost:8888/api/v1/'
- Esta opção fornece um arquivo dedicado apenas para variáveis de ambiente.
- Isso permitirá que você gere este arquivo a partir de outros processos de construção.
- Os valores podem ser diferentes em cada máquina (se não for verificado no controle de origem).
- Esta opção suporta campos aninhados (objetos), por exemplo, {testUser: {nome: '...', email: '...'}}.
- Este é outro arquivo com o qual você tem que lidar.
- Pode ser um exagero para 1 ou 2 variáveis de ambiente.