Я использую многопроектный конвейер, чтобы отделить свои сквозные тесты от основного кода приложения. Завершение конечных тестов, если я запустил полный комплект, может занять значительное время. Я красиво разбил их на различные группы, используя pytest
и его функцию mark
.
Я хотел бы иметь возможность запускать определенные c сценарии ios из конвейера, установив каждый из этих сценариев от ios до when: manual
. К сожалению, как только я добавляю это, дочерний конвейер сообщает об ошибке родителю, и прогресс останавливается. Я могу вручную запустить каждый раздел, как и ожидалось, но даже в этом случае родительскому конвейеру не сообщается об успехе.
Пример конвейера GitLab
Это пример конвейера. Шаг Integration Tests
сообщил об ошибке, и я вручную запустил Fast Tests
из нисходящего конвейера. Он прошел, и как единственное задание в конвейере проходит весь последующий трубопровод. Тем не менее, родительский объект по-прежнему сообщает об ошибке, поэтому Deploy
не запускается.
Если я удалю when: manual
из нисходящего конвейера, Integration Tests
запустит полный набор тестов, пройдет успешно, а Deploy
будет двигайтесь дальше, как ожидалось.
Это конвейер родительского проекта.
image: "python:3.7"
before_script:
- python --version
- pip install -r requirements.txt
- export PYTHONPATH=${PYTHONPATH}:./src
- python -c "import sys;print(sys.path)"
stages:
- Static Analysis
- Local Tests
- Integration Tests
- Deploy
mypy:
stage: Static Analysis
script:
- mypy .
flake8:
stage: Static Analysis
script:
- flake8 --max-line-length=88
pytest-smoke:
stage: Local Tests
script:
- pytest -m smoke
pytest-unit:
stage: Local Tests
script:
- pytest -m unittest
pytest-slow:
stage: Local Tests
script:
- pytest -m slow
pytest-fast:
stage: Local Tests
script:
- pytest -m fast
int-tests:
stage: Integration Tests
trigger:
project: andy/gitlab-integration-testing-integration-tests
strategy: depend
deploy:
stage: Deploy
when: manual
script:
- echo "Deployed!"
Конвейер сквозных тестов выглядит следующим образом:
image: "python:3.7"
before_script:
- python --version
- pip install -r requirements.txt
- export PYTHONPATH=${PYTHONPATH}:./src
- python -c "import sys;print(sys.path)"
stages:
- Fast Tests
pytest-smoke:
stage: Fast Tests
when: manual
script:
- pytest -m smoke
Как я могу выборочно (вручную) запускать последующие задания и сообщать об успехе родительскому конвейеру? Без when: manual
на последнем этапе сквозного (нисходящего) конвейера он работает именно так, как я хочу. Но в реальном мире, который у меня есть, я не хочу проводить непрерывные тесты для всего. Обычно выбирается сценарий ios.
Сейчас я использую: GitLab Enterprise Edition 13.2.2-ee