Skip to content

Commit

Permalink
test: fix ios build and ui test script
Browse files Browse the repository at this point in the history
  • Loading branch information
nattb8 committed Nov 21, 2024
1 parent 8e58151 commit 8149773
Show file tree
Hide file tree
Showing 4 changed files with 176 additions and 148 deletions.
214 changes: 107 additions & 107 deletions .github/workflows/ui-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,125 +11,125 @@ concurrency:
cancel-in-progress: true

jobs:
build:
name: Build ${{ matrix.targetPlatform }} for AltTester 🛠️
runs-on: ubuntu-latest-8-cores
strategy:
fail-fast: false
matrix:
include:
- targetPlatform: StandaloneOSX
buildMethod: MacBuilder.BuildForAltTester
buildPath: sample/Builds/MacOS
- targetPlatform: StandaloneWindows64
buildMethod: WindowsBuilder.BuildForAltTester
buildPath: sample/Builds/Windows64
- targetPlatform: Android
buildMethod: MobileBuilder.BuildForAltTester
buildPath: sample/Builds/Android
steps:
- uses: actions/checkout@v3
with:
lfs: true
- uses: actions/cache@v3
with:
path: Library
key: Library-${{ matrix.targetPlatform }}-${{ hashFiles('sample/Assets/**', 'sample/Packages/**', 'sample/ProjectSettings/**') }}
restore-keys: |
Library-${{ matrix.targetPlatform }}
Library-
- name: Build project
uses: game-ci/unity-builder@v4
env:
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
UNITY_SERIAL: ${{ secrets.UNITY_SERIAL }}
with:
targetPlatform: ${{ matrix.targetPlatform }}
projectPath: sample
buildMethod: ${{ matrix.buildMethod }}
customParameters: -logFile logFile.log -quit -batchmode
- name: List build directory
run: ls -R ./
- name: Upload artifact
uses: actions/upload-artifact@v4
if: always()
with:
name: Build-${{ matrix.targetPlatform }}
path: ${{ matrix.buildPath }}
test:
name: Run ${{ matrix.targetPlatform }} UI tests 🧪
needs: build
strategy:
matrix:
include:
- targetPlatform: StandaloneOSX
runs-on: [self-hosted, macOS]
test_script: pytest -xs test/test_mac.py::MacTest
- targetPlatform: StandaloneWindows64
runs-on: [self-hosted, windows]
test_script: pytest -xs test/test_windows.py::WindowsTest
# build:
# name: Build ${{ matrix.targetPlatform }} for AltTester 🛠️
# runs-on: ubuntu-latest-8-cores
# strategy:
# fail-fast: false
# matrix:
# include:
# - targetPlatform: StandaloneOSX
# buildMethod: MacBuilder.BuildForAltTester
# buildPath: sample/Builds/MacOS
# - targetPlatform: StandaloneWindows64
# buildMethod: WindowsBuilder.BuildForAltTester
# buildPath: sample/Builds/Windows64
# - targetPlatform: Android
# runs-on: [ self-hosted, macOS ]
# test_script: browserstack-sdk pytest -s ./test/test_android.py --browserstack.config "browserstack.android.yml"
concurrency:
group: test-${{ matrix.targetPlatform }}
runs-on: ${{ matrix.runs-on }}
steps:
- uses: actions/checkout@v3
with:
lfs: true
- uses: actions/download-artifact@v4
with:
name: Build-${{ matrix.targetPlatform }}
path: sample/Tests
- name: Make macOS artifact executable
if: ${{ matrix.targetPlatform == 'StandaloneOSX' }}
run: chmod +x sample/Tests/SampleApp.app/Contents/MacOS/*
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Install dependencies (Windows)
if: ${{ matrix.targetPlatform == 'StandaloneWindows64' }}
run: pip install -r "sample/Tests/requirements-desktop.txt"
- name: Install dependencies (Mac)
if: ${{ matrix.targetPlatform != 'StandaloneWindows64' }}
run: |
if [[ "${{ matrix.targetPlatform }}" == "StandaloneOSX" ]]; then
pip uninstall -y browserstack-sdk || true
pip install -r "sample/Tests/requirements-desktop.txt"
else
pip install -r "sample/Tests/requirements-mobile.txt"
fi
- name: Run UI tests
env:
UNITY_APP_PATH: SampleApp.app
UNITY_APP_NAME: SampleApp
MAILSLURP_API_KEY: ${{ secrets.MAILSLURP_API_KEY }}
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
working-directory: sample/Tests
run: ${{ matrix.test_script }}
# test-ios:
# name: Run iOS UI tests 🧪
# runs-on: [ self-hosted, macOS ]
# buildMethod: MobileBuilder.BuildForAltTester
# buildPath: sample/Builds/Android
# steps:
# - uses: actions/checkout@v3
# with:
# lfs: true
# - uses: actions/cache@v3
# with:
# path: Library
# key: Library-${{ matrix.targetPlatform }}-${{ hashFiles('sample/Assets/**', 'sample/Packages/**', 'sample/ProjectSettings/**') }}
# restore-keys: |
# Library-${{ matrix.targetPlatform }}
# Library-
# - name: Build project
# uses: game-ci/unity-builder@v4
# env:
# UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
# UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
# UNITY_SERIAL: ${{ secrets.UNITY_SERIAL }}
# with:
# targetPlatform: ${{ matrix.targetPlatform }}
# projectPath: sample
# buildMethod: ${{ matrix.buildMethod }}
# customParameters: -logFile logFile.log -quit -batchmode
# - name: List build directory
# run: ls -R ./
# - name: Upload artifact
# uses: actions/upload-artifact@v4
# if: always()
# with:
# name: Build-${{ matrix.targetPlatform }}
# path: ${{ matrix.buildPath }}
# test:
# name: Run ${{ matrix.targetPlatform }} UI tests 🧪
# needs: build
# strategy:
# matrix:
# include:
# # - targetPlatform: StandaloneOSX
# # runs-on: [self-hosted, macOS]
# # test_script: pytest -xs test/test_mac.py::MacTest
# # - targetPlatform: StandaloneWindows64
# # runs-on: [self-hosted, windows]
# # test_script: pytest -xs test/test_windows.py::WindowsTest
# # - targetPlatform: Android
# # runs-on: [ self-hosted, macOS ]
# # test_script: browserstack-sdk pytest -s ./test/test_android.py --browserstack.config "browserstack.android.yml"
# concurrency:
# group: test-${{ matrix.targetPlatform }}
# runs-on: ${{ matrix.runs-on }}
# steps:
# - uses: actions/checkout@v3
# with:
# lfs: true
# - name: build iOS app
# working-directory: sample
# run: ./build_ios.sh
# - uses: actions/download-artifact@v4
# with:
# name: Build-${{ matrix.targetPlatform }}
# path: sample/Tests
# - name: Make macOS artifact executable
# if: ${{ matrix.targetPlatform == 'StandaloneOSX' }}
# run: chmod +x sample/Tests/SampleApp.app/Contents/MacOS/*
# - uses: actions/setup-python@v4
# with:
# python-version: "3.10"
# - name: Install dependencies
# run: pip install -r "sample/Tests/requirements.txt"
# - name: Install dependencies (Windows)
# if: ${{ matrix.targetPlatform == 'StandaloneWindows64' }}
# run: pip install -r "sample/Tests/requirements-desktop.txt"
# - name: Install dependencies (Mac)
# if: ${{ matrix.targetPlatform != 'StandaloneWindows64' }}
# run: |
# if [[ "${{ matrix.targetPlatform }}" == "StandaloneOSX" ]]; then
# pip uninstall -y browserstack-sdk || true
# pip install -r "sample/Tests/requirements-desktop.txt"
# else
# pip install -r "sample/Tests/requirements-mobile.txt"
# fi
# - name: Run UI tests
# env:
# UNITY_APP_PATH: SampleApp.app
# UNITY_APP_NAME: SampleApp
# MAILSLURP_API_KEY: ${{ secrets.MAILSLURP_API_KEY }}
# BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
# BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
# working-directory: sample/Tests
# run: browserstack-sdk pytest -s ./test/test_ios.py --browserstack.config "browserstack.ios.yml"
# run: ${{ matrix.test_script }}
test-ios:
name: Run iOS UI tests 🧪
runs-on: [ self-hosted, macOS ]
steps:
- uses: actions/checkout@v3
with:
lfs: true
- name: Build iOS app
working-directory: sample
run: ./build_ios.sh
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Install dependencies
run: pip install -r "sample/Tests/requirements-mobile.txt"
- name: Run UI tests
env:
MAILSLURP_API_KEY: ${{ secrets.MAILSLURP_API_KEY }}
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
working-directory: sample/Tests
run: browserstack-sdk pytest -s ./test/test_ios.py --browserstack.config "browserstack.ios.yml"

2 changes: 1 addition & 1 deletion sample/Tests/browserstack.ios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ source: pytest-browserstack:sample-sdk:v1.0
# Set `app` to define the app that is to be used for testing.
# It can either take the id of any uploaded app or the path of the app directly.
#app: ./WikipediaSample.apk
app: ../build/output/iOS/IPA/Payload.ipa #For running local tests
app: ./Payload.ipa #For running local tests

# =======================================
# Platforms (Browsers / Devices to test)
Expand Down
11 changes: 7 additions & 4 deletions sample/Tests/test/test_ios.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@

from alttester import AltDriver, By

from test import TestConfig

sys.path.insert(0, str(Path(__file__).resolve().parent.parent / 'src'))
from fetch_otp import EMAIL, fetch_code

Expand All @@ -24,9 +26,10 @@ class TestBase(unittest.TestCase):
def setUpClass(cls):
# https://appium.github.io/appium-xcuitest-driver/latest/preparation/real-device-config/
options = XCUITestOptions()
options.app = "./Payload.ipa"
# options.app = "./Payload.ipa"
# options.app = "com.immutable.Immutable-Sample-GameSDK"
options.show_xcode_log = True
options.xcode_org_id = "APPLE_TEAM_ID" # Replace with Apple Team ID
# options.xcode_org_id = "54XMLXPF98" # Replace with Apple Team ID
options.auto_accept_alerts = True

cls.appium_driver = webdriver.Remote('https://hub-cloud.browserstack.com/wd/hub/', options=options)
Expand Down Expand Up @@ -75,14 +78,14 @@ def test_1_pkce_login(self):
# Found email
target_context = context

email_field.send_keys("[email protected]")
email_field.send_keys(TestConfig.EMAIL)
submit_button = driver.find_element(by=AppiumBy.XPATH, value="//form/div/div/div[2]/button")
submit_button.click()

time.sleep(10) # Wait for OTP

code = fetch_gmail_code()
assert code, "Failed to fetch OTP from Gmail"
assert code, "Failed to fetch OTP from MailSlurp"
print(f"Successfully fetched OTP: {code}")

# Unlike on Android, each digit must be entered into a separate input field on iOS.
Expand Down
Loading

0 comments on commit 8149773

Please sign in to comment.