onnxruntime/tools/ci_build/github/azure-pipelines/templates/android-java-api-aar-test.yml
sheetalarkadam e8f1d73b0b
Add Android QNN Browserstack test (#22434)
Add Android QNN Browserstack test



### Motivation and Context
Real device test in CI
2024-11-10 16:10:29 -08:00

126 lines
4.2 KiB
YAML

parameters:
- name: artifactName
displayName: Artifact Name
type: string
default: ''
- name: job_name_suffix
displayName: job name
type: string
default: ''
- name: packageName
displayName: Package Name
type: string
default: 'onnxruntime-android'
- name: ReleaseVersionSuffix
displayName: Release Version Suffix
type: string
default: ''
- name: QnnSDKVersion
displayName: QNN SDK Version
type: string
default: '2.28.0.241029'
jobs:
- job: Final_AAR_Testing_Android_${{ parameters.job_name_suffix }}
workspace:
clean: all
pool:
vmImage: 'macOS-13'
variables:
- name: runCodesignValidationInjection
value: false
timeoutInMinutes: 90
dependsOn:
- Android_Java_API_AAR_Packaging_${{ parameters.job_name_suffix }}
steps:
- template: set-version-number-variables-step.yml
- task: DownloadPipelineArtifact@2
displayName: 'Download Final Android AAR'
inputs:
buildType: 'current'
artifactName: '${{parameters.artifactName}}'
targetPath: '$(Build.BinariesDirectory)/final-android-aar'
- task: JavaToolInstaller@0
displayName: Use jdk 17
inputs:
versionSpec: '17'
jdkArchitectureOption: 'x64'
jdkSourceOption: 'PreInstalled'
- template: use-android-ndk.yml
- script: |
set -e -x
mkdir -p android_test/android/app/libs
cd android_test/android
cp -av $(Build.SourcesDirectory)/java/src/test/android/* ./
cp $(Build.BinariesDirectory)/final-android-aar/${{parameters.packageName}}-$(OnnxRuntimeVersion)${{parameters.ReleaseVersionSuffix}}.aar app/libs/${{parameters.packageName}}.aar
displayName: Copy Android test files and AAR to android_test directory
workingDirectory: $(Build.BinariesDirectory)
# skip emulator tests for qnn package as there are no arm64-v8a emulators and no qnn libraries for x86
- ${{ if not(contains(parameters.packageName, 'qnn')) }}:
- template: use-android-emulator.yml
parameters:
create: true
start: true
- script: |
set -e -x
cd android_test/android
$(Build.SourcesDirectory)/java/gradlew --no-daemon clean connectedDebugAndroidTest --stacktrace
displayName: Run E2E test using Emulator
workingDirectory: $(Build.BinariesDirectory)
- template: use-android-emulator.yml
parameters:
stop: true
- ${{ else }}:
- script: |
# QNN SDK version string, expected format: 2.28.0.241029
# Extract the first three parts of the version string to get the Maven package version (e.g., 2.28.0)
QnnMavenPackageVersion=$(echo ${{ parameters.QnnSDKVersion }} | cut -d'.' -f1-3)
echo "QnnMavenPackageVersion: $QnnMavenPackageVersion"
echo "##vso[task.setvariable variable=QnnMavenPackageVersion]$QnnMavenPackageVersion"
displayName: Trim QNN SDK version to major.minor.patch
- script: |
set -e -x
# build apks for qnn package as they are not built in the emulator test step
$(Build.SourcesDirectory)/java/gradlew --no-daemon clean assembleDebug assembleAndroidTest -DqnnVersion=$(QnnMavenPackageVersion) --stacktrace
displayName: Build QNN APK
workingDirectory: $(Build.BinariesDirectory)/android_test/android
# we run e2e tests on one older device (Pixel 3) and one newer device (Galaxy 23)
- script: |
set -e -x
pip install requests
python $(Build.SourcesDirectory)/tools/python/upload_and_run_browserstack_tests.py \
--test_platform espresso \
--app_path "debug/app-debug.apk" \
--test_path "androidTest/debug/app-debug-androidTest.apk" \
--devices "Samsung Galaxy S23-13.0" "Google Pixel 3-9.0" \
--build_tag "${{ parameters.packageName }}"
displayName: Run E2E tests using Browserstack
workingDirectory: $(Build.BinariesDirectory)/android_test/android/app/build/outputs/apk
timeoutInMinutes: 15
env:
BROWSERSTACK_ID: $(browserstack_username)
BROWSERSTACK_TOKEN: $(browserstack_access_key)
- template: component-governance-component-detection-steps.yml
parameters :
condition : 'succeeded'
- task: mspremier.PostBuildCleanup.PostBuildCleanup-task.PostBuildCleanup@3
displayName: 'Clean Agent Directories'
condition: always()