test: Update flutter tests to canonic pytest format #604
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 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: 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: Start Appium server for Android | |
| if: matrix.e2e-tests == 'flutter-android' | |
| 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_flutter_android.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: Save server output | |
| if: always() && matrix.e2e-tests == 'flutter-android' | |
| uses: actions/upload-artifact@master | |
| with: | |
| name: appium-flutter-android.log | |
| path: appium_flutter_android.log | |
| - 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-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 for iOS | |
| if: matrix.e2e-tests == 'flutter-ios' | |
| 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_ios.log' | |
| - 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 }} |