Skip to content

Docker - Web UI Tests #321

Docker - Web UI Tests

Docker - Web UI Tests #321

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_ENV: "DOCKER"
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: 1
- 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: 1
- 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: 1
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=1
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() }}