Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
grafite.pdf
Search
Santosh Astagi
August 15, 2018
Technology
0
370
grafite.pdf
Using Gradle, Firebase Testlab for Android testing.
Santosh Astagi
August 15, 2018
Tweet
Share
Other Decks in Technology
See All in Technology
Microsoft Agent 365 を 30 分でなんとなく理解する
skmkzyk
1
320
翻訳・対話・越境で強いチームワークを作ろう! / Building Strong Teamwork through Interpretation, Dialogue, and Border-Crossing
ar_tama
4
1.6k
プラットフォームエンジニアリングとは何であり、なぜプラットフォームエンジニアリングなのか
doublemarket
1
550
Oracle Cloud Infrastructure:2025年11月度サービス・アップデート
oracle4engineer
PRO
1
120
Security Diaries of an Open Source IAM
ahus1
0
120
Claude Code はじめてガイド -1時間で学べるAI駆動開発の基本と実践-
oikon48
43
26k
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
9.9k
シンプルを極める。アンチパターンなDB設計の本質
facilo_inc
1
1k
プロダクトマネージャーが押さえておくべき、ソフトウェア資産とAIエージェント投資効果 / pmconf2025
i35_267
2
360
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
世界最速級 memcached 互換サーバー作った
yasukata
0
160
Symfony AI in Action
el_stoffel
2
370
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.2k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.1k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Facilitating Awesome Meetings
lara
57
6.7k
Building Applications with DynamoDB
mza
96
6.8k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
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