UITest #119
This file contains 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: 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: | | |
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 |