Skip to content

UITest

UITest #123

Workflow file for this run

name: UITest
on:
workflow_dispatch:
inputs:
device:
required: true
default: 'Pixel8_API33'
type: choice
options:
- 'Pixel8_API33'
- 'Pixel8_API35'
runner:
required: true
default: 'autotestdebug'
type: choice
options:
- 'autotestdebug'
- 'ubuntu-latest'
jobs:
build:
name: build android application for ui tests
runs-on: ${{ github.event.inputs.runner || 'autotestdebug' }}
timeout-minutes: 30
steps:
- name: Print Env Variables
run: env
working-directory: ${{ github.workspace }}
- name: checkout source code of application
uses: actions/checkout@v4
with:
clean: true
path: 'appodeal-android-sdk'
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Build with Gradle
working-directory: ${{ github.workspace }}/appodeal-android-sdk
run: ./gradlew :banner:assembleDebug
- name: save debug build for aws
uses: actions/upload-artifact@v4
with:
name: banner-debug.apk
path: appodeal-android-sdk/banner/build/outputs/apk/debug/banner-debug.apk
retention-days: 14
tests:
name: run ui tests on aws with appium
needs: build
runs-on: ${{ github.event.inputs.runner || 'autotestdebug' }}
timeout-minutes: 30
steps:
- name: Print Env Variables
run: env
working-directory: ${{ github.workspace }}
- name: checkout source code of application
uses: actions/checkout@v4
with:
path: 'SDK-Auto-Test'
clean: true
repository: 'appodeal/SDK-Auto-Test'
ref: 'aws'
token: ${{ secrets.UITESTREPOACCESS }}
- name: Set up JDK 11
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: download debug build
uses: actions/download-artifact@v4
with:
name: banner-debug.apk
path: ./SDK-Auto-Test/apk
- name: prepare build
working-directory: ${{ github.workspace }}/SDK-Auto-Test
run: |
mvn clean
sleep 10
mvn jar:jar
sleep 10
mvn jar:test-jar
sleep 10
mvn assembly:assembly -DskipTests -Ddescriptor=src/main/assembly/zip.xml
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-west-2
- name: Upload APK to AWS Device Farm
id: upload-apk
run: |
APP_UPLOAD_RESPONSE=$(aws devicefarm create-upload --project-arn arn:aws:devicefarm:us-west-2:381491970378:project:4c28c1e5-8344-4d34-919c-a1e9377d3b2f --name banner-debug.apk --type ANDROID_APP)
APP_ARN=$(echo $APP_UPLOAD_RESPONSE | jq -r .upload.arn)
echo "APP_ARN=$APP_ARN" >> $GITHUB_ENV
APP_URL=$(echo $APP_UPLOAD_RESPONSE | jq -r .upload.url)
curl -T ./SDK-Auto-Test/apk/banner-debug.apk "$APP_URL"
# Wait until the upload is processed
while [[ "$(aws devicefarm get-upload --arn $APP_ARN | jq -r '.upload.status')" != "SUCCEEDED" ]]; do
echo "Waiting for APK upload to complete..."
sleep 10
done
- name: Upload Test Package to AWS Device Farm
id: upload-tests
run: |
TEST_PACKAGE_UPLOAD_RESPONSE=$(aws devicefarm create-upload --project-arn arn:aws:devicefarm:us-west-2:381491970378:project:4c28c1e5-8344-4d34-919c-a1e9377d3b2f --name zip-with-dependencies.zip --type APPIUM_JAVA_TESTNG_TEST_PACKAGE)
TEST_PACKAGE_ARN=$(echo $TEST_PACKAGE_UPLOAD_RESPONSE | jq -r .upload.arn)
echo "TEST_PACKAGE_ARN=$TEST_PACKAGE_ARN" >> $GITHUB_ENV
TEST_PACKAGE_URL=$(echo $TEST_PACKAGE_UPLOAD_RESPONSE | jq -r .upload.url)
curl -T ./SDK-Auto-Test/target/zip-with-dependencies.zip $TEST_PACKAGE_URL
# Wait until the upload is processed
while [[ "$(aws devicefarm get-upload --arn $TEST_PACKAGE_ARN | jq -r '.upload.status')" != "SUCCEEDED" ]]; do
echo "Waiting for Test Package upload to complete..."
sleep 10
done
- name: Schedule Device Farm Automated Test
id: run-test
uses: aws-actions/[email protected]
with:
run-settings-json: |
{
"name": "GitHubAction-${{ github.workflow }}_${{ github.run_id }}_${{ github.run_attempt }}",
"projectArn": "arn:aws:devicefarm:us-west-2:381491970378:project:4c28c1e5-8344-4d34-919c-a1e9377d3b2f",
"appArn": "${{ env.APP_ARN }}",
"devicePoolArn": "arn:aws:devicefarm:us-west-2:381491970378:devicepool:4c28c1e5-8344-4d34-919c-a1e9377d3b2f/86ebd86a-2150-4997-b71f-2e3d72510e0d",
"test": {
"type": "APPIUM_JAVA_TESTNG",
"testPackageArn": "${{ env.TEST_PACKAGE_ARN }}",
"testSpecArn": "default.yml"
}
}
artifact-types: ALL
- uses: actions/upload-artifact@v4
if: always()
with:
name: AutomatedTestOutputFiles
path: ${{ steps.run-test.outputs.artifact-folder }}
- name: Adding summary
if: ${{ always() }}
run: |
echo "### Results of test execution :fire:" >> $GITHUB_STEP_SUMMARY
echo "Launch: ${{ github.run_number }}" >> $GITHUB_STEP_SUMMARY
echo "Device: ${{ github.event.inputs.device }}" >> $GITHUB_STEP_SUMMARY
echo "Build agent: ${{ github.event.inputs.runner }}" >> $GITHUB_STEP_SUMMARY
report:
name: send test report to slack
needs: tests
runs-on: ${{ github.event.inputs.runner || 'autotestdebug' }}
timeout-minutes: 10
steps:
- name: Print Env Variables
run: env
working-directory: ${{ github.workspace }}
- name: checkout source code of application
uses: actions/checkout@v4
with:
path: 'SDK-Auto-Test'
clean: true
repository: 'appodeal/SDK-Auto-Test'
ref: 'aws'
token: ${{ secrets.UITESTREPOACCESS }}
- name: Set up JDK 11
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: download debug build
uses: actions/download-artifact@v4
with:
name: AutomatedTestOutputFiles
path: ./SDK-Auto-Test/
- name: Copy Junit Reports
if: always()
working-directory: ${{ github.workspace }}/SDK-Auto-Test
env:
DEVICEFARM_LOG_DIR: \$DEVICEFARM_LOG_DIR
run: |
rm -rf saved_reports && mkdir saved_reports
find . -type f -name "00003-Customer Artifacts.zip" | while read -r file; do
unzip "$file" -d "$(dirname "$file")"
test_file_path=$(find "$(dirname "$file")" -type f -name "TEST-tests.example_APD.ApdBannerTest.xml")
if [ -n "$test_file_path" ]; then
echo "Файл найден: $test_file_path"
removed_spaces=$(echo "$test_file_path" | tr -d ' ')
first_directory=$(echo "$removed_spaces" | cut -d'/' -f2)
cp "$test_file_path" ./saved_reports/$first_directory.xml
fi
done
- name: Run JUnitReportParser for all XML files
if: always()
working-directory: ${{ github.workspace }}/SDK-Auto-Test
run: |
chmod +x slack.sh
if [ -d "./saved_reports" ]; then
find ./saved_reports -type f -name "*.xml" | while read -r test_file_path; do
if [ -n "$test_file_path" ]; then
echo "Файл найден: $test_file_path"
./slack.sh "$test_file_path" ${{ secrets.SLACK_WEBHOOK_URL }}
fi
done
else
echo "Directory ./saved_reports does not exist."
fi