Как обрабатывать асинхронный запрос/ответ в рамках теста Gitlab CI/CD

Я хочу перейти с Jenkins на GitLab CI/CD. В настоящее время мы используем подключаемый модуль BlazeMeter для Jenkins для запуска функциональных тестов GUI на Blazemeter в рамках задания Jenkins.

К сожалению, у BlazeMeter нет плагина для GitLab, но есть простой JSON API для запуска тестов.

Поскольку тесты могут выполняться долго, Blazemeter API является асинхронным. Одна конечная точка cUrl используется для запуска теста, а другая — для опроса и получения результатов (передача идентификатора, возвращенного при первом вызове).

Каков наилучший способ обработки этого асинхронного процесса в рамках задания GitLab CI Pipeline и что представляет собой пример gitlab yaml?


person Fred    schedule 10.01.2020    source источник


Ответы (3)


GitLab имеет функцию триггера веб-перехватчика или конвейера, которую вы можете вызывать из любого места. Также у blazemeter есть уведомления через веб-хуки. Объединение этих двух факторов решит вашу проблему без долгого выполнения одного задания до завершения теста.

test-trigger:
  stage: test
  script:
    - # curl command to invoke test
  except:
    - triggers

test-completion:
  stage: test
  script:
    - # reporting script
  only:
   - triggers

Следующие ресурсы помогут вам начать работу.

person Ruwanka Madhushan    schedule 27.05.2021

общее решение заключается в использовании сценария оболочки/cmd для управлять циклами для gitlab-ci.

build:
  stage: runBlazeMeter
  script:
    - echo "START test run"
      echo "use curl to initiate test"
      COUNT=0
      while
        COUNT=$((COUNT + 1))
        echo "use curl to query test completion"
        RES=$(curl --silent https://jsonplaceholder.typicode.com/users/${COUNT} | wc -c)
        [ $RES -gt 3 ]
      do :; done
      echo "END test run"
person Richard    schedule 27.05.2021

Для этого можно использовать два этапа, используя артефакты для копирования идентификатора с одного этапа на другой.

start-test:
  stage: test
  artifacts:
    untracked: true
  script:
    - curl http://run/the/test > testid.json

test:
  stage: test
  dependencies: 
    - start-test
  script:
    - TESTID=`cat testid.json`
      while
        sleep 1000
        RES=$(curl https://test/status/${TESTID} | grep "COMPLETE")
        [ $RES -gt 0 ]
      do :; done
      echo "TEST COMPLETE"
person codebreach    schedule 27.05.2021