GitHub Action
Run tests using Marathon Cloud
With this action you can easily run your Android instrumentation tests.
Marathon Cloud is designed to run all your automated tests in just 15 minutes, no matter how many tests you have.
A really basic example building an app apk, test apk and running tests:
name: Run tests
on: push
jobs:
run-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build app
run: ./gradlew assembleDebug assembleAndroidTest
- name: Run tests
uses: MarathonLabs/action-test@1.0.14
with:
apiKey: ${{ secrets.MARATHON_CLOUD_API_TOKEN }}
application: app/build/outputs/apk/debug/app-debug.apk
testApplication: app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
platform: android
output: "./results"
version: "1.0.38"
Name | Description | Default | Example |
---|---|---|---|
apiKey (required) |
Marathon Cloud API key | cafebabe |
|
version (required) |
marathon-cloud cli version to use | 1.0.0 |
|
application (required) |
Application binary path. Android: application should point to the APK file. iOS: application should point to an ARM compatible Simulator build packaged in an ipa format or a zip archive. |
Android: app/build/outputs/apk/debug/app-debug.apk iOS: /home/user/workspace/sample.zip or /home/user/workspace/sample.ipa |
|
testApplication (required) |
Test application binary path. Android: test_application should point to the test .apk file for your app. iOS: test_application should point to an ARM compatible iOS Test Runner app packaged in an ipa format or a zip archive. |
Android: app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk iOS: /home/user/workspace/sampleUITests-Runner.zip or /home/user/workspace/sampleUITests-Runner.ipa |
|
platform (required) |
Testing platform | `` | Android or iOS |
osVersion (optional) |
Android or iOS OS version. For Android one of [10, 11, 12, 13, 14]. For iOS one of [16.4, 17.2] | Android: 11 ; iOS: 16.4 |
12 , 17.2 , etc. |
systemImage (optional) |
OS-specific system image. For Android only | `` | default , google_apis , etc. |
output (optional) |
Output folder for test run results | `` | output |
outputGlob (optional) |
Only files matching this glob will be downloaded, i.e. 'tests/**' will download only the JUnit xml files | `` | tests/** |
link (optional) |
Link to commit | `` | `` |
isolated (optional) |
Run each test in isolation, i.e. isolated batching | false |
true , false |
flavor (optional) |
Type of tests to run | native |
native , js-test-appium , python-robotframework-appium |
filterFile (optional) |
File containing test filters in YAML format, following the schema described at https://docs.marathonlabs.io/runner/configuration/filtering/#filtering-logic. For iOS see also https://docs.marathonlabs.io/runner/next/ios#test-plans. | `` | `` |
wait (optional) |
Wait for test run to finish if true, exits after triggering a run if false. | `` | true |
name (optional) |
Name for run, for example it could be description of commit. | `` | AmazingRun |
device (optional) |
Device type. For Android one of [phone, tv, watch]. For iOS one of [iPhone-14, iPhone-15] | Android: phone ; iOS: iPhone-14 |
phone , tv , watch , iPhone-14 , iPhone-15 |
xcodeVersion (optional) |
Xcode version. Only for iOS. Possible values: [14.3.1, 15.2] | 14.3.1 |
14.3.1 , 15.2 |
xctestplanFilterFile (optional) |
Test filters supplied as .xctestplan file | `` | `` |
xctestplanTargetName (optional) |
Target name to use for test filtering in .xctestplan | `` | `` |
xctestrunEnv (optional) |
Xctestrun environment variables, format: 'VAR1=VALUE1,VAR2=VALUE2' | `` | VAR1=VALUE1,VAR2=VALUE2 |
xctestrunTestEnv (optional) |
Xctestrun testing environment variables, format: 'VAR1=VALUE1,VAR2=VALUE2' | `` | VAR1=VALUE1,VAR2=VALUE2 |
ignoreTestFailures (optional) |
When tests fail and this option is true then GHA will exit with code 0. By default, GHA will exit with code 1 in case of test failures and 0 for passing tests [possible values: true, false] | false |
true , false |
pullFiles (optional) |
Pull files from devices after the test run. The format is ROOT1:PATH1,ROOT2:PATH2 where ROOT is one of [EXTERNAL_STORAGE, APP_DATA] and PATH is a relative path to the target file or directory. Note: Files with the same name and path from different devices may overwrite each other. |
`` | EXTERNAL_STORAGE:Documents/some-results,APP_DATA:files/my_folder/some_file.txt |
resultFile (optional) |
Result file path in a machine-readable format. You can specify the format via extension [yaml,json] | result.json |
some_result.json |
branch (optional) |
Branch for run, for example it could be git branch like develop or feature/about-screen | `` | develop |
project (optional) |
The unique identifier (slug) for the project | `` | `` |
grantedPermission (optional) |
Grant permission to application. Important: Granting is conducted before each test batch (not each test). If you need to grant before each test, please use --isolated mode. Available permissions: calendar, contacts-limited, contacts, location, location-always, photos-add, photos, media-library, microphone, motion, reminders, siri | `` | motion,siri,calendar |
For action version 0
the latest supported version is 0.3.11. Any version starting with 1.0.0 will require action version 1
to work.
Support matrix:
action version | cli version supported | latest version |
---|---|---|
1 | 1.0.0<=..<2.0.0 | not supported |
0 | <1.0.0 | 0.3.11 |
The action source is located at /src. The action is written in TypeScript and compiled to a single javascript file with ncc
. It's expected to checkin lib/index.js
to the repository.
To setup the development environment, run the following commands:
$ npm install
To build the action script, run the following command:
$ npm run build
To test the action, we can use the workflow Test workflow to trigger a build.
MIT