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
Sigmaで作る業務アプリ
kazushiro_honma
0
110
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
210
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
290
Driving AI Adoption Using In-House GPUs to Serve Qwen
po3rin
2
480
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
260
Omarchy Quattro の日本語設定周り
simosako
2
140
コーディングエージェントでM5Stack系の開発を少し試した時の話 / M5 Japan Tour 2026 Autumn 東京
you
PRO
0
110
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
610
AIで開発は速くなったのに、なぜ現場は楽にならないのか 〜あなたの組織のボトルネックを突き止めるワークショップ〜
jacopen
1
310
日経電子版を支えていく Kasane Design System/fec_fukuoka
nikkei_engineer_recruiting
0
570
AI時代のAPI品質を支えるガードレール / API Guardrails for API quality in the AI era
yokawasa
1
210
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
440
Featured
See All Featured
Practical Orchestrator
shlominoach
191
12k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
How to build a perfect <img>
jonoalderson
1
6k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
210
Google's AI Overviews - The New Search
badams
0
1.6k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
230
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
A Soul's Torment
seathinner
7
3.6k
KATA
mclloyd
PRO
35
15k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
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