SlideShare a Scribd company logo
1 of 34
Download to read offline
Mobile Testing at
SoundCloud
Brigit Lyons
brigit.lyons@soundcloud.com
MBLTDev 2015
title, date, 01 of 10
● Product engineers write unit tests
● Product engineers write automated UI tests for story’s
acceptance criteria
● Team performs manual QA check for every story before
it’s “Done”
● Automated tests run after every push to master/release
● Manual regression testing done before every production
release
General Approach
title, date, 01 of 10
● Provide tools and services that enable product engineers
to build and release high quality software efficiently
● Understand team’s pain points and provide solutions
Software Engineer in Test
title, date, 01 of 10
Continuous Integration
title, date, 01 of 10
UI Tests
title, date, 01 of 10
Models a page in application that tests interact with in order to:
● Reduce duplicated code
● Limit code refactoring after UI changes
● Ensure tests only care about the “services” they interact with and not
implementation details
The only thing that has a deep knowledge of the structure of the page (or parts of
a page)
PageObject
title, date, 01 of 10
Example
title, date, 01 of 10
● Parallelization vs Fragmentation
● 34 Nexus 5 + 2 emulators
● 22 Mac Minis 44 iOS simulators
UI Tests Are Run on Devices
title, date, 01 of 10
Why Parallelize?
title, date, 01 of 10
1 hour 42 minutes 19 seconds
title, date, 01 of 10
2 hours 1 minute 23 seconds
title, date, 01 of 10
title, date, 01 of 10
● Ruby gems
● Android: Rubotium https://github.com/ssmiech/rubotium
● iOS: Distributed Cucumber and Cmdr
Custom Test Runners
title, date, 01 of 10
● Given application and test packages, create a list of tests
● Determine all available devices
● Run a test on an available device, repeat
Custom Test Runners
title, date, 01 of 10
10 minutes 4 seconds
title, date, 01 of 10
8 minutes 11 seconds
title, date, 01 of 10
● Configuration options:
○ run on a specific type of device
○ run tests with a set of specified annotations
○ run tests without a set of specified annotations
● Better debugging:
○ HTML reports
○ For all failed tests:
■ Stack trace
■ Full logs
■ Screenshots -> videos
Custom Test Runner Benefits
title, date, 01 of 10
● No built-in scheduling or resource management
○ Must rely on Jenkins
● Only CI jobs can run tests in this environment
● We have a few configurations that run on CI (master,
release, development branches, etc)
● CI jobs that use same resources for UI tests must block
one another, leading to inefficient wait time
Custom Test Runner Problems
title, date, 01 of 10
● Run configurations are set within Jenkins job
● New configurations or one-off configurations require
setting up a new Jenkins job
● Pre-commit testing is not feasible
Custom Test Runner Problems
title, date, 01 of 10
● Test running order cannot be specified
● Test results are only collected from devices after all tests
have been completed
● Failed tests are retried a second time, but this is not
visible in the reports
Custom Test Runner Problems
title, date, 01 of 10
Mobile Test Runner Service!
title, date, 01 of 10
● Android only for now, but iOS support coming soon
● Mostly written in Scala
● Communicates with devices through ADB using ddmlib
● REST API for clients
Mobile Test Runner Service
title, date, 01 of 10
Mobile Test Runner Service
title, date, 01 of 10
● Resource management is controlled by the service itself
○ Don’t have to rely on Jenkins
● Test runs can be executed in parallel
● Resources are used efficiently; device workers keep
executing tests as long as there are tests in the queue
● Developers can test pre-commit changes on same
environment used by CI
Results
title, date, 01 of 10
● Test queue ordering is also controlled by the service
itself, so we can run the most important tests first (test
age, flakiness, etc)
Results
title, date, 01 of 10
● Test results (stack trace, full log, and videos for failed
tests) are available as soon as each individual test
finishes
● Retries for failed tests clearly indicated in HTML report
● Data about devices, tests, and results are stored in a DB,
making statistical analysis easier
Results
title, date, 01 of 10
title, date, 01 of 10
● Test runs are easily configured via REST API
Results
title, date, 01 of 10
● Built a Java client library
● Integrate into Gradle tasks so test configuration for CI is
part of the Android codebase
But API Endpoints can be annoying to
remember...
title, date, 01 of 10
● Not easily parameterized
● Names can be annoying to to remember
● Command line is not the most user friendly interface
And Gradle tasks have problems, too...
title, date, 01 of 10
● Developers can run tests for local changes on CI
environment right from Android Studio
● Right click to run specific test method, test class, test
package
● Results are reported natively, including links to videos
and logs for failed tests
Solution: IntelliJ Plugin
title, date, 01 of 10
title, date, 01 of 10
Thanks!
Brigit Lyons
brigit.lyons@soundcloud.com

More Related Content

What's hot

Agile Testing Strategy
Agile Testing StrategyAgile Testing Strategy
Agile Testing Strategytharindakasun
 
QA Strategies for Testing Legacy Web Apps
QA Strategies for Testing Legacy Web AppsQA Strategies for Testing Legacy Web Apps
QA Strategies for Testing Legacy Web AppsRainforest QA
 
Iterative Development Process
Iterative Development ProcessIterative Development Process
Iterative Development ProcessAjay Shrivastava
 
Working process and git branch strategy
Working process and git branch strategyWorking process and git branch strategy
Working process and git branch strategyKan-Han (John) Lu
 
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magento
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для MagentoИгорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magento
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magentomeet_magento
 
Using Crowdsourced Testing to Turbocharge your Development Team
Using Crowdsourced Testing to Turbocharge your Development TeamUsing Crowdsourced Testing to Turbocharge your Development Team
Using Crowdsourced Testing to Turbocharge your Development TeamRainforest QA
 
Project Management: Burn-Down Chart / OrangeHRM Project MOD (eng)
Project Management: Burn-Down Chart / OrangeHRM Project MOD (eng)Project Management: Burn-Down Chart / OrangeHRM Project MOD (eng)
Project Management: Burn-Down Chart / OrangeHRM Project MOD (eng)Anatoliy Okhotnikov
 
How We Build Confidence with Continuous Integration and Automated Testing
How We Build Confidence with Continuous Integration and Automated TestingHow We Build Confidence with Continuous Integration and Automated Testing
How We Build Confidence with Continuous Integration and Automated TestingGareth Marland
 
Survival of the Continuist
Survival of the ContinuistSurvival of the Continuist
Survival of the ContinuistPaul Blundell
 
Playing UFT/QTP Scripts Rapise
Playing UFT/QTP Scripts Rapise Playing UFT/QTP Scripts Rapise
Playing UFT/QTP Scripts Rapise Inflectra
 
A brief history of automation in Software Engineering
A brief history of automation in Software EngineeringA brief history of automation in Software Engineering
A brief history of automation in Software EngineeringGeorg Buske
 
Getting Started with Apache Jmeter
Getting Started with Apache JmeterGetting Started with Apache Jmeter
Getting Started with Apache JmeterMindfire Solutions
 
System Integration & Build Management
System Integration & Build ManagementSystem Integration & Build Management
System Integration & Build ManagementComputing Cage
 
Automation testing IBM RFT - Rational Functional Tester
Automation testing IBM RFT - Rational Functional TesterAutomation testing IBM RFT - Rational Functional Tester
Automation testing IBM RFT - Rational Functional TesterVijayChowthri Nagaprakasham
 
Continuous integrations - Basics
Continuous integrations - BasicsContinuous integrations - Basics
Continuous integrations - BasicsBarış İNANÇ
 
Continuous performance: Load testing for developers with gatling @ JavaOne 2016
Continuous performance: Load testing for developers with gatling @ JavaOne 2016Continuous performance: Load testing for developers with gatling @ JavaOne 2016
Continuous performance: Load testing for developers with gatling @ JavaOne 2016Tim van Eijndhoven
 

What's hot (19)

Agile Testing Strategy
Agile Testing StrategyAgile Testing Strategy
Agile Testing Strategy
 
User story workflow (eng)
User story workflow (eng)User story workflow (eng)
User story workflow (eng)
 
SivaRamaKrishna_CV_9.6 yrs Testing
SivaRamaKrishna_CV_9.6 yrs TestingSivaRamaKrishna_CV_9.6 yrs Testing
SivaRamaKrishna_CV_9.6 yrs Testing
 
QA Strategies for Testing Legacy Web Apps
QA Strategies for Testing Legacy Web AppsQA Strategies for Testing Legacy Web Apps
QA Strategies for Testing Legacy Web Apps
 
Iterative Development Process
Iterative Development ProcessIterative Development Process
Iterative Development Process
 
Working process and git branch strategy
Working process and git branch strategyWorking process and git branch strategy
Working process and git branch strategy
 
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magento
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для MagentoИгорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magento
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magento
 
Using Crowdsourced Testing to Turbocharge your Development Team
Using Crowdsourced Testing to Turbocharge your Development TeamUsing Crowdsourced Testing to Turbocharge your Development Team
Using Crowdsourced Testing to Turbocharge your Development Team
 
Project Management: Burn-Down Chart / OrangeHRM Project MOD (eng)
Project Management: Burn-Down Chart / OrangeHRM Project MOD (eng)Project Management: Burn-Down Chart / OrangeHRM Project MOD (eng)
Project Management: Burn-Down Chart / OrangeHRM Project MOD (eng)
 
How We Build Confidence with Continuous Integration and Automated Testing
How We Build Confidence with Continuous Integration and Automated TestingHow We Build Confidence with Continuous Integration and Automated Testing
How We Build Confidence with Continuous Integration and Automated Testing
 
Survival of the Continuist
Survival of the ContinuistSurvival of the Continuist
Survival of the Continuist
 
Playing UFT/QTP Scripts Rapise
Playing UFT/QTP Scripts Rapise Playing UFT/QTP Scripts Rapise
Playing UFT/QTP Scripts Rapise
 
A brief history of automation in Software Engineering
A brief history of automation in Software EngineeringA brief history of automation in Software Engineering
A brief history of automation in Software Engineering
 
Getting Started with Apache Jmeter
Getting Started with Apache JmeterGetting Started with Apache Jmeter
Getting Started with Apache Jmeter
 
MyPresentation2
MyPresentation2MyPresentation2
MyPresentation2
 
System Integration & Build Management
System Integration & Build ManagementSystem Integration & Build Management
System Integration & Build Management
 
Automation testing IBM RFT - Rational Functional Tester
Automation testing IBM RFT - Rational Functional TesterAutomation testing IBM RFT - Rational Functional Tester
Automation testing IBM RFT - Rational Functional Tester
 
Continuous integrations - Basics
Continuous integrations - BasicsContinuous integrations - Basics
Continuous integrations - Basics
 
Continuous performance: Load testing for developers with gatling @ JavaOne 2016
Continuous performance: Load testing for developers with gatling @ JavaOne 2016Continuous performance: Load testing for developers with gatling @ JavaOne 2016
Continuous performance: Load testing for developers with gatling @ JavaOne 2016
 

Viewers also liked

MBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricaMBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricae-Legion
 
MBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500StartupsMBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500Startupse-Legion
 
MBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, ParallelsMBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, Parallelse-Legion
 
MBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba MobileMBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba Mobilee-Legion
 
MBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha RestoranyMBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha Restoranye-Legion
 
MBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, PostforpostMBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, Postforposte-Legion
 
MBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, WunderlistMBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, Wunderliste-Legion
 
MBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, LitresMBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, Litrese-Legion
 
MBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank OnlineMBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank Onlinee-Legion
 
MBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, AviasalesMBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, Aviasalese-Legion
 
Rx Java architecture
Rx Java architectureRx Java architecture
Rx Java architecturee-Legion
 
MBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, PureMBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, Puree-Legion
 
MBLT15: Ivan Kozlov, Aviasales
MBLT15: Ivan Kozlov, AviasalesMBLT15: Ivan Kozlov, Aviasales
MBLT15: Ivan Kozlov, Aviasalese-Legion
 
MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box e-Legion
 
MBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, MicrosoftMBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, Microsofte-Legion
 
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)Ontico
 
MBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&CoMBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&Coe-Legion
 
MBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, SpotifyMBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, Spotifye-Legion
 
Изоморфные react-приложения
Изоморфные react-приложенияИзоморфные react-приложения
Изоморфные react-приложенияDenis Izmaylov
 

Viewers also liked (20)

MBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricaMBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetrica
 
MBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500StartupsMBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500Startups
 
MBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, ParallelsMBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, Parallels
 
MBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba MobileMBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba Mobile
 
MBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha RestoranyMBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha Restorany
 
MBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, PostforpostMBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, Postforpost
 
MBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, WunderlistMBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, Wunderlist
 
MBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, LitresMBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, Litres
 
MBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank OnlineMBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank Online
 
MBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, AviasalesMBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, Aviasales
 
Rx java
Rx javaRx java
Rx java
 
Rx Java architecture
Rx Java architectureRx Java architecture
Rx Java architecture
 
MBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, PureMBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, Pure
 
MBLT15: Ivan Kozlov, Aviasales
MBLT15: Ivan Kozlov, AviasalesMBLT15: Ivan Kozlov, Aviasales
MBLT15: Ivan Kozlov, Aviasales
 
MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box
 
MBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, MicrosoftMBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, Microsoft
 
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
 
MBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&CoMBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&Co
 
MBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, SpotifyMBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, Spotify
 
Изоморфные react-приложения
Изоморфные react-приложенияИзоморфные react-приложения
Изоморфные react-приложения
 

Similar to MBLTDev15: Brigit Lyons, Soundcloud

Expedia 3x3 presentation
Expedia 3x3 presentationExpedia 3x3 presentation
Expedia 3x3 presentationDrew Hannay
 
Configuration Management and Deployment
Configuration Management and DeploymentConfiguration Management and Deployment
Configuration Management and DeploymentSomnathMore3
 
3x3: Speeding Up Mobile Releases
3x3: Speeding Up Mobile Releases3x3: Speeding Up Mobile Releases
3x3: Speeding Up Mobile ReleasesDrew Hannay
 
Building a Complete Pipeline: The Essential Components of Continuous Testing ...
Building a Complete Pipeline: The Essential Components of Continuous Testing ...Building a Complete Pipeline: The Essential Components of Continuous Testing ...
Building a Complete Pipeline: The Essential Components of Continuous Testing ...Applitools
 
Modern Testing Strategies for Evolving Ecosystems
Modern Testing Strategies for Evolving EcosystemsModern Testing Strategies for Evolving Ecosystems
Modern Testing Strategies for Evolving EcosystemsJulian Warszawski
 
Jenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with JenkinsJenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with JenkinsAll Things Open
 
Performance testing with jmeter
Performance testing with jmeter Performance testing with jmeter
Performance testing with jmeter Knoldus Inc.
 
QA Team Goes to Agile and Continuous integration
QA Team Goes to Agile and Continuous integrationQA Team Goes to Agile and Continuous integration
QA Team Goes to Agile and Continuous integrationSujit Ghosh
 
Keeping code clean
Keeping code cleanKeeping code clean
Keeping code cleanBrett Child
 
RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...
RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...
RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...dcieslak
 
End-end tests as first class citizens - SeleniumConf 2020
End-end tests as first class citizens - SeleniumConf 2020End-end tests as first class citizens - SeleniumConf 2020
End-end tests as first class citizens - SeleniumConf 2020Abhijeet Vaikar
 
WSO2Con Asia 2014 - Effective Test Automation in an Agile Environment
WSO2Con Asia 2014 - Effective Test Automation in an Agile EnvironmentWSO2Con Asia 2014 - Effective Test Automation in an Agile Environment
WSO2Con Asia 2014 - Effective Test Automation in an Agile EnvironmentWSO2
 
Cloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesCloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesLars Rosenquist
 
Cloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesCloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesLars Rosenquist
 

Similar to MBLTDev15: Brigit Lyons, Soundcloud (20)

Expedia 3x3 presentation
Expedia 3x3 presentationExpedia 3x3 presentation
Expedia 3x3 presentation
 
Configuration Management and Deployment
Configuration Management and DeploymentConfiguration Management and Deployment
Configuration Management and Deployment
 
3x3: Speeding Up Mobile Releases
3x3: Speeding Up Mobile Releases3x3: Speeding Up Mobile Releases
3x3: Speeding Up Mobile Releases
 
3x3 Speeding Up Mobile Releases
3x3 Speeding Up Mobile Releases3x3 Speeding Up Mobile Releases
3x3 Speeding Up Mobile Releases
 
Building a Complete Pipeline: The Essential Components of Continuous Testing ...
Building a Complete Pipeline: The Essential Components of Continuous Testing ...Building a Complete Pipeline: The Essential Components of Continuous Testing ...
Building a Complete Pipeline: The Essential Components of Continuous Testing ...
 
Modern Testing Strategies for Evolving Ecosystems
Modern Testing Strategies for Evolving EcosystemsModern Testing Strategies for Evolving Ecosystems
Modern Testing Strategies for Evolving Ecosystems
 
Quality for developers
Quality for developersQuality for developers
Quality for developers
 
Jenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with JenkinsJenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with Jenkins
 
Amruth-Testing
Amruth-TestingAmruth-Testing
Amruth-Testing
 
Wso2con test-automation
Wso2con test-automationWso2con test-automation
Wso2con test-automation
 
Performance testing with jmeter
Performance testing with jmeter Performance testing with jmeter
Performance testing with jmeter
 
QA Team Goes to Agile and Continuous integration
QA Team Goes to Agile and Continuous integrationQA Team Goes to Agile and Continuous integration
QA Team Goes to Agile and Continuous integration
 
Keeping code clean
Keeping code cleanKeeping code clean
Keeping code clean
 
RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...
RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...
RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...
 
End-end tests as first class citizens - SeleniumConf 2020
End-end tests as first class citizens - SeleniumConf 2020End-end tests as first class citizens - SeleniumConf 2020
End-end tests as first class citizens - SeleniumConf 2020
 
WSO2Con Asia 2014 - Effective Test Automation in an Agile Environment
WSO2Con Asia 2014 - Effective Test Automation in an Agile EnvironmentWSO2Con Asia 2014 - Effective Test Automation in an Agile Environment
WSO2Con Asia 2014 - Effective Test Automation in an Agile Environment
 
Case Study – Regression Testing (Online Exam Software)
Case Study – Regression Testing (Online Exam Software)Case Study – Regression Testing (Online Exam Software)
Case Study – Regression Testing (Online Exam Software)
 
Automation for developers
Automation for developersAutomation for developers
Automation for developers
 
Cloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesCloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud Pipelines
 
Cloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesCloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud Pipelines
 

More from e-Legion

MBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DITMBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DITe-Legion
 
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank e-Legion
 
MBLTDev15: Ivan Kozlov, Aviasales
MBLTDev15: Ivan Kozlov, AviasalesMBLTDev15: Ivan Kozlov, Aviasales
MBLTDev15: Ivan Kozlov, Aviasalese-Legion
 
MBLTDev15: Ilya Krasilshchik, Meduza.io
MBLTDev15: Ilya Krasilshchik, Meduza.ioMBLTDev15: Ilya Krasilshchik, Meduza.io
MBLTDev15: Ilya Krasilshchik, Meduza.ioe-Legion
 
MBLTDev15: Svetlana Sonina, STS Media
MBLTDev15: Svetlana Sonina, STS MediaMBLTDev15: Svetlana Sonina, STS Media
MBLTDev15: Svetlana Sonina, STS Mediae-Legion
 
MBLTDev15: Marius Racwitz, Realm
MBLTDev15: Marius Racwitz, RealmMBLTDev15: Marius Racwitz, Realm
MBLTDev15: Marius Racwitz, Realme-Legion
 
MBLTDev15: Denis Legezo, Kaspersky Lab
MBLTDev15: Denis Legezo, Kaspersky LabMBLTDev15: Denis Legezo, Kaspersky Lab
MBLTDev15: Denis Legezo, Kaspersky Labe-Legion
 
MBLTDev15: Kyle Fuller, Apairy
MBLTDev15: Kyle Fuller, ApairyMBLTDev15: Kyle Fuller, Apairy
MBLTDev15: Kyle Fuller, Apairye-Legion
 
MBLTDev15: Sergey Semenov, Trucker Path
MBLTDev15: Sergey Semenov, Trucker Path MBLTDev15: Sergey Semenov, Trucker Path
MBLTDev15: Sergey Semenov, Trucker Path e-Legion
 
MBLTDev: Phillip Connaughton, RunKepper
MBLTDev: Phillip Connaughton, RunKepper MBLTDev: Phillip Connaughton, RunKepper
MBLTDev: Phillip Connaughton, RunKepper e-Legion
 
MBLT15: Alexey Chikov, Kaspersky Lab
MBLT15: Alexey Chikov, Kaspersky LabMBLT15: Alexey Chikov, Kaspersky Lab
MBLT15: Alexey Chikov, Kaspersky Labe-Legion
 
MBLT15: Yakov Zubarev, Parallels
MBLT15: Yakov Zubarev, ParallelsMBLT15: Yakov Zubarev, Parallels
MBLT15: Yakov Zubarev, Parallelse-Legion
 
MBLT15: Dmitriy Navosha, Sports.ru
MBLT15: Dmitriy Navosha, Sports.ru MBLT15: Dmitriy Navosha, Sports.ru
MBLT15: Dmitriy Navosha, Sports.ru e-Legion
 

More from e-Legion (13)

MBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DITMBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DIT
 
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
 
MBLTDev15: Ivan Kozlov, Aviasales
MBLTDev15: Ivan Kozlov, AviasalesMBLTDev15: Ivan Kozlov, Aviasales
MBLTDev15: Ivan Kozlov, Aviasales
 
MBLTDev15: Ilya Krasilshchik, Meduza.io
MBLTDev15: Ilya Krasilshchik, Meduza.ioMBLTDev15: Ilya Krasilshchik, Meduza.io
MBLTDev15: Ilya Krasilshchik, Meduza.io
 
MBLTDev15: Svetlana Sonina, STS Media
MBLTDev15: Svetlana Sonina, STS MediaMBLTDev15: Svetlana Sonina, STS Media
MBLTDev15: Svetlana Sonina, STS Media
 
MBLTDev15: Marius Racwitz, Realm
MBLTDev15: Marius Racwitz, RealmMBLTDev15: Marius Racwitz, Realm
MBLTDev15: Marius Racwitz, Realm
 
MBLTDev15: Denis Legezo, Kaspersky Lab
MBLTDev15: Denis Legezo, Kaspersky LabMBLTDev15: Denis Legezo, Kaspersky Lab
MBLTDev15: Denis Legezo, Kaspersky Lab
 
MBLTDev15: Kyle Fuller, Apairy
MBLTDev15: Kyle Fuller, ApairyMBLTDev15: Kyle Fuller, Apairy
MBLTDev15: Kyle Fuller, Apairy
 
MBLTDev15: Sergey Semenov, Trucker Path
MBLTDev15: Sergey Semenov, Trucker Path MBLTDev15: Sergey Semenov, Trucker Path
MBLTDev15: Sergey Semenov, Trucker Path
 
MBLTDev: Phillip Connaughton, RunKepper
MBLTDev: Phillip Connaughton, RunKepper MBLTDev: Phillip Connaughton, RunKepper
MBLTDev: Phillip Connaughton, RunKepper
 
MBLT15: Alexey Chikov, Kaspersky Lab
MBLT15: Alexey Chikov, Kaspersky LabMBLT15: Alexey Chikov, Kaspersky Lab
MBLT15: Alexey Chikov, Kaspersky Lab
 
MBLT15: Yakov Zubarev, Parallels
MBLT15: Yakov Zubarev, ParallelsMBLT15: Yakov Zubarev, Parallels
MBLT15: Yakov Zubarev, Parallels
 
MBLT15: Dmitriy Navosha, Sports.ru
MBLT15: Dmitriy Navosha, Sports.ru MBLT15: Dmitriy Navosha, Sports.ru
MBLT15: Dmitriy Navosha, Sports.ru
 

MBLTDev15: Brigit Lyons, Soundcloud

  • 1. Mobile Testing at SoundCloud Brigit Lyons brigit.lyons@soundcloud.com MBLTDev 2015
  • 2. title, date, 01 of 10 ● Product engineers write unit tests ● Product engineers write automated UI tests for story’s acceptance criteria ● Team performs manual QA check for every story before it’s “Done” ● Automated tests run after every push to master/release ● Manual regression testing done before every production release General Approach
  • 3. title, date, 01 of 10 ● Provide tools and services that enable product engineers to build and release high quality software efficiently ● Understand team’s pain points and provide solutions Software Engineer in Test
  • 4. title, date, 01 of 10 Continuous Integration
  • 5. title, date, 01 of 10 UI Tests
  • 6. title, date, 01 of 10 Models a page in application that tests interact with in order to: ● Reduce duplicated code ● Limit code refactoring after UI changes ● Ensure tests only care about the “services” they interact with and not implementation details The only thing that has a deep knowledge of the structure of the page (or parts of a page) PageObject
  • 7. title, date, 01 of 10 Example
  • 8. title, date, 01 of 10 ● Parallelization vs Fragmentation ● 34 Nexus 5 + 2 emulators ● 22 Mac Minis 44 iOS simulators UI Tests Are Run on Devices
  • 9. title, date, 01 of 10 Why Parallelize?
  • 10. title, date, 01 of 10 1 hour 42 minutes 19 seconds
  • 11. title, date, 01 of 10 2 hours 1 minute 23 seconds
  • 13. title, date, 01 of 10 ● Ruby gems ● Android: Rubotium https://github.com/ssmiech/rubotium ● iOS: Distributed Cucumber and Cmdr Custom Test Runners
  • 14. title, date, 01 of 10 ● Given application and test packages, create a list of tests ● Determine all available devices ● Run a test on an available device, repeat Custom Test Runners
  • 15. title, date, 01 of 10 10 minutes 4 seconds
  • 16. title, date, 01 of 10 8 minutes 11 seconds
  • 17. title, date, 01 of 10 ● Configuration options: ○ run on a specific type of device ○ run tests with a set of specified annotations ○ run tests without a set of specified annotations ● Better debugging: ○ HTML reports ○ For all failed tests: ■ Stack trace ■ Full logs ■ Screenshots -> videos Custom Test Runner Benefits
  • 18. title, date, 01 of 10 ● No built-in scheduling or resource management ○ Must rely on Jenkins ● Only CI jobs can run tests in this environment ● We have a few configurations that run on CI (master, release, development branches, etc) ● CI jobs that use same resources for UI tests must block one another, leading to inefficient wait time Custom Test Runner Problems
  • 19. title, date, 01 of 10 ● Run configurations are set within Jenkins job ● New configurations or one-off configurations require setting up a new Jenkins job ● Pre-commit testing is not feasible Custom Test Runner Problems
  • 20. title, date, 01 of 10 ● Test running order cannot be specified ● Test results are only collected from devices after all tests have been completed ● Failed tests are retried a second time, but this is not visible in the reports Custom Test Runner Problems
  • 21. title, date, 01 of 10 Mobile Test Runner Service!
  • 22. title, date, 01 of 10 ● Android only for now, but iOS support coming soon ● Mostly written in Scala ● Communicates with devices through ADB using ddmlib ● REST API for clients Mobile Test Runner Service
  • 23. title, date, 01 of 10 Mobile Test Runner Service
  • 24. title, date, 01 of 10 ● Resource management is controlled by the service itself ○ Don’t have to rely on Jenkins ● Test runs can be executed in parallel ● Resources are used efficiently; device workers keep executing tests as long as there are tests in the queue ● Developers can test pre-commit changes on same environment used by CI Results
  • 25. title, date, 01 of 10 ● Test queue ordering is also controlled by the service itself, so we can run the most important tests first (test age, flakiness, etc) Results
  • 26. title, date, 01 of 10 ● Test results (stack trace, full log, and videos for failed tests) are available as soon as each individual test finishes ● Retries for failed tests clearly indicated in HTML report ● Data about devices, tests, and results are stored in a DB, making statistical analysis easier Results
  • 28. title, date, 01 of 10 ● Test runs are easily configured via REST API Results
  • 29. title, date, 01 of 10 ● Built a Java client library ● Integrate into Gradle tasks so test configuration for CI is part of the Android codebase But API Endpoints can be annoying to remember...
  • 30. title, date, 01 of 10 ● Not easily parameterized ● Names can be annoying to to remember ● Command line is not the most user friendly interface And Gradle tasks have problems, too...
  • 31. title, date, 01 of 10 ● Developers can run tests for local changes on CI environment right from Android Studio ● Right click to run specific test method, test class, test package ● Results are reported natively, including links to videos and logs for failed tests Solution: IntelliJ Plugin