Skip to content

BS - Web UI Tests

BS - Web UI Tests #374

Workflow file for this run

name: BS - Web UI Tests
env:
TAGS: web_tests
BASE_URL: https://opensource-demo.orangehrmlive.com
BROWSERSTACK_USER: ${{secrets.BROWSERSTACK_API_USERNAME}}
BROWSERSTACK_ACCESS_KEY: ${{secrets.BROWSERSTACK_ACCESS_KEY}}
HRM_USER_NAME: ${{ secrets.HRM_USER_NAME }}
HRM_PASSWORD: ${{ secrets.HRM_PASSWORD }}
USING_ENV: "BROWSERSTACK"
# TESTRAIL_PROJECT_ID: "10"
# TEST_PLAN_ID: "195"
on:
schedule:
- cron: '30 22 * * *'
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
os:
description: 'Operating system (window or mac)'
required: true
type: choice
default: mac
options:
- mac
- window
browser:
description: Browser Name
required: true
type: choice
default: chrome
options:
- chrome
- firefox
- edge
- safari
jobs:
web-scheduled-regression:
if: github.event_name == 'schedule'
strategy:
max-parallel: 1
fail-fast: false
matrix:
include:
- name: Win Chrome
baseurl: https://opensource-demo.orangehrmlive.com
tags: web_tests
config_file: ./env_configs/win_chrome.json
html_report: win-chrome
testrail_configuration_name: 'Chrome, Windows'
testrail_run_name: 'Desktop Chrome'
- name: Win Firefox
baseurl: https://opensource-demo.orangehrmlive.com
tags: 'web_tests and firefox'
config_file: ./env_configs/win_firefox.json
html_report: win-firefox
testrail_configuration_name: 'Firefox, Windows'
testrail_run_name: 'Desktop Firefox'
- name: Win Edge
baseurl: https://opensource-demo.orangehrmlive.com
tags: web_tests
config_file: ./env_configs/win_edge.json
html_report: win-edge
testrail_configuration_name: 'Edge, Windows'
testrail_run_name: 'Desktop Edge'
- name: Mac Firefox
baseurl: https://opensource-demo.orangehrmlive.com
tags: 'web_tests and firefox'
config_file: ./env_configs/mac_firefox.json
html_report: mac-firefox
testrail_configuration_name: 'Firefox, MacOS'
testrail_run_name: 'MAC Desktop Firefox'
- name: Mac Chrome
baseurl: https://opensource-demo.orangehrmlive.com
tags: web_tests
config_file: ./env_configs/mac_chrome.json
html_report: mac-chrome
testrail_configuration_name: 'Chrome, MacOS'
testrail_run_name: 'MAC Desktop Chrome'
- name: Mac Edge
baseurl: https://opensource-demo.orangehrmlive.com
tags: web_tests
config_file: ./env_configs/mac_edge.json
html_report: mac-edge
testrail_configuration_name: 'Edge, MacOS'
testrail_run_name: 'MAC Desktop Edge'
- name: Mac Safari
baseurl: https://opensource-demo.orangehrmlive.com
tags: web_tests
config_file: ./env_configs/mac_safari.json
html_report: mac-safari
testrail_configuration_name: 'Safari, MacOS'
testrail_run_name: 'MAC Desktop Safari'
- name: Mac Chrome Visual
baseurl: https://opensource-demo.orangehrmlive.com
tags: visual
config_file: ./env_configs/mac_chrome.json
html_report: mac-chrome-visual
testrail_configuration_name: 'Chrome, MacOS'
testrail_run_name: 'MAC Desktop Chrome Visual'
name: ${{ matrix.name }} - Regression
runs-on: ubuntu-latest
steps:
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.9"
- name: BrowserStack Env Setup
uses: browserstack/github-actions/setup-env@master
with:
username: ${{secrets.BROWSERSTACK_API_USERNAME}}
access-key: ${{secrets.BROWSERSTACK_ACCESS_KEY}}
- name: BrowserStack Local Tunnel Setup
uses: browserstack/github-actions/setup-local@master
with:
local-testing: start
local-identifier: random
- name: Check out code
uses: actions/checkout@v4
- name: Setup dependencies
run: |
sh setup_install.sh
- name: Run All Tests
run: |
env
source $HOME/.bp-venv/bin/activate
sh ci_run_web.sh ${{secrets.BROWSERSTACK_API_USERNAME}} ${{secrets.BROWSERSTACK_ACCESS_KEY}} "${{ matrix.config_file }}" "${{ matrix.tags }}" "${{ matrix.baseurl }}" "${{secrets.SLACK_WEBHOOK_URL}}" "${{secrets.TEAMS_WEBHOOK_URL}}"
# --pytest-testrail-export-test-results \
# --testrail-project-id "${{ env.TESTRAIL_PROJECT_ID }}" \
# --pytest-testrail-test-plan-id "${{ env.TEST_PLAN_ID }}" \
# --pytest-testrail-test-run-name "${{ matrix.testrail_run_name }}" \
# --pytest-testrail-test-configuration-name "${{ matrix.testrail_configuration_name }}" \
# --pytest-testrail-skip-step-results
- name: BrowserStackLocal Stop
uses: browserstack/github-actions/setup-local@master
with:
local-testing: stop
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/
./test_data/visualtesting/test/*.png
if: ${{ always() }}
web-manual-run:
if: github.event_name != 'schedule'
name: Manual - ${{ inputs.os }} ${{ 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
if [[ -z "${{ github.event.inputs.os }}" ]]; then
echo "Invalid input: 'os' is required but not provided."
exit 1
fi
if [[ "${{ inputs.os }}" == "window" && "${{ inputs.browser }}" == "safari" ]]; then
echo "Invalid input: Safari is not supported on Windows OS."
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: BrowserStack Env Setup
id: bs_env_setup
if: steps.validate_input.outcome == 'success'
uses: browserstack/github-actions/setup-env@master
with:
username: ${{secrets.BROWSERSTACK_API_USERNAME}}
access-key: ${{secrets.BROWSERSTACK_ACCESS_KEY}}
- name: BrowserStack Local Tunnel Setup
id: bs_local_tunnel_setup
if: steps.bs_env_setup.outcome == 'success'
uses: browserstack/github-actions/setup-local@master
with:
local-testing: start
local-identifier: random
- name: Check out code
id: co_code
if: steps.bs_local_tunnel_setup.outcome == 'success'
uses: actions/checkout@v4
- name: Setup dependencies
id: setup_dependencies
if: steps.co_code.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
if [[ "${{ github.event.inputs.browser }}" == "chrome" && "${{ github.event.inputs.os }}" == "window" ]]; then
BROWSER=./env_configs/win_chrome.json
fi
if [[ "${{ github.event.inputs.browser }}" == "firefox" && "${{ github.event.inputs.os }}" == "window" ]]; then
BROWSER=./env_configs/win_firefox.json
fi
if [[ "${{ github.event.inputs.browser }}" == "edge" && "${{ github.event.inputs.os }}" == "window" ]]; then
BROWSER=./env_configs/win_edge.json
fi
if [[ "${{ github.event.inputs.browser }}" == "chrome" && "${{ github.event.inputs.os }}" == "mac" ]]; then
BROWSER=./env_configs/mac_chrome.json
fi
if [[ "${{ github.event.inputs.browser }}" == "firefox" && "${{ github.event.inputs.os }}" == "mac" ]]; then
BROWSER=./env_configs/mac_firefox.json
fi
if [[ "${{ github.event.inputs.browser }}" == "safari" && "${{ github.event.inputs.os }}" == "mac" ]]; then
BROWSER=./env_configs/mac_safari.json
fi
if [[ "${{ github.event.inputs.browser }}" == "edge" && "${{ github.event.inputs.os }}" == "mac" ]]; then
BROWSER=./env_configs/mac_edge.json
fi
env
source $HOME/.bp-venv/bin/activate
sh ci_run_web.sh ${{secrets.BROWSERSTACK_API_USERNAME}} ${{secrets.BROWSERSTACK_ACCESS_KEY}} "$BROWSER" "$TAGS" "$BASE_URL" "${{secrets.SLACK_WEBHOOK_URL}}" "${{secrets.TEAMS_WEBHOOK_URL}}"
- name: BrowserStackLocal Stop
uses: browserstack/github-actions/setup-local@master
with:
local-testing: stop
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/
./test_data/visualtesting/test/*.png
if: ${{ always() }}