Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
grafite.pdf
Search
Santosh Astagi
August 15, 2018
Technology
0
280
grafite.pdf
Using Gradle, Firebase Testlab for Android testing.
Santosh Astagi
August 15, 2018
Tweet
Share
Other Decks in Technology
See All in Technology
もう一度、 事業を支えるシステムに。
leveragestech
6
3.1k
品質管理チームのEMとして大事にしていること / QA EM
nihonbuson
0
370
Remix SPAモードのファイルベースルーティングで進めるフロントエンド構築
ryochike
0
130
GAS × Discord bot × Gemini で作ったさいきょーの情報収集ツール
ysknsid25
1
510
徹底解説!Microsoft 365 Copilot の拡張機能 / Complete guide to Microsoft 365 Copilot extensions
karamem0
1
1.7k
サービスの拡大に伴うオペレーション課題に立ち向かう / 20241128_cloudsign_pdm
bengo4com
0
860
情シスの引継ぎが大変という話
miyu_dev
2
540
EthernetベースのGPUクラスタ導入による学びと展望
lycorptech_jp
PRO
0
500
Empowering Customer Decisions with Elasticsearch: From Search to Answer Generation
hinatades
PRO
0
210
高品質と高スピードを両立させるソフトウェアQA/Software QA that Supports Agility and Quality
goyoki
7
1.1k
asumikamというカンファレンスオーガナイザの凄さを語る / The Brilliance of Asumikam
tomzoh
1
250
検証と資産化を形にするプロダクト組織へ/tapple_pmconf2024
corin8823
1
4.2k
Featured
See All Featured
Thoughts on Productivity
jonyablonski
67
4.3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.1k
Raft: Consensus for Rubyists
vanstee
136
6.7k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
0
68
Building Adaptive Systems
keathley
38
2.3k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Navigating Team Friction
lara
183
15k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
4 Signs Your Business is Dying
shpigford
181
21k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
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