To be able to run integration tests through Firebase Test Lab automatically, we need to include the process in the workflow. We will set up a CI/CD workflow based on GitHub Actions and Firebase Test Lab. First, make sure the firebase project has been created, then create a workflow
Github Action Workflow
Go to
safi-mobile-app-ci.yml
fileAdd 2 new job. One job to build apk test and another to run firebase test lab.
jobs: ... ... ... integrate: name: Integration Testing needs: - analyze_test_main_app ... ... ... runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK 1.8 uses: actions/setup-java@v3 with: distribution: "zulu" java-version: "11" - uses: subosito/flutter-action@v2.4.0 with: flutter-version: "3.0.1" - name: Assemble app debug APK and Android Instrumentation Tests run: | cd app/app_safi/ pushd android flutter clean flutter pub get flutter build apk --debug ./gradlew app:assembleAndroidTest ./gradlew app:assembleDebug -Ptarget=integration_test/integration_test.dart popd - name: Upload app APK uses: actions/upload-artifact@v3 with: name: app-debug path: ${{ github.workspace }}/app/app_safi/build/app/outputs/apk/debug/app-debug.apk if-no-files-found: error - name: Upload Android Test APK uses: actions/upload-artifact@v3 with: name: app-debug-androidTest path: ${{ github.workspace }}/app/app_safi/build/app/outputs/apk/androidTest/debug/app-debug-androidTest.apk firebase: name: Run UI tests with Firebase Test Lab needs: [integrate] runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Download app APK uses: actions/download-artifact@v3 with: name: app-debug - name: Download Android test APK uses: actions/download-artifact@v3 with: name: app-debug-androidTest - id: "auth" name: Login to Google Cloud uses: "google-github-actions/auth@v0" with: credentials_json: "ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb3VudCIsCiAgInByb2plY3RfaWQiOiAiYWNxdWlyZWQtYmFkZ2UtMzQ4NDA1IiwKICAicHJpdmF0ZV9rZXlfaWQiOiAiNDVhMjcyNWQ0YzE5ZTRjODU0YTE2NTVkNTY0NzE0Mzk5NmQyZGNjMyIsCiAgInByaXZhdGVfa2V5IjogIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxuTUlJRXZRSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NCS2N3Z2dTakFnRUFBb0lCQVFEZU9IUXkrZFhIdkM5T1xuVTVOU2xvVVM1SUdIS2JQdTRjK3dPTEJWcG0wbmdVWGlaL0VlU0EzeFpTQy9zWnZrQ3Z1elhzNFZFdlRPS3o4b1xuNFcyZTAwMFUrOHNabWc3SDV2K2NHdHI1TlJMMDV3WjJ3cW1xL1QwaDRaOHlOdXdmSjVVSFhhWnFuaE9GR3ZQdVxubmhXNDErRzRHMURkVjRCcDF2bGdTNTVBOFd6L2ltVWdrT0lCRjhkSFdFNzRVUDlHR3lWSExPZWhpRis4c3R5OFxuTXkvcGYrNWhuUHFmV0FNRnJrMDA2N2J3Ky8xdVZyV2YxQW1tUG1ZaHc0Tjg0QWhMZW0wUHNRTGZ4cVJtY0NUZFxuWGtpa2xQZ0tackN6cnJSRWl1MmRkWktjOEhVRjRBajdjSWk0cmFDN0UvdXlOU0xuMk9jc2ZRWEhzSGZPL1ZaWVxuajlta3RhdUZBZ01CQUFFQ2dnRUFNNExEa0xOdjlpb3Rqd3I1ZWVueE0rVnJEd0ZBTjgzNVBpQ040M1MrRmF1MlxuSHRxNFBpdzJxeStsYlRvRzZGQVJjMDAxR1JaNVQ3Y2ZuMkxON2NTT09DQjd2bFlET2h4V1FRSEtvM3pGaGFadFxuemFhbS9MOVI1ZUl1YkUzbDR2emlZMEEybkwxQ3loWnExL09tRm1CWWJyeEtQTnlWSkRPVVA5bVhkL2RlckVjaVxuR0F5ZW9aTUdlZmJ4dmFabUtkQm1zWWlLMTJvNjliNmJyV2tuWkRVR1FZVWJUZ1RHajNrdkZkdXVxTGxmaFQ2d1xuWnpTeFlqS1p3eDFDV3pBNnRTRUxIMmJqeWZsa1FQZnIzWkdFcWxaWmwrR3FHb1lkcGRGc3Frdm8zSmhjU0RsYlxuVjIvOEF6bEdPTURPU3lBSFV2UDhpbVBGcTA3VjNTb2Y0NGZSSUhxc2tRS0JnUUQ3d0RtNUwyUTFJNEtFdDVrcVxuR1JwR25KTTdDQklSaUQrKzVEQmF0VnRCOTRja3hlRDkwMjFOUy9mWW50VFBIcHB5TWZlRHJvcG5WcVd5K1FzVVxuRmNMQ0NZVCtPSm1HSFZLZHF0U0QxemdjVTMyUGZ5b3orOEU1MTM5U3Z2Z0pFMS9hd1NxVGsydHVIUE9ISlBPdVxudU9lbUFyQ0p4d04zT1B5M1JEd25uZVE3blFLQmdRRGgrS0h2WUtBRGlMbi9tRUJCNWZUTjBPUXp4Q3ZPbHJPTVxudWY0dlpUbUpTNGtwWjltK1g2R0dNdmZyd3ZjT3AyUytFNHRGckNRZ1ErN2lMUjd4UE9pbzNqZDlxR0RLS0IzNlxuUEF0Y2kxSkNnMnFkK3FkM0Uzb1VQSFBCeXRMRTNPbGJ1TWZYY3h1WnAraWJ5SWFIZEJJUWlDZFVlZDBOTU41QVxuZHNEVTZhanZDUUtCZ0VYc2wxdmJVTzc5aFBRTjlzbmRuUkc5elpzWTI4UG8zeVBMUjY3NkxuVzlKZGxONlBjM1xuY1dXRjB6cGtxMkUzODlnQ0R1aVJZem5ldERsb3VPNEVPVXNoejhHNHdOT2ljMTc5b3ZkWG9Pc2xPWHZRNjB6elxuQVRGcXJKKzBFVHFjR2dTdG9JREs4b3pzRjZ3UzFHaFVUV3NyMWhMK3B2VEhiRklPN3RKbUpZMTFBb0dCQUw3SFxuN3RndWFRcHl6aTVJT2NBcFNOVFhqME5SVlhiMjd5SmFDWXUwVjY1ZDByRGRtQTNOcVk2bXk0QUdQQlhvSi9yK1xuZnpCVWxLK1ZDME56dXRNTGpKYTkvbldkeWhJRGFzUFJHL3FIT2Uwa0RNalNUYjhQOTVyTUt5TXJmV1Z0NmF0aFxueDM5VUZMSlcrK0ZDbktvUnlncWhHU3VPTTU0bWF3NWI5SlFOcm00WkFvR0FOZStnWlNmdVIzalg0Umlkb1FzelxudHkvdGY3ZE4xSHFLWDFKTTRabGc1TU1xdkFSWG05ZHowd09OQmRMbEwvY01kZjA4L1QxeVBQK3kybWZGMGFpU1xubnExd0g0eWl3ZVNHUlVkdlB1bDR0TDMzTE82azgyUWV0U3RhQktCSUN5V0hhZVdnU1FGZUlheHhWQVVpZEtLNVxuNmVGNm0vOHpsbzNndEE0WGppcjhLRFU9XG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tXG4iLAogICJjbGllbnRfZW1haWwiOiAiZmlyZWJhc2UtYWRtaW5zZGstbzZoZGhAYWNxdWlyZWQtYmFkZ2UtMzQ4NDA1LmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAiY2xpZW50X2lkIjogIjEwNTkyNjM3NTYyMjU1OTU4MDgzNSIsCiAgImF1dGhfdXJpIjogImh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi9hdXRoIiwKICAidG9rZW5fdXJpIjogImh0dHBzOi8vb2F1dGgyLmdvb2dsZWFwaXMuY29tL3Rva2VuIiwKICAiYXV0aF9wcm92aWRlcl94NTA5X2NlcnRfdXJsIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL29hdXRoMi92MS9jZXJ0cyIsCiAgImNsaWVudF94NTA5X2NlcnRfdXJsIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3JvYm90L3YxL21ldGFkYXRhL3g1MDkvZmlyZWJhc2UtYWRtaW5zZGstbzZoZGglNDBhY3F1aXJlZC1iYWRnZS0zNDg0MDUuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iCn0=" - name: Set current project run: gcloud config set project "acquired-badge-348405" - name: Run Instrumentation Tests in Firebase Test Lab run: | gcloud firebase test android run --type instrumentation \ --app app-debug.apk \ --test app-debug-androidTest.apk \ --device model=Pixel2,version=28,locale=pl,orientation=portrait
- Generate APK job
Using a previously defined setup
Assemble app debug APK and Android Instrumentation Test
This stage creates an apk to be tested, and an apk that contains testing data using gradle wrapper command. As previously done on ./android_integration.sh in Integration Testing
Upload app & Upload app test
To process the generated apk into the workflow, then use github action
actions/upload-artifact
Report Status
If there is a problem with job build_apk_test, it will send information on the created slack channel
Documentation for slack notification will be on another page
- Run Firebase Test Lab job
Using a previously defined setup
Download app APK & Download Android test APK
The apk that has been uploaded is then downloaded to run on firebase
Login to Google Cloud
Then connect with firebase using google cloud
credential_json
obtained from the private key project on google cloud that has been encoded with base64
Set current project
This is the project ID that can be obtained from firebase in the project settings
Run Instrumentation Tests in Firebase Test Lab
Run the test in firebase test lab
source: Medium