From f39bdb612945ef6d407018421a87d3b522a42768 Mon Sep 17 00:00:00 2001 From: AndressaKarla Date: Mon, 25 Mar 2024 23:29:32 -0300 Subject: [PATCH] =?UTF-8?q?V=C3=A1rias=20refatora=C3=A7=C3=B5es=20gerais:?= =?UTF-8?q?=20base=5Furl,=20fixtures,=20README,=20nomes=20de=20m=C3=A9todo?= =?UTF-8?q?s,=20etc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...utomatizados-web-front-serve-rest-ruby.yml | 13 +++++-- .gitignore | 4 +- README.md | 38 ++++++++++--------- features/pages/cadastro_page.rb | 2 +- features/pages/login_page.rb | 2 +- features/step_definitions/common_steps.rb | 4 +- .../login_cadastre_se_step.rb | 2 +- .../step_definitions/login_entrar_step.rb | 6 +-- features/support/env.rb | 2 +- features/support/environments/dev.yml | 2 +- features/support/environments/local.yml | 2 +- features/support/fixtures/login.example.json | 14 +++++++ features/support/fixtures/login.json | 14 ------- .../support/fixtures/usuario.example.json | 23 +++++++++++ features/support/fixtures/usuario.json | 18 --------- features/support/hooks.rb | 20 +++++++--- 16 files changed, 94 insertions(+), 72 deletions(-) create mode 100644 features/support/fixtures/login.example.json delete mode 100644 features/support/fixtures/login.json create mode 100644 features/support/fixtures/usuario.example.json delete mode 100644 features/support/fixtures/usuario.json diff --git a/.github/workflows/workflow-testes-automatizados-web-front-serve-rest-ruby.yml b/.github/workflows/workflow-testes-automatizados-web-front-serve-rest-ruby.yml index 89156ba..995ef47 100644 --- a/.github/workflows/workflow-testes-automatizados-web-front-serve-rest-ruby.yml +++ b/.github/workflows/workflow-testes-automatizados-web-front-serve-rest-ruby.yml @@ -18,18 +18,23 @@ jobs: steps: - name: Passo 1 - Obter cópia do código-fonte do repositório uses: actions/checkout@v3 + + - name: Passo 2 - Redirecionar os conteúdos de "secrets.LOGIN_ENV", "secrets.USUARIO_ENV", para os arquivos "login.json", "usuario.json", etc + run: | + echo '${{ secrets.LOGIN_ENV }}' > ./features/support/fixtures/login.json + echo '${{ secrets.USUARIO_ENV }}' > ./features/support/fixtures/usuario.json - - name: Passo 2 - Instalar ruby e Instalar dependências + - name: Passo 3 - Instalar ruby e Instalar dependências uses: ruby/setup-ruby@v1 with: ruby-version: '3.1.2' # executa o comando bundle install e armazena as gems instaladas automaticamente bundler-cache: true - - name: Passo 3 - Executar testes no navegador chrome em modo headless (2º plano) em um ambiente de desenvolvimento e Gerar os resultados dos testes + - name: Passo 4 - Executar testes no navegador chrome em modo headless (2º plano) em um ambiente de desenvolvimento e Gerar os resultados dos testes run: bundle exec cucumber -p ci - - name: Passo 4 - Armazenar os resultados dos testes em relatório html + - name: Passo 5 - Armazenar os resultados dos testes em relatório html uses: actions/upload-artifact@v3 # expressão condicional para que sempre seja executado independentemente dos resultados dos steps anteriores if: ${{ always() }} @@ -39,7 +44,7 @@ jobs: # armazena o relatório html por 30 dias retention-days: 30 - - name: Passo 5 - Armazenar os resultados dos testes em screenshots + - name: Passo 6 - Armazenar os resultados dos testes em screenshots uses: actions/upload-artifact@v3 if: ${{ always() }} with: diff --git a/.gitignore b/.gitignore index 73faec8..70407cc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ *.log Gemfile.lock -relatorio-web-front-serve-rest-ruby.* \ No newline at end of file +relatorio-web-front-serve-rest-ruby.* +features/support/fixtures/*.json +!features/support/fixtures/*.example.json \ No newline at end of file diff --git a/README.md b/README.md index e88f8da..7f19d08 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Esse projeto "testes-automatizados-web-front-serve-rest_ruby" é executado em um ## :triangular_flag_on_post: Executar os testes automatizados web no navegador chrome em modo headless (2° plano) e Gerar os resultados dos testes no GitHub Actions - Nesse repositório, acessar a aba "Actions" - Na seção "Actions", clicar em "Pipeline Testes Automatizados Web Front ServeRest Ruby" -- Em "This workflow has a workflow_dispatch event trigger.", clicar em "Run workflow" > "Run workflow" para executar os testes automatizados web no navegador chrome em modo headless (2° plano) no GitHub Actions +- Em "This workflow has a workflow_dispatch event trigger.", clicar em "Run workflow" > "Run workflow" para executar os testes automatizados web no navegador chrome em modo headless (2° plano) no GitHub Actions [com os conteúdos de "secrets.LOGIN_ENV", "secrets.USUARIO_ENV", etc (baseado nos arquivos ["login.example.json"](https://github.com/AndressaKarla/testes-automatizados-web-front-serve-rest_ruby/blob/main/features/support/fixtures/login.example.json), ["usuario.example.json"](https://github.com/AndressaKarla/testes-automatizados-web-front-serve-rest_ruby/blob/main/features/support/fixtures/usuario.example.json), etc, e configurados na aba "Settings" desse repositório > "Secrets and variables" > "Actions" > "Secrets" > "Repository secrets") que foram redirecionados para os arquivos "login.json", "usuario.json"] - Após o término da execução, clicar na run "Pipeline Testes Automatizados Web Front ServeRest Ruby" - Na seção "Artifacts", clicar em "relatorio_html_chrome" - Na janela aberta, escolher um diretório para baixar a pasta compactada "relatorio_html_chrome.zip" @@ -144,20 +144,6 @@ ruby -v ``` ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x64-mingw-ucrt] ``` - - -## :hammer_and_wrench: Cucumber versão 8.0.0 -- No cmder ou terminal aberto anteriormente, informar o comando abaixo para instalar o cucumber versão 8.0.0 -``` -gem install cucumber -v 8.0.0 -``` - - -## :hammer_and_wrench: Rspec versão 3.12.0 -- No cmder aberto anteriormente, informar o comando abaixo para instalar o rspec versão 3.12.0 -``` -gem install rspec -v 3.12.0 -``` - Fechar esse cmder ou terminal ## :hammer_and_wrench: Baixar, instalar e configurar o git @@ -204,7 +190,6 @@ C:\Users\usuario\Desktop\testes-automatizados-web-front-serve-rest_ruby ``` bundle install ``` -- Fechar esse cmder ## :hammer_and_wrench: Instalar as extensões no Visual Studio Code (VS Code) - Caso ainda não tenha o VS Code baixado e instalado, acessar o site do [Visual Studio Code](https://code.visualstudio.com/download), baixar e instalar com a opção "System Installer" @@ -234,7 +219,24 @@ bundle install - Snippets and Syntax Highlight for Gherkin (Cucumber) - Euclidity -- Fechar o VS Code +## :bookmark_tabs: Abrir o VS Code diretamente na pasta do projeto "testes-automatizados-web-front-serve-rest_ruby" +- No cmder aberto anteriormente, informar o comando abaixo para abrir o VS Code diretamente na pasta do projeto "testes-automatizados-web-front-serve-rest_ruby" +``` +code . +``` +- Aguardar o VS Code ser aberto +- Fechar esse cmder +- No VS Code aberto, caso seja apresentado "Do you trust the authors on the files in this folder?", marcar a opção "Trust the authors of all files in the parent folder ...." + - Clicar no botão "Yes, I trust the authors ...." + +## :hammer_and_wrench: Criar arquivos "login.json", "usuario.json", informando os dados com base nos arquivos "login.example.json", "usuario.example.json", etc +- No VS Code aberto anteriormente, acessar "features > support > fixtures" +- Criar o arquivo "login.json" + - Informar os dados com base no arquivo ["login.example.json"](https://github.com/AndressaKarla/testes-automatizados-web-front-serve-rest_ruby/blob/main/features/support/fixtures/login.example.json) + - Salvar o arquivo "login.json" com os dados informados anteriormente +- Criar o arquivo "usuario.json" + - Informar os dados com base no arquivo ["usuario.example.json"](https://github.com/AndressaKarla/testes-automatizados-web-front-serve-rest_ruby/blob/main/features/support/fixtures/usuario.example.json) + - Salvar o arquivo "usuario.json" com os dados informados anteriormente --- # :dart: Executar testes em um ambiente de desenvolvimento e Gerar os resultados dos testes no computador @@ -271,7 +273,7 @@ bundle exec cucumber ``` ## :triangular_flag_on_post: Ou executar os testes automatizados web no navegador chrome em modo headless (2° plano) e Gerar os resultados dos testes no computador -- No cmder aberto anteriormente, informar o comando abaixo para executar todas as features e/ou cenários do projeto em modo headless (2° plano - mesmo modo e comando que é utilizado no "Passo 3" da "Pipeline Testes Automatizados Web Front ServeRest Ruby" em ".github > workflows > [workflow-testes-automatizados-web-front-serve-rest-ruby.yml](https://github.com/AndressaKarla/testes-automatizados-web-front-serve-rest_ruby/blob/main/.github/workflows/workflow-testes-automatizados-web-front-serve-rest-ruby.yml)" no GitHub Actions) e Gerar os resultados dos testes no computador: +- No cmder aberto anteriormente, informar o comando abaixo para executar todas as features e/ou cenários do projeto em modo headless (2° plano - mesmo modo e comando que é utilizado no "Passo 4" da "Pipeline Testes Automatizados Web Front ServeRest Ruby" em ".github > workflows > [workflow-testes-automatizados-web-front-serve-rest-ruby.yml](https://github.com/AndressaKarla/testes-automatizados-web-front-serve-rest_ruby/blob/main/.github/workflows/workflow-testes-automatizados-web-front-serve-rest-ruby.yml)" no GitHub Actions) e Gerar os resultados dos testes no computador: ``` bundle exec cucumber -p ci ``` diff --git a/features/pages/cadastro_page.rb b/features/pages/cadastro_page.rb index 41a6963..017e6ee 100644 --- a/features/pages/cadastro_page.rb +++ b/features/pages/cadastro_page.rb @@ -9,7 +9,7 @@ class Cadastro < SitePrism::Page element :botao_cadastrar, 'button[type="submit"]' element :rolagem_tela, 'small[class="message form-text"]' - def cadastrar_admin(nome, email, senha) + def realizar_login_admin_opcao_cadastre_se(nome, email, senha) campo_nome.click campo_nome.set nome diff --git a/features/pages/login_page.rb b/features/pages/login_page.rb index 9b87667..d83ae5b 100644 --- a/features/pages/login_page.rb +++ b/features/pages/login_page.rb @@ -10,7 +10,7 @@ class Login < SitePrism::Page element :rolagem_tela, 'small[class="message form-text"]' element :opcao_cadastre_se, 'a[type="button"]' - def realizar_login_entrar(email, senha) + def realizar_login_botao_entrar(email, senha) campo_email.click campo_email.set email diff --git a/features/step_definitions/common_steps.rb b/features/step_definitions/common_steps.rb index 53a9c6b..6e96d33 100644 --- a/features/step_definitions/common_steps.rb +++ b/features/step_definitions/common_steps.rb @@ -13,7 +13,7 @@ # Esquema do Cenario: Validar Pesquisar Produtos - produto não cadastrado Dado('que eu informe os campos de email e senha de um usuário administrador') do @login_fixture = carregar_fixture('login') - login.realizar_login_entrar(@login_fixture['admin_valido1']['email_valido1'], @login_fixture['admin_valido1']['senha_valida1']) + login.realizar_login_botao_entrar(@login_fixture['admin_valido1']['email_valido1'], @login_fixture['admin_valido1']['senha_valida1']) end Dado('que eu esteja na tela Home') do @@ -53,7 +53,7 @@ # Esquema do Cenario: Validar Pesquisar Produtos - produto cadastrado # Esquema do Cenario: Validar Pesquisar Produtos - produto não cadastrado Dado('que eu informe os campos de {string} e {string} do usuário padrão cadastrado anteriormente') do |email, senha| - login.realizar_login_entrar(@usuario_fixture['padrao_valido1'][email], @usuario_fixture['padrao_valido1'][senha]) + login.realizar_login_botao_entrar(@usuario_fixture['padrao_valido1'][email], @usuario_fixture['padrao_valido1'][senha]) end Dado('que eu esteja na tela Home Serverest Store') do diff --git a/features/step_definitions/login_cadastre_se_step.rb b/features/step_definitions/login_cadastre_se_step.rb index 23fb674..8479423 100644 --- a/features/step_definitions/login_cadastre_se_step.rb +++ b/features/step_definitions/login_cadastre_se_step.rb @@ -10,7 +10,7 @@ Quando('eu informar os campos {string}, {string}, {string} e opcão Cadastrar como administrador') do |nome, email, senha| @usuario_fixture = carregar_fixture('usuario') - cadastro.cadastrar_admin(@usuario_fixture['admin1'][nome], @usuario_fixture['admin1'][email], @usuario_fixture['admin1'][senha]) + cadastro.realizar_login_admin_opcao_cadastre_se(@usuario_fixture['admin1'][nome], @usuario_fixture['admin1'][email], @usuario_fixture['admin1'][senha]) end Então('na tela de Cadastro deverá apresentar a mensagem "{string}"') do |mensagem_esperada| diff --git a/features/step_definitions/login_entrar_step.rb b/features/step_definitions/login_entrar_step.rb index 10cc24c..1775808 100644 --- a/features/step_definitions/login_entrar_step.rb +++ b/features/step_definitions/login_entrar_step.rb @@ -1,7 +1,7 @@ # Esquema do Cenario: Validar Login usuário administrador Quando('eu informar os campos de {string} e {string} de um usuário administrador') do |email, senha| @login_fixture = carregar_fixture('login') - login.realizar_login_entrar(@login_fixture['admin_valido1'][email], @login_fixture['admin_valido1'][senha]) + login.realizar_login_botao_entrar(@login_fixture['admin_valido1'][email], @login_fixture['admin_valido1'][senha]) end Então('deverá apresentar a tela Home com o texto Bem Vindo') do @@ -15,7 +15,7 @@ # Esquema do Cenario: Validar Login usuário padrão Quando('eu informar os campos de {string} e {string} do usuário padrão cadastrado anteriormente') do |email, senha| - login.realizar_login_entrar(@usuario_fixture['padrao_valido1'][email], @usuario_fixture['padrao_valido1'][senha]) + login.realizar_login_botao_entrar(@usuario_fixture['padrao_valido1'][email], @usuario_fixture['padrao_valido1'][senha]) end Então('deverá apresentar a tela Home Serverest Store') do @@ -28,7 +28,7 @@ # Esquema do Cenario: Validar Login usuários inválidos Quando('eu informar os campos de {string}, {string} incorretamente') do |email, senha| @login_fixture = carregar_fixture('login') - login.realizar_login_entrar(@login_fixture['invalido1'][email], @login_fixture['invalido1'][senha]) + login.realizar_login_botao_entrar(@login_fixture['invalido1'][email], @login_fixture['invalido1'][senha]) end Então('na tela Login deverá apresentar a mensagem "{string}"') do |mensagem_esperada| diff --git a/features/support/env.rb b/features/support/env.rb index 000d658..bc0fcff 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -26,6 +26,6 @@ config.default_driver = :selenium_chrome end - config.app_host = CONFIG['url_default'] + config.app_host = CONFIG['base_url'] config.default_max_wait_time = 10 end \ No newline at end of file diff --git a/features/support/environments/dev.yml b/features/support/environments/dev.yml index d787fe1..cdf7b03 100644 --- a/features/support/environments/dev.yml +++ b/features/support/environments/dev.yml @@ -1,2 +1,2 @@ -url_default: 'https://front.serverest.dev' +base_url: 'https://front.serverest.dev' base_uri: 'https://serverest.dev' \ No newline at end of file diff --git a/features/support/environments/local.yml b/features/support/environments/local.yml index 3d67161..233922c 100644 --- a/features/support/environments/local.yml +++ b/features/support/environments/local.yml @@ -1,2 +1,2 @@ -url_default: 'http://localhost:3001' +base_url: 'http://localhost:3001' base_uri: 'https://serverest.dev' \ No newline at end of file diff --git a/features/support/fixtures/login.example.json b/features/support/fixtures/login.example.json new file mode 100644 index 0000000..b764a63 --- /dev/null +++ b/features/support/fixtures/login.example.json @@ -0,0 +1,14 @@ +{ + "admin_valido1": { + "email_valido1": "informar-mesmo-email-usuario-admin-valido-fixture-usuario@qa.com", + "senha_valida1": "informar-mesma-senha-usuario-admin-valido-fixture-usuario" + }, + "invalido1": { + "email_invalido_vazio1": "deixar-apenas-as-aspas-duplas", + "senha_invalida_vazia1": "deixar-apenas-as-aspas-duplas", + "email_invalido_dominio_sem_ponto1": "informar-email-usuario-invalido-dominio-sem-ponto@outlook", + "senha_valida2": "informar-senha-usuario-valido", + "email_invalido_nao_cadastrado1": "informar-email-usuario-invalido-nao-cadastrado@gmail.com", + "senha_invalida_nao_cadastrada1": "informar-senha-usuario-invalido-nao-cadastrada" + } +} \ No newline at end of file diff --git a/features/support/fixtures/login.json b/features/support/fixtures/login.json deleted file mode 100644 index 5143a26..0000000 --- a/features/support/fixtures/login.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "admin_valido1": { - "email_valido1": "fulano@qa.com", - "senha_valida1": "teste" - }, - "invalido1": { - "email_invalido_vazio1": "", - "senha_invalida_vazia1": "", - "email_invalido_dominio_sem_ponto1": "usuario4@outlook", - "senha_valida2": "teste2", - "email_invalido_nao_cadastrado1": "usuario5@gmail.com", - "senha_invalida_nao_cadastrada1": "teste3" - } -} \ No newline at end of file diff --git a/features/support/fixtures/usuario.example.json b/features/support/fixtures/usuario.example.json new file mode 100644 index 0000000..a430d45 --- /dev/null +++ b/features/support/fixtures/usuario.example.json @@ -0,0 +1,23 @@ +{ + "admin_valido1": { + "nome_valido1": "informar-nome-usuario-admin-valido", + "email_valido1": "informar-mesmo-email-usuario-admin-valido-fixture-login@qa.com", + "senha_valida1": "informar-mesma-senha-usuario-admin-valido-fixture-login" + }, + "admin1": { + "nome_valido1": "informar-outro-nome-usuario-admin-valido", + "email_valido1": "informar-outro-email-usuario-admin-valido@gmail.com", + "senha_valida1": "informar-outra-senha-usuario-admin-valido", + "nome_invalido_vazio1": "deixar-apenas-as-aspas-duplas", + "email_invalido_vazio1": "deixar-apenas-as-aspas-duplas", + "senha_invalida_vazia1": "deixar-apenas-as-aspas-duplas", + "nome_valido2": "informar-outro-nome-usuario-admin-valido", + "email_invalido_dominio_sem_ponto1": "informar-email-usuario-admin-invalido-dominio-sem-ponto@yahoo", + "senha_valida2": "informar-outra-senha-usuario-admin-valido" + }, + "padrao_valido1": { + "nome_valido3": "informar-nome-usuario-padrao-valido", + "email_valido2": "informar-email-usuario-padrao-valido@outlook.com", + "senha_valida3": "informar-senha-usuario-padrao-valido" + } +} \ No newline at end of file diff --git a/features/support/fixtures/usuario.json b/features/support/fixtures/usuario.json deleted file mode 100644 index 49ace3c..0000000 --- a/features/support/fixtures/usuario.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "admin1": { - "nome_valido1": "Usuario Admin2", - "email_valido1": "usuario.admin2@gmail.com", - "senha_valida1": "teste1234", - "nome_invalido_vazio1": "", - "email_invalido_vazio1": "", - "senha_invalida_vazia1": "", - "nome_valido2": "Usuario Admin3", - "email_invalido_dominio_sem_ponto1": "usuario.admin3@yahoo", - "senha_valida2": "teste1235" - }, - "padrao_valido1": { - "nome_valido3": "Usuario Padrao", - "email_valido2": "usuario.padrao@outlook.com", - "senha_valida3": "teste1236" - } -} \ No newline at end of file diff --git a/features/support/hooks.rb b/features/support/hooks.rb index a686f13..538cba7 100644 --- a/features/support/hooks.rb +++ b/features/support/hooks.rb @@ -1,6 +1,6 @@ Before do |scenario| - def obter_por_email_e_excluir_usuario_por_id(base_uri, email_usuario) - retorno_get = HTTParty.get("#{base_uri}/usuarios?email=#{email_usuario}") + def obter_por_email_e_excluir_usuario_por_id(base_uri, email) + retorno_get = HTTParty.get("#{base_uri}/usuarios?email=#{email}") if retorno_get["quantidade"] == 1 id_usuario_retornado = retorno_get["usuarios"][0]["_id"] @@ -8,13 +8,21 @@ def obter_por_email_e_excluir_usuario_por_id(base_uri, email_usuario) end end + def obter_por_email_e_incluir_usuario_admin(base_uri, nome, email, senha) + retorno_get = HTTParty.get("#{base_uri}/usuarios?email=#{email}") + + if retorno_get["quantidade"] == 0 + HTTParty.post("#{base_uri}/usuarios", headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: { nome: nome, email: email, password: senha, administrador: "true" }.to_json) + end + end + usuario_fixture = carregar_fixture('usuario') - email_usuario_padrao_valido1 = usuario_fixture['padrao_valido1']['email_valido2'] - email_usuario_admin_valido1 = usuario_fixture['admin1']['email_valido1'] $base_uri = CONFIG['base_uri'] - obter_por_email_e_excluir_usuario_por_id($base_uri, email_usuario_padrao_valido1) - obter_por_email_e_excluir_usuario_por_id($base_uri, email_usuario_admin_valido1) + obter_por_email_e_excluir_usuario_por_id($base_uri, usuario_fixture['padrao_valido1']['email_valido2']) + obter_por_email_e_excluir_usuario_por_id($base_uri, usuario_fixture['admin1']['email_valido1']) + + obter_por_email_e_incluir_usuario_admin($base_uri, usuario_fixture['admin_valido1']['nome_valido1'], usuario_fixture['admin_valido1']['email_valido1'], usuario_fixture['admin_valido1']['senha_valida1']) Capybara.current_session.driver.browser.manage.delete_all_cookies Capybara.page.driver.browser.manage.window.resize_to(1280, 720)