Docker - Web UI Tests #42
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Docker - Web UI Tests | |
env: | |
TAGS: web_tests | |
BASE_URL: https://opensource-demo.orangehrmlive.com | |
HRM_USER_NAME: ${{ secrets.HRM_USER_NAME }} | |
HRM_PASSWORD: ${{ secrets.HRM_PASSWORD }} | |
PROJECT_LOCATION: ${{ github.workspace }} | |
USING_DOCKER: 'True' | |
on: | |
schedule: | |
- cron: '0 23 * * *' | |
workflow_dispatch: | |
inputs: | |
tags: | |
description: Gherkin Tags | |
required: true | |
default: web_tests | |
baseurl: | |
description: Base URL | |
required: true | |
type: choice | |
default: https://opensource-demo.orangehrmlive.com | |
options: | |
- https://opensource-demo.orangehrmlive.com | |
- other | |
inputurl: | |
description: Other than default Base URL (e.g portal url) | |
required: true | |
default: https://opensource-demo.orangehrmlive.com | |
browser: | |
description: Browser Name | |
required: true | |
type: choice | |
default: chrome | |
options: | |
- chrome | |
- firefox | |
- edge | |
jobs: | |
web-scheduled-regression: | |
if: github.event_name == 'schedule' | |
strategy: | |
max-parallel: 1 | |
fail-fast: false | |
matrix: | |
include: | |
- name: Linux Chrome | |
baseurl: https://opensource-demo.orangehrmlive.com | |
tags: web_tests | |
config_file: ./env_configs/docker_chrome.json | |
html_report: linux-chrome | |
concurrent_thread: 3 | |
- name: Linux Firefox | |
baseurl: https://opensource-demo.orangehrmlive.com | |
tags: web_tests and firefox | |
config_file: ./env_configs/docker_firefox.json | |
html_report: linux-firefox | |
concurrent_thread: 3 | |
- name: Linux Edge | |
baseurl: https://opensource-demo.orangehrmlive.com | |
tags: web_tests | |
config_file: ./env_configs/docker_edge.json | |
html_report: linux-edge | |
concurrent_thread: 3 | |
name: ${{ matrix.name }} - Regression | |
runs-on: ubuntu-latest | |
steps: | |
- name: Setup Python | |
id: setup_python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.9" | |
- name: Check out code | |
id: co_code | |
if: steps.setup_python.outcome == 'success' | |
uses: actions/checkout@v4 | |
- name: Set up Docker | |
id: docker_env_setup | |
if: steps.co_code.outcome == 'success' | |
uses: docker/setup-buildx-action@v3 | |
- name: Build and start Docker Compose services | |
id: docker_compose | |
if: steps.docker_env_setup.outcome == 'success' | |
run: | | |
docker compose --file docker-compose.yml up -d | |
- name: Wait for services to start | |
run: sleep 30 | |
- name: Setup dependencies | |
id: setup_dependencies | |
run: | | |
sh setup_install.sh | |
- name: Run All Tests | |
if: steps.setup_dependencies.outcome == 'success' | |
run: | | |
env | |
source $HOME/.bp-venv/bin/activate | |
python -m pytest -v --driver Remote --selenium-host 'localhost' --selenium-port '4444' \ | |
--variables ${{ matrix.config_file }} --tags="${{ matrix.tags }}" \ | |
--base-url="${{ matrix.baseurl }}" \ | |
--reruns 1 --reruns-delay 5 \ | |
--html=report.html \ | |
--self-contained-html -n "${{ matrix.concurrent_thread }}" | |
- name: Docker Container Stop | |
run: | | |
docker compose --file docker-compose.yml down | |
if: ${{ always() }} | |
- name: Upload HTML run report in the Artifacts Folder | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.html_report }} | |
path: | | |
./*.html | |
./output/ | |
./assets/ | |
if: ${{ always() }} | |
docker-web-manual-run: | |
if: github.event_name != 'schedule' | |
name: Manual - ${{ inputs.browser }} - ${{ inputs.tags }} - ${{ inputs.baseurl }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Validate Input Parameter | |
id: validate_input | |
run: | | |
if [[ -z "${{ github.event.inputs.tags }}" ]]; then | |
echo "Invalid input: 'tags' is required but not provided." | |
exit 1 | |
fi | |
if [[ -z "${{ github.event.inputs.baseurl }}" ]]; then | |
echo "Invalid input: 'baseurl' is required but not provided." | |
exit 1 | |
fi | |
if [[ -z "${{ github.event.inputs.browser }}" ]]; then | |
echo "Invalid input: 'browser' is required but not provided." | |
exit 1 | |
fi | |
- name: Setup Python | |
id: setup_python | |
if: steps.validate_input.outcome == 'success' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.9" | |
- name: Check out code | |
id: co_code | |
if: steps.setup_python.outcome == 'success' | |
uses: actions/checkout@v4 | |
- name: Set up Docker | |
id: docker_env_setup | |
if: steps.co_code.outcome == 'success' | |
uses: docker/setup-buildx-action@v3 | |
- name: Build and start Docker Compose services | |
id: docker_compose | |
if: steps.docker_env_setup.outcome == 'success' | |
run: | | |
docker compose --file docker-compose.yml up -d | |
- name: Wait for services to start | |
run: sleep 30 | |
- name: Setup dependencies | |
id: setup_dependencies | |
if: steps.docker_compose.outcome == 'success' | |
run: | | |
sh setup_install.sh | |
- name: Run Manual Job Tests | |
id: run_manual_job | |
if: steps.setup_dependencies.outcome == 'success' | |
run: | | |
TAGS="${{ github.event.inputs.tags }}" | |
if [[ "${{ github.event.inputs.baseurl }}" == "other" ]]; then | |
BASE_URL="${{ github.event.inputs.inputurl }}" | |
else | |
BASE_URL="${{ github.event.inputs.baseurl }}" | |
fi | |
concurrent_thread=3 | |
if [[ "${{ github.event.inputs.browser }}" == "chrome" ]]; then | |
BROWSER=./env_configs/docker_chrome.json | |
fi | |
if [[ "${{ github.event.inputs.browser }}" == "firefox" ]]; then | |
BROWSER=./env_configs/docker_firefox.json | |
fi | |
if [[ "${{ github.event.inputs.browser }}" == "edge" ]]; then | |
BROWSER=./env_configs/docker_edge.json | |
fi | |
env | |
source $HOME/.bp-venv/bin/activate | |
python -m pytest -v --driver Remote \ | |
--selenium-host 'localhost' --selenium-port '4444' \ | |
--variables "$BROWSER" \ | |
--reruns 1 --reruns-delay 5 \ | |
--tags="$TAGS" --base-url="$BASE_URL" --html=report.html \ | |
--self-contained-html -n "$concurrent_thread" | |
- name: Docker Container Stop | |
run: | | |
docker compose --file docker-compose.yml down | |
if: ${{ always() }} | |
- name: Upload HTML run report in the Artifacts Folder | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pytest-html-results | |
path: | | |
./*.html | |
./output/ | |
./assets/ | |
if: ${{ always() }} |