This repository contains integration tests for the Android and iOS code of the Palace application
JDK 11 is used in this project. As a framework for automation testing was selected aquality framework. This framework designed to simplify automation of Android and iOS mobile applications using Appium. Most of performed methods are logged using LOG4), so it is easy to see a history of performed actions in log.
Cucumber is used in this project. It is a tool that supports BDD (behavior driver development). Central to the Cucumber BDD approach is its ordinary language parser Gherkin. It allows expected software behaviors to be specified in a logical language that every person can understand.
The next big part of the solution is a test runner. As the test runner JUnit is used. This framework permits validate results of the tests and run tests in pair with Cucumber.
Tests are created for Palace Bookshelf, A1QA Test Library and LYRASIS Reads libraries and run on iOS and Android platforms on such devices:
-
Android
- Samsung Galaxy S23 Ultra (Android 13)
- Samsung Galaxy S22 Ultra (Android 12)
- Samsung Galaxy S21 (Android 12)
- Samsung Galaxy Tab S9 (Android 13)
- Google Pixel 8 Pro (Android 14)
- Google Pixel 7 Pro (Android 13)
-
iOS
- iPhone 15 Pro Max (iOS 17)
- iPhone 14 Pro Max (iOS 16)
- iPhone 13 Pro Max (iOS 15)
- iPad Pro 2022 (iOS 16)
- iPhone XR (iOS 15)
- iPhone SE 2020 (iOS 16)
- iPhone 8 (iOS 15)
All tests run at night in BrowserStack. Runs are configured with GitHub Actions in maven.yml file. Test run time on each device is configured in a file that describes it using cron expressions. These devices are described in repositories for Android and iOS devices. In the Actions section click the Run workflow button and start tests configured by tiers, app version and git branch. Below attached the screenshot with Ul of the Github actions solution.
Select the Test Run option in the left menu and click the Run workflow. Options to configure:
- _Use workflow from_ - git branch to launch (e.g. main)
- Tags to run - tags (e.g. @tier1 @tier2, @smoke) if to run a specific tier. @tier1 - Tests for LYRASIS Reads library, @tier2 - tests for A1QA Test Library and Palace Bookshelf libraries, @smoke - smoke tests.
- app_url of uploaded to BS link - the app URL that can be gotten in the App Automate on the Browserstack
- build name of given application - assembly name can be anything
- Platform name - ios/android
- device name and version for the autotests - device name to run tests. They can be found in the iOS repository for iOS devices and Android repository for the Android.
After configuring the test run, click the Run workflow green button to apply the run
Tests can also be run locally (e.g. by Intellij Idea). The settings.json file is used to configure device, application build and platform. Write down target platformName, remoteConnectionUrl, deviceKey, username and access key from BrowserStack and app link to run tests.
- platformName - android/ios
- remoteConnectionUrl - https://hub-cloud.browserstack.com/wd/hub
- deviceKey - the device name where to run tests. Can be found in devices.json file
- app - the link to the build on iOS or Android from the Browserstack.
- browserstack.user - user name of the Browserstack account.
- browserstack.key - key of the Browserstack account
All devices are described in devices.json file.
For LYRASIS Reads and A1QA Test library libraries credentials are needed. It can be configured in config.json file.
- libraryName - LYRASISReads/A1QATestLibrary
- barcode - barcode
- pin - password
Feature files are used to run tests.
mvn clean test -Daquality.buildName="NameOfTheBuild" -Daquality.token=TRACKING_API_TOKEN -Daquality.suiteName="@tier1/@tier2/@tier3" -Daquality.environment="ios/Android" -Dcredentials.LYRASIS.${{secrets.BookCard }}=${{secrets.BookPin }} -Dcredentials.LYRASIS.${{secrets.BookCardLyrasis2 }}=${{secrets.BookPinLyrasis2 }} -Dcredentials."The New York Public Library".${{secrets.BookCardNYPL }}=${{secrets.BookPinNYPL }} -DremoteConnectionUrl=RemoteUrlToTheBrowserstack -DplatformName=${{github.event.inputs.platform_name}} -DdriverSettings.${{github.event.inputs.platform_name}}.capabilities.app=${{github.event.inputs.bs_app_link}} -Dcucumber.options="--tags '${{github.event.inputs.test_tag}} and not @exclude_${{github.event.inputs.platform_name}}'"