test: Update Android tests to the canonical pytest format #606
Workflow file for this run
This file contains hidden or 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: Functional Tests | |
| on: | |
| # Run by manual at this time | |
| workflow_dispatch: | |
| pull_request: | |
| branches: [ master ] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| APPIUM_TEST_SERVER_PORT: '4723' | |
| APPIUM_TEST_SERVER_HOST: '127.0.0.1' | |
| PYTHONUNBUFFERED: 1 | |
| jobs: | |
| ios_test: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| test_targets: | |
| - target: test/functional/ios/safari_tests.py | |
| name: func_test_ios1 | |
| runs-on: macos-15 | |
| # Please make sure the available Xcode versions and iOS versions | |
| # on the runner images. https://github.com/actions/runner-images | |
| env: | |
| XCODE_VERSION: '16.4' | |
| IOS_VERSION: '18.5' | |
| IPHONE_MODEL: 'iPhone 16 Plus' | |
| PREBUILT_WDA_PATH: ${{ github.workspace }}/wda/WebDriverAgentRunner-Runner.app | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 'lts/*' | |
| - name: Select Xcode | |
| uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: ${{ env.XCODE_VERSION }} | |
| - name: Install Appium and drivers | |
| run: | | |
| npm install -g appium | |
| appium driver install xcuitest | |
| appium driver run xcuitest download-wda-sim --platform=ios --outdir=$(dirname "$PREBUILT_WDA_PATH") | |
| - name: Start Appium server | |
| uses: ./.github/actions/setup-appium-server | |
| with: | |
| port: ${{ env.APPIUM_TEST_SERVER_PORT }} | |
| host: ${{ env.APPIUM_TEST_SERVER_HOST }} | |
| server_args: '--relaxed-security' | |
| - name: Start iOS Simulator UI | |
| run: | | |
| defaults write com.apple.iphonesimulator PasteboardAutomaticSync -bool false | |
| open -Fn "$(xcode-select --print-path)/Applications/Simulator.app" | |
| - name: Prepare iOS simulator | |
| uses: futureware-tech/simulator-action@v4 | |
| with: | |
| model: ${{ env.IPHONE_MODEL }} | |
| os_version: ${{ env.IOS_VERSION }} | |
| wait_for_boot: true | |
| shutdown_after_job: false | |
| - name: Finalize iOS simulator boot | |
| run: xcrun --sdk iphonesimulator --show-sdk-version | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.12 | |
| - name: Cache uv modules | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cache/uv | |
| .venv | |
| key: ${{ runner.os }}-uv-shared-${{ hashFiles('**/uv.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-uv-shared- | |
| - name: Install uv | |
| run: make install-uv | |
| - name: Run Tests | |
| run: | | |
| uv run pytest -v ${{ matrix.test_targets.target}} \ | |
| --doctest-modules \ | |
| --junitxml=junit/test-results.xml \ | |
| --cov=com \ | |
| --cov-report=xml \ | |
| --cov-report=html | |
| env: | |
| LOCAL_PREBUILT_WDA: ${{ env.PREBUILT_WDA_PATH }} | |
| - name: Save server output | |
| if: ${{ always() }} | |
| uses: actions/upload-artifact@master | |
| with: | |
| name: appium-ios-${{matrix.test_targets.name}}.log | |
| path: appium.log | |
| android_test: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| test_targets: | |
| - target: test/functional/android/appium_service_tests.py test/functional/android/chrome_tests.py test/functional/android/bidi_tests.py | |
| name: func_test_android1 | |
| runs-on: ubuntu-latest | |
| env: | |
| API_LEVEL: 29 | |
| ARCH: x86 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - name: Install ffmpeg | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y ffmpeg | |
| - name: Install Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 'lts/*' | |
| - name: Install Appium and drivers | |
| run: | | |
| npm install -g appium | |
| appium driver install uiautomator2 | |
| appium driver install espresso | |
| appium plugin install execute-driver | |
| - name: Start Appium server | |
| uses: ./.github/actions/setup-appium-server | |
| with: | |
| port: ${{ env.APPIUM_TEST_SERVER_PORT }} | |
| host: ${{ env.APPIUM_TEST_SERVER_HOST }} | |
| server_args: '--relaxed-security --use-plugins=execute-driver' | |
| - name: Enable KVM group perms | |
| run: | | |
| echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules | |
| sudo udevadm control --reload-rules | |
| sudo udevadm trigger --name-match=kvm | |
| - name: AVD cache | |
| uses: actions/cache@v3 | |
| id: avd-cache | |
| with: | |
| path: | | |
| ~/.android/avd/* | |
| ~/.android/adb* | |
| key: avd-${{ env.API_LEVEL }} | |
| - name: Create AVD and generate snapshot for caching | |
| if: steps.avd-cache.outputs.cache-hit != 'true' | |
| uses: reactivecircus/android-emulator-runner@v2 | |
| with: | |
| api-level: ${{ env.API_LEVEL }} | |
| arch: ${{ env.ARCH }} | |
| target: google_apis | |
| force-avd-creation: false | |
| emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
| disable-animations: false | |
| script: echo "Generated AVD snapshot for caching." | |
| - name: Set up Python 3.12 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.12 | |
| - name: Cache uv modules | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cache/uv | |
| .venv | |
| key: ${{ runner.os }}-uv-shared-${{ hashFiles('**/uv.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-uv-shared- | |
| - name: Run tests | |
| uses: reactivecircus/android-emulator-runner@v2 | |
| with: | |
| api-level: ${{ env.API_LEVEL }} | |
| arch: ${{ env.ARCH }} | |
| script: | | |
| make install-uv | |
| uv run pytest -v ${{ matrix.test_targets.target}} --doctest-modules --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html | |
| target: google_apis | |
| profile: Nexus 5X | |
| disable-spellchecker: true | |
| disable-animations: true | |
| env: | |
| ANDROID_SDK_VERSION: ${{ env.API_LEVEL }} | |
| APPIUM_DRIVER: ${{matrix.test_targets.automation_name}} | |
| IGNORE_VERSION_SKIP: true | |
| CI: true | |
| - name: Save server output | |
| if: ${{ always() }} | |
| uses: actions/upload-artifact@master | |
| with: | |
| name: appium-android-${{matrix.test_targets.name}}.log | |
| path: appium.log | |
| flutter_e2e_test: | |
| # These flutter integration driver tests are maintained by: MummanaSubramanya | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - platform: macos-15 | |
| e2e-tests: flutter-ios | |
| - platform: ubuntu-latest | |
| e2e-tests: flutter-android | |
| runs-on: ${{ matrix.platform }} | |
| env: | |
| API_LEVEL: 28 | |
| ARCH: x86 | |
| CI: true | |
| XCODE_VERSION: 16.4 | |
| IOS_VERSION: 18.5 | |
| IPHONE_MODEL: iPhone 16 | |
| FLUTTER_ANDROID_APP: "https://github.com/AppiumTestDistribution/appium-flutter-server/releases/latest/download/app-debug.apk" | |
| FLUTTER_IOS_APP: "https://github.com/AppiumTestDistribution/appium-flutter-server/releases/latest/download/ios.zip" | |
| PREBUILT_WDA_PATH: ${{ github.workspace }}/wda/WebDriverAgentRunner-Runner.app | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-java@v4 | |
| if: matrix.e2e-tests == 'flutter-android' | |
| with: | |
| distribution: 'zulu' | |
| java-version: '17' | |
| - name: Enable KVM group perms | |
| if: matrix.e2e-tests == 'flutter-android' | |
| run: | | |
| echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules | |
| sudo udevadm control --reload-rules | |
| sudo udevadm trigger --name-match=kvm | |
| - name: Set up Python 3.12 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.12 | |
| - name: Install Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 'lts/*' | |
| - name: Select Xcode | |
| if: matrix.e2e-tests == 'flutter-ios' | |
| uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: ${{ env.XCODE_VERSION }} | |
| - name: Install Appium and drivers | |
| if: matrix.e2e-tests == 'flutter-android' | |
| run: | | |
| npm install --location=global appium | |
| appium driver install uiautomator2 | |
| appium driver install appium-flutter-integration-driver --source npm | |
| - name: Install Appium and drivers | |
| if: matrix.e2e-tests == 'flutter-ios' | |
| run: | | |
| npm install --location=global appium | |
| appium driver install xcuitest | |
| appium driver run xcuitest download-wda-sim --platform=ios --outdir=$(dirname "$PREBUILT_WDA_PATH") | |
| appium driver install appium-flutter-integration-driver --source npm | |
| - name: Start Appium server | |
| uses: ./.github/actions/setup-appium-server | |
| with: | |
| port: ${{ env.APPIUM_TEST_SERVER_PORT }} | |
| host: ${{ env.APPIUM_TEST_SERVER_HOST }} | |
| server_args: '--relaxed-security' | |
| log_file: appium-${{ matrix.e2e-tests }}.log | |
| - name: Cache uv modules | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cache/uv | |
| .venv | |
| key: ${{ runner.os }}-uv-shared-${{ hashFiles('**/uv.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-uv-shared- | |
| - name: Run Android tests | |
| if: matrix.e2e-tests == 'flutter-android' | |
| uses: reactivecircus/android-emulator-runner@v2 | |
| with: | |
| api-level: ${{ env.API_LEVEL }} | |
| script: | | |
| make install-uv | |
| uv run pytest -v test/functional/flutter_integration/*_test.py --doctest-modules --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html | |
| target: default | |
| disable-spellchecker: true | |
| disable-animations: true | |
| - name: Start iOS Simulator UI | |
| if: matrix.e2e-tests == 'flutter-ios' | |
| run: | | |
| defaults write com.apple.iphonesimulator PasteboardAutomaticSync -bool false | |
| open -Fn "$(xcode-select --print-path)/Applications/Simulator.app" | |
| - uses: futureware-tech/simulator-action@v4 | |
| if: matrix.e2e-tests == 'flutter-ios' | |
| with: | |
| # https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md | |
| model: ${{ env.IPHONE_MODEL }} | |
| os_version: ${{ env.IOS_VERSION }} | |
| wait_for_boot: true | |
| shutdown_after_job: false | |
| - name: Finalize iOS simulator boot | |
| if: matrix.e2e-tests == 'flutter-ios' | |
| run: xcrun --sdk iphonesimulator --show-sdk-version | |
| - name: Run IOS tests | |
| if: matrix.e2e-tests == 'flutter-ios' | |
| run: | | |
| make install-uv | |
| export PLATFORM=ios | |
| uv run pytest -v test/functional/flutter_integration/*_test.py \ | |
| --doctest-modules \ | |
| --junitxml=junit/test-results.xml \ | |
| --cov=com \ | |
| --cov-report=xml \ | |
| --cov-report=html | |
| env: | |
| LOCAL_PREBUILT_WDA: ${{ env.PREBUILT_WDA_PATH }} | |
| - name: Save server output | |
| if: ${{ always() }} | |
| uses: actions/upload-artifact@master | |
| with: | |
| name: appium-${{ matrix.e2e-tests }}.log | |
| path: appium-${{ matrix.e2e-tests }}.log |