Skip to content

Docker - IOS App Tests #3

Docker - IOS App Tests

Docker - IOS App Tests #3

name: Docker IOS Tests Workflow
env:
TAGS: "ios_mobile_tests"
USING_DOCKER: 'True'
on:
schedule:
- cron: '0 22 * * *'
workflow_dispatch:
inputs:
tags:
description: Gherkin Tags
required: true
default: ios_mobile_tests
jobs:
scheduled-regression:
if: github.event_name == 'schedule'
name: IOS - Schedule Regression
runs-on: macos-latest
steps:
- 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 JDK 21
id: setup_java
if: steps.co_code.outcome == 'success'
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 21
- name: Install and Run Appium Server
id: setup_appium
if: steps.setup_java.outcome == 'success'
run: |
npm install -g appium
appium --log-level info &
sleep 5
appium -v
- name: Run IOS Emulator
id: run_ios_emulator
uses: futureware-tech/simulator-action@v3
with:
model: 'iPhone 8'
- name: Run Flutter Drive
id: run_flutter_drive
run: flutter drive
- name: Setup dependencies
id: setup_dependencies
if: steps.run_flutter_drive.outcome == 'success'
run: |
sh install.sh
- name: Run Tests
id: run_manual_job
if: steps.setup_dependencies.outcome == 'success'
run: |
TAGS="${{ github.event.inputs.tags }}"
env
source $HOME/.bp-venv/bin/activate
python -m pytest -v --driver Appium --selenium-host 'localhost' --selenium-port '4723' \
--variables './configs/ios_mobile_docker.json'
--tags="$TAGS" \
--html=report.html \
--self-contained-html \
- name: Upload HTML run report in the Artifacts Folder
uses: actions/upload-artifact@v4
with:
name: pytest-results
path: |
./*.html
./output/
./assets/
if: ${{ always() }}
docker-manual-ios-run:
if: github.event_name != 'schedule'
name: Manual - ${{ inputs.tags }}
runs-on: macos-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
- 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 JDK 21
id: setup_java
if: steps.co_code.outcome == 'success'
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 21
- name: Install and Run Appium Server
id: setup_appium
if: steps.setup_java.outcome == 'success'
run: |
npm install -g appium
appium --log-level info &
sleep 5
appium -v
- name: Set up Node JS
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- name: Clean Packages
run: |
rm -rf node_modules
npm cache clean --force
rm -rf package-lock.json
- name: Install React Native CLI
run: |
npm install react-native-cli
- name: List iOS Devices & Platforms
run: |
xcrun simctl list
- name: Install iOS 11.4 Runtime
run: |
gem install xcode-install
xcversion simulators --install='iOS 11.4'
- name: Create and Run iOS Emulator - iPhoneX on iOS 11.4, Update default appium config for iOS
run: |
xcrun simctl create TestiPhoneX com.apple.CoreSimulator.SimDeviceType.iPhone-X com.apple.CoreSimulator.SimRuntime.iOS-11-4 > deviceid.txt
DEVICEUUID=`cat deviceid.txt`
echo $DEVICEUUID
sed -i -e "s/{IPHONE_UUID}/$DEVICEUUID/g" __tests__/e2e/template_appium_configs_ios.js
xcrun simctl boot $DEVICEUUID &
- name: Use HTTPS repos
run: |
git config --global url."https://github".insteadOf ssh://git@github
- name: Setup dependencies
id: setup_dependencies
if: steps.run_emulator.outcome == 'success'
run: |
sh install.sh
- name: Run Tests
id: run_manual_job
if: steps.setup_dependencies.outcome == 'success'
run: |
TAGS="${{ github.event.inputs.tags }}"
env
source $HOME/.bp-venv/bin/activate
python -m pytest -v --driver Appium --selenium-host 'localhost' --selenium-port '4723' \
--variables './configs/ios_mobile_docker.json'
--tags="$TAGS" \
--html=report.html \
--self-contained-html \
- name: Upload HTML run report in the Artifacts Folder
uses: actions/upload-artifact@v4
with:
name: pytest-results
path: |
./*.html
./output/
./assets/
if: ${{ always() }}