test: Update flutter tests to canonic pytest format #599
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' | |
| 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 }} | |
| - run: defaults write com.apple.iphonesimulator PasteboardAutomaticSync -bool false | |
| - 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: Install Appium and drivers | |
| run: | | |
| npm install -g appium | |
| appium driver install xcuitest | |
| - 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: Downloading prebuilt WDA | |
| run: | | |
| appium driver run xcuitest download-wda-sim --platform=ios --outdir=$(dirname "$PREBUILT_WDA_PATH") | |
| - 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 ${{ 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 ${{ 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" | |
| 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 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 }} | |
| - 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: Install Appium and drivers | |
| if: matrix.e2e-tests == 'flutter-ios' | |
| run: | | |
| npm install --location=global appium | |
| appium driver install xcuitest | |
| appium driver install appium-flutter-integration-driver --source npm | |
| appium driver run xcuitest build-wda | |
| - 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: Run IOS tests | |
| if: matrix.e2e-tests == 'flutter-ios' | |
| run: | | |
| make install-uv | |
| export PLATFORM=ios | |
| uv run pytest test/functional/flutter_integration/*_test.py \ | |
| --doctest-modules \ | |
| --junitxml=junit/test-results.xml \ | |
| --cov=com \ | |
| --cov-report=xml \ | |
| --cov-report=html |