Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
grafite.pdf
Search
Santosh Astagi
August 15, 2018
Technology
430
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
grafite.pdf
Using Gradle, Firebase Testlab for Android testing.
Santosh Astagi
August 15, 2018
Other Decks in Technology
See All in Technology
FinOps Agentが生んだ技術負債:コスト自動調査の落とし穴と解消までの道のり
oasis1994liveforever
3
270
Codex を使った障害対応机上演習の実際
orgachem
PRO
0
310
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
5
1.2k
AI駆動で「他アプリの音を加工できる」アプリを作った
satomasahiro2005
0
190
CSS2026:OWS研究会・招待講演「世界観を、実装する」
atsush1_sada
2
230
国際カードブランドルール変更に伴うクレジットカード決済取引仕様変更について
k1style
0
160
React改造してみた
tsukina_7mochi
0
150
Refining Active Record
shugo
0
190
古い指輪から広がった JAVA コミュニティ とのつながり
yamad
0
140
ガチで放置できるClaude Code実行環境の作り方.pdf
lamaglama39
4
7.5k
S3 Filesで挑む! 八戸せんべい汁の食べ頃問題
usanchuu
0
150
ウォンテッドリーの最近のプロダクトと技術の紹介
stomk
0
340
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
We Are The Robots
honzajavorek
0
400
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
For a Future-Friendly Web
brad_frost
184
10k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
370
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
530
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
640
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
290
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
760
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Transcript
Gra-Fi-Te Leveraging Gradle and Firebase for Android Testing Santosh Astagi
Rally Health
Gradlew wrapper - ./gradlew
Gradle tasks - ./gradlew tasks
Android plugin for gradle - com.android.tools.build:gradle:#.#.# Android tasks Build tasks
Install tasks Verification tasks - Testing tasks
Unit tests - test Running all tests - ./gradlew test
Running all tests for a flavor - ./gradlew test{flavor}UnitTest Running individual tests - ./gradlew test{flavor}UnitTest\ —tests {packageName}.{testMethodName} Wild cards - ./gradlew test{flavor}UnitTest\ —tests *includedTestTitle*
Instrumentation tests - androidTest Running all tests - ./gradlew connectedAndroidTest
OR cAT Running a specific test - ./gradlew connectedAndroidTest\ -Pandroid.testInstrumentationRunnerArguments.class\ ={package name}.{class name}#{method name} GOTCHA - testCoverage, orchestrator:1.0.2 with gradle plugin <3.2 android plugin - 3.3.0+, gradle version - 4.9
Filtering tests - Annotations @SmallTest - < 100ms, unit tests
./gradlew connectedAndroidTest\ -Pandroid.testInstrumentationRunnerArguments.size\ =Large @MediumTest - < 2s, every checkin, avoid blocking operations @LargeTest - <120s, Atleast once a day, all external communications
testOptions{} - Android Plugin DSL Reference Specify reportDir, resultsDir testBuildType
to change default from debug unitTests {…} (Possible additions below) includeAndroidResources true returnDefaultValues true
Coverage reports testCoverageEnabled true ./gradlew createDebugCoverageReport apply plugin: "jacoco" Coverage
report: jacoco/test{flavor}UnitTest.exec
Gradle tasks task taskname( ) { } Copy from "origin"
into "destination" Gradle DSL method not found: 'from()' type:
Gradle tasks task taskname( ) type: //Pre built task description:
//Meaningful enough dependsOn: //task to be executed before group: //E.g. verification, install ./gradlew taskName -PpropertyName=propertyValue project.hasProperty(“propertyName”) project.property(“propertyName”)
Unified reports task unifiedReport( type: JacocoReport, dependsOn: ['testDebugUnitTest'], ‘createDebugCoverageReport’] )
{ sourceDirectories = files(coverageSourceDirs) classDirectories = files([javaClasses], [kotlinClasses]) executionData = fileTree(dir: project.projectDir, includes: [“coverage.exec”, “testDebugUnitTest.exec”)
Unified reports task unifiedReport( type: JacocoReport, dependsOn: ['testDebugUnitTest'] ) {
} reports { xml.enabled = true html.enabled = true } /build/reports/jacoco/…
None
Robolectric tests coverage Prior 3.0 plugin, jacoco node in unitTests
block Search for tasks of type test tasks.withType(Test) { jacoco.includeNoLocationClasses = true } }
Kotlin data classes
Jacoco snapshot build https://oss.sonatype.org/content/repositories/snapshots project.jacoco { toolVersion = '0.8.2-SNAPSHOT' }
Multi module apps
app models networking ext.jacocoReport = {Project project, String variant ->
} jacocoReport(project, ‘debug’) jacocoReport(project, ‘debug’) jacocoReport(project, ‘debug’)
Gradle methods ext.jacocoTestReport = {Project project, String variant -> }
jacocoTestReport(project, ‘flavorName’) project.tasks.create( name: ‘jacocoTestReport’ ) { }
Combining reports apply plugin: ‘android-reporting’ ./gradlew connectedAndroidTest mergeAndroidReports {root project}/build/reports
./gradlew createDebugCoverageReport mergeAndroidReports
Unified reporting root level gradle task Update coverage directories using
$rootProject Update class directories using $rootProject /build/reports/jacoco/…
Cloud testing
Cloud testing Firebase testlab, Saucelabs, Genymotion, Amazon, Xamarin etc. Firebase
testlab beta for iOS announced at I/O 18 Firebase - wide range of devices and emulators
Testlab - options, useful configurations - -timeout - max. time
this execution can run (timeout code sent back) - - performance-metrics - CPU usage, network usage, FPS - - results-bucket - Specify gcloud bucket Specific exit codes to play nicely with scripts
Firebase console - using reports Stored in Google Cloud bucket
Contains more than just logs, views and performance, can get code coverage, results xml, full log
Firebase testlab - Running tests
Firebase - device options gcloud firebase test android models list
Firebase console - command line Type - robo, instrumentation, game-loop
gcloud firebase test android run --type instrumentation --app app/build/outputs/apk/debug/app-debug.apk --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk --devices-ids Nexus5 --os-version-ids 23 --locales en --orientations portrait --environment-variables coverage=true,coverageFile="/sdcard/coverage.ec"
Firebase testlab - Artifacts and fetching
Firebase - gcloud options Firebase test artifacts stores in Google
cloud buckets Install gsutil to get CLI to interact with bucket artifacts gsutil ls gs://testingplaygroundresults
Coverage reports Enable device storage in manifest --directories-to-pull /sdcard gsutil
cp gs://testingplaygroundresults/*/*/artifacts/ coverage.ec .
None
Test sharing through flank
Flank - Walmart Labs Scaling automated UI tests - Espresso
and Appium Throttling support Device config Test results downloaded to project root
Flank - Walmart Labs Test 1 Test 2 Test 3
Test 4 Test 5 Stores test times during first run Uses test times to distribute tests across devices https://github.com/TestArmada/flank
https://github.com/sastagi/grafite @sastagi Thank you