Gravar vídeo da automação na pipeline usando selenium/video

59 views
Skip to first unread message

Alexandre Mariano

unread,
May 30, 2023, 4:13:20 PM5/30/23
to Selenium Brasil
Olá, 

Estou com uma dificuldade em um processo que estou tentando realizar que é a gravação de evidências de testes quando eu adiciono essa automação a pipeline do gitlab-ci.

Quando estou executando a pipeline usando os seguintes services:
- selenium/standalone-chrome
- selenium/video 
Não está gerando arquivo de vídeo, pois o container do selenium/video não está conseguindo se conectar ao navegador do chrome pela rota "localhost:4444", isso eu consegui averiguar usando o comando "wget" dentro do container de cada um dos serviços (estou executando a pipeline utilizando runners locais que eu criei).

Abaixo segue informações que ajudam a entender melhor o cenário:
.gitlab-ci.yml - Que estou utilizando para executar na pipeline.
runners - Que estão configurados na minha máquina
console do container de video Quando está em execução na pipeline, mostrando que não está conseguindo se conectar ao selenium/video, diferente do exemplo abaixo
como o console deveria estar Quando está executando corretamente e se conectando ao navegador para realizar a gravação.

Acredito que seja um problema no gitlab de separar a rede destes dois containers, mas eu não sei como passar por essa situação!
Gostaria de saber se alguém já passou por essa situação e se poderia me ajudar neste caso!

Patrick Bressan Bremm

unread,
May 30, 2023, 4:22:10 PM5/30/23
to Alexandre Mariano, Selenium Brasil
Eu imagino que vc precisa usar o DNS do docker, que normalmente é o nome do service que você declarou no Docker Compose.

Se você não usa o Docker-Compose ai configura, ai fica fácil de fazer um container “ver o outro”.

Outra tentativa e setar um mesmo network para os containers.

--
Visite em https://groups.google.com/d/forum/selenium-brasil
---
Você recebeu essa mensagem porque está inscrito no grupo "Selenium Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para selenium-bras...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/selenium-brasil/d73bb660-b632-4879-917e-fac82d8ca2b5n%40googlegroups.com.

Alexandre Mariano

unread,
May 30, 2023, 4:33:24 PM5/30/23
to Selenium Brasil
Sem querer respondi apenas no seu privado ! ahhaha

Mas resumindo o que enviei ...
No arquivo gitlab-ci.yml já está configurado o "DISPLAY_CONTAINER_NAME" como localhost, que é o alias do selenium/standalone-chrome, além de eu já ter tentado usar o comando wget no localhost:4444 e a conexão não foi estabelecida.
Sobre a tentativa de setar a mesma rede, gostaria de exemplos sobre isso, pois o que encontrei na internet está em inglês,  e acredito que não consegui interpretar bem o conteúdo que encontrei, visto que não consegui resultado com o que tentava kkkkk.
Sobre o docker-compose, como o runner não está configurado para aceitar comandos docker interno, eu não tenho essa possibilidade, seria realmente usando o que o gitlab disponibiliza, pois com o docker-compose.yml localmente, eu consegui um resultado satisfatório desse cenário, porém precisava replicá-lo para a pipeline.

Patrick Bressan Bremm

unread,
May 30, 2023, 4:51:33 PM5/30/23
to Alexandre Mariano, Selenium Brasil
Tenta adaptar com esse exemplo que encontrei:

stages:
  - test

variables:
  SELENIUM_HOST: selenium__standalone-chrome
  SELENIUM_PORT: 4444

before_script:
  - apt-get update -qq && apt-get install -y -qq curl

# Configuração dos jobs de teste
test_job:
  image: python:3.9
  services:
    - selenium/standalone-chrome:latest
    - selenium/video:latest
  variables:
    SELENIUM_HOST: $SELENIUM_HOST
    SELENIUM_PORT: $SELENIUM_PORT
  stage: test
  script:
    - pip install selenium
    - python run_tests.py  # Substitua pelo comando de execução dos seus testes
  after_script:
    - curl -X POST \
        -H "Content-Type: application/json" \
        -d '{"state": "finished"}' \
        "http://$SELENIUM_HOST:$SELENIUM_PORT/wd/hub/session/$SELENIUM_SESSION_ID/stop_recording"


Talvez possa te ajudar...
Tenho impressão que assim não deve dar problema de rede... Não deveria ter segredo mesmo haha

Message has been deleted

Alexandre Mariano

unread,
May 30, 2023, 5:19:16 PM5/30/23
to Patrick Bressan Bremm, Selenium Brasil
Eu usei o código que você me enviou e adaptei para o seguinte formato: 

.before_script_templeate: &install-dependencies
  before_script:
    - pip install -r requirements.txt

    - apt-get update -qq && apt-get install -y -qq curl


stages:
  - "e2e"


variables:
  SELENIUM_HOST: selenium__standalone-chrome
  SELENIUM_PORT: 4444


e2e:
  image: python
  stage: e2e
  cache: []
  <<: *install-dependencies
  services:  
    - name: selenium/standalone-chrome:latest
      alias: localhost
    - name: selenium/video:latest

  variables:
    DISPLAY_CONTAINER_NAME: localhost
    FILE_NAME: chrome_video.mp4
    SELENIUM_HOST: $SELENIUM_HOST
    SELENIUM_PORT: $SELENIUM_PORT

  script:
    - chmod 777 ./execute_front.sh
    - ./execute_front.sh
    - echo "Guardando evidencia em video"
    - cp -r -i /videos .
  artifacts:
    name: "$CI_JOB_NAME-evidence"
    when: always
    expire_in: "1 days"
    paths:
      - "./videos"

after_script:
  - "curl -X POST -H 'Content-Type: application/json' -d '{\"state\": \"finished\"}' 'http://$SELENIUM_HOST:$SELENIUM_PORT/wd/hub/session/$SELENIUM_SESSION_ID/stop_recording'"

Porém, ao tentar executar, o comportamento se manteve o mesmo, o container do selenium/video aguardando conexão, e dando erro depois de um tempo, e depois novamente tentando conexão:

image.png

Apesar de executar alterando outra coisa, como por exemplo o "selenium_host" para "localhost" visto que eu preciso que o container do selenium/standalone-chrome, tenha como nome "localhost", ainda assim não funcionou, tentei setar o SELENIUM_HOST E O PORT nas variáveis dentro do serviço diretamente, e o resultado também foi o mesmo, o container não conseguir se conectar ao outro

Alexandre Mariano

unread,
May 30, 2023, 5:28:13 PM5/30/23
to Patrick Bressan Bremm, Selenium Brasil
Outra coisa, verifiquei também dentro dos containers do vídeo: https://hub.docker.com/layers/selenium/video/latest/images/sha256-1bd20f9f14fa8c89f9107e93b902c73c49f4df6d297366f8618bee870e08e248?context=explore
e do container do standalone-chrome: https://hub.docker.com/layers/selenium/standalone-chrome/latest/images/sha256-da6d0894a465c938a8134f44c1bfcc4e0adaca45296dc65d3fed87e1b6b8ee2f?context=explore

Que estas variáveis SELENIUM_HOST e PORT não existem, acredito que isso não vá fazer alteração no cenário atual.

Patrick Bressan Bremm

unread,
May 30, 2023, 6:52:28 PM5/30/23
to Alexandre Mariano, Selenium Brasil
Usei o Gpt, ele sugeriu uns pontos:
(vale pegar exemplos de outros yaml de builds diferentes pra validar se realmente está atribuindo as variaveis)

  1. Certifique-se de que o contêiner selenium/video esteja disponível e acessível para o contêiner de teste. Isso pode exigir que sua infraestrutura de execução do GitLab CI/CD permita a comunicação entre contêineres ou que você esteja usando uma configuração de rede que permita a comunicação adequada entre os contêineres.

  2. Verifique se as variáveis de ambiente DISPLAY_CONTAINER_NAME e FILE_NAME estão configuradas corretamente. Elas são usadas para definir o nome do contêiner de exibição do vídeo e o nome do arquivo de vídeo capturado, respectivamente.

  3. Certifique-se de que seu script de execução execute_front.sh esteja corretamente configurado para capturar o vídeo do contêiner selenium/video. Isso pode envolver o uso de comandos específicos do Selenium WebDriver para iniciar e parar a gravação de vídeo.

  4. Verifique se o contêiner selenium/video está configurado corretamente para capturar os vídeos de acordo com suas necessidades. Consulte a documentação oficial do selenium/video para entender melhor as opções e configurações disponíveis.

Alexandre Mariano

unread,
May 30, 2023, 10:26:11 PM5/30/23
to Patrick Bressan Bremm, Selenium Brasil
Essa questão da rede, realmente é algo que eu vou precisar pesquisar mais e aguardar pra ver se consigo chegar a uma solução, pois acredito que seja relacionado a isso mesmo, sobre o restante dos pontos, acredito que estão tudo ok, pois usando as mesmas configurações, eu consigo replicar normalmente o mesmo cenário no docker localmente, usando o docker compose.

Alexandre Mariano

unread,
May 31, 2023, 10:07:37 AM5/31/23
to Selenium Brasil
Gostaria de informar que consegui fazer rodar usando a seguinte pipeline:


.before_script_templeate: &install-dependencies
  before_script:
    - pip install -r requirements.txt

stages:
  - "e2e"


e2e:
  image: python
  stage: e2e
  cache: []
  <<: *install-dependencies
  services:
    - name: selenium/standalone-chrome
    - name: selenium/video
      variables:
        DISPLAY_CONTAINER_NAME: selenium__standalone-chrome
        FILE_NAME: chrome_video.mp4

  variables:
    FF_NETWORK_PER_BUILD: "true"
  script:
    - python teste.py

    - echo "Guardando evidencia em video"
    - cp -r -i /videos .
  artifacts:
    name: "$CI_JOB_NAME-evidence"
    when: always
    expire_in: "1 days"
    paths:
      - "./videos"

A situação que me restou para tentar corrigir agora é que ao terminar a pipeline, o container está encerrando antes da biblioteca interna do selenium/video poder salvar o vídeo corretamente, em vez de só um arquivo mp4 com alguns kb.
Reply all
Reply to author
Forward
0 new messages