Continuous Integration of mobile apps with Appium and Docker @agomezmoron #opensouthcode
2 of 66 First of all, let’s take a selfie! #opensouthcode @agomezmoron
3 of 66 About me agomezmoron-compose.yml version: '1987' services: works on: - company: { name: @emergya, role: QA & Team lead } - company: { name: @EPSUPO, role: QA teacher } type: Non-stop learner community: @SevillaQA organizer #opensouthcode @agomezmoron
www.emergya.com Roadmap ● Introduction ● What Appium is ● Appium architecture ● Type of apps to be tested ● Continuous Integration ● Docker as centerpiece ● Conclusions #opensouthcode @agomezmoron
www.emergya.com Introduction #opensouthcode @agomezmoron
6 of 66 Introduction ● Why do we develop for mobile devices? ● Why do we have to test apps? #opensouthcode @agomezmoron
7 of 66 Introduction Why do we develop for mobile devices? ● Since 2014 there are more mobile users than desktop ones. ● People buy more mobile devices than non mobile ones. source #opensouthcode @agomezmoron
8 of 66 #opensouthcode @agomezmoron Introduction Why do we have to test apps? ● 90% of the time using apps vs 10% using the browser. ● Different OS (and also the same OS works different depending on the version…). ● Native vs Hybrid apps. source
www.emergya.com What Appium is #opensouthcode @agomezmoron
10 of 66 What Appium is ● Appium is an open source test automation framework for use with native, hybrid and mobile web apps. ● It drives iOS, Android, and Windows apps using the WebDriver protocol. #opensouthcode @agomezmoron
11 of 66 What Appium is Appium rules: 1. You shouldn’t have to recompile your app or modify it in any way in order to automate it. 2. You shouldn’t be locked into a specific language or framework to write and run your tests. 3. A mobile automation framework shouldn’t reinvent the wheel when it comes to automation APIs. 4. A mobile automation framework should be open source, in spirit and practice as well as in name! #opensouthcode @agomezmoron
www.emergya.com Appium architecture #opensouthcode @agomezmoron
13 of 66 Appium architecture Appium test script JSON Wire protocol (WebDriver usage) node.js XCTest / UIAutomation (iOS) Selendroid (Android 2.3+) UiAutomator (Android 4.2+) WinAppDriver (Windows) Marionette (Firefox OS) #opensouthcode @agomezmoron
www.emergya.com Types of apps to be tested #opensouthcode @agomezmoron
15 of 66 #opensouthcode @agomezmoron Type of apps to be tested Device & Mobile API Web Mobile Browser Web www.emergya.com
16 of 66 #opensouthcode @agomezmoron Type of apps to be tested Hybrid Apps Device API APP (WebView) HTML 5
17 of 66 #opensouthcode @agomezmoron Type of apps to be tested Native Apps Device API APP
18 of 66 #opensouthcode @agomezmoron Type of apps to be tested Native Apps Device API APP - Advanced touch actions - Delays between commands - etc
www.emergya.com Continuous Integration #opensouthcode @agomezmoron
20 of 66 Continuous Integration #opensouthcode @agomezmoron
21 of 66 Continuous Integration pull request accept/reject Developers’ code Build the app Testing binary #opensouthcode @agomezmoron
22 of 66 Continuous Integration Writing tests for mobile apps is easy but, what about running them? ● You can use cloud services (money!) ● You can use physical devices (money!) ● You can use emulators (memory usage!) #opensouthcode @agomezmoron
www.emergya.com Docker as centerpiece #opensouthcode @agomezmoron
24 of 66 Appium test script JSON Wire protocol (WebDriver usage) node.js XCTest / UIAutomation (iOS) Selendroid (Android 2.3+) UiAutomator (Android 4.2+) WinAppDriver (Windows) Marionette (Firefox OS) Docker as centerpiece #opensouthcode @agomezmoron
25 of 66 Appium test script JSON Wire protocol (WebDriver usage) node.js XCTest / UIAutomation (iOS) Selendroid (Android 2.3+) UiAutomator (Android 4.2+) WinAppDriver (Windows) Marionette (Firefox OS) X11 Docker as centerpiece #opensouthcode @agomezmoron
26 of 66 Docker as centerpiece #opensouthcode @agomezmoron $ docker build --build-arg JAVA_VERSION=8 --build-arg ANDROID_SDK_VERSION=23 --build-arg VNC_PASSWD=1234 -t agomezmoron/docker-appium . && docker rmi -f $(docker images -f "dangling=true" -q) &> /dev/null
27 of 66 Docker as centerpiece #opensouthcode @agomezmoron $ docker run --privileged -v /YOUR/SOURCES/FOLDER:/src -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) -e DOCKER_TESTS_COMMAND="DOCKER COMMAND TO BE RUN" --rm -t -i -p 5900:5900 agomezmoron/docker-appium
28 of 66 Docker as centerpiece #opensouthcode @agomezmoron $ docker run --privileged -v /YOUR/SOURCES/FOLDER:/src -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) -e DOCKER_TESTS_COMMAND="DOCKER COMMAND TO BE RUN" --rm -t -i -p 5900:5900 agomezmoron/docker-appium X11 /src entrypoint Test code
29 of 66 ● It rocks but...you can only emulate once! So, you will have your Jenkins node blocked (or you will need more slaves). ● So, it isn’t so easy... Docker as centerpiece #opensouthcode @agomezmoron
30 of 66 Docker as centerpiece #opensouthcode @agomezmoron
31 of 66 pull request accept/reject Developers’ code Build the app Testing binary Testing + ZRAM + Docker as centerpiece #opensouthcode @agomezmoron
32 of 66 pull request accept/reject Developers’ code Build the app Testing binary Testing + ZRAM + Docker as centerpiece #opensouthcode @agomezmoron
33 of 66 ● Raspberry Pi 3 + ZRAM module will allow us to run our Docker image with the emulator (emulators with ARM architecture). ● So the Raspberries are our Jenkins slaves! Docker as centerpiece #opensouthcode @agomezmoron
www.emergya.com Conclusions #opensouthcode @agomezmoron
35 of 66 ● Appium is a framework that allows us to write tests for native & hybrid mobile apps. ● Writing tests in Appium is not as easy as Selenium for Web Apps but there are Open Source libraries to help us! (https://github.com/agomezmoron/appium-handler) Conclusions #opensouthcode @agomezmoron
36 of 66 #opensouthcode @agomezmoron ● Appium is a framework that allows us to write tests for native & hybrid mobile apps. ● Writing tests in Appium is not as easy as Selenium for Web Apps but there are Open Source libraries to help us! (https://github.com/agomezmoron/appium-handler) Conclusions
37 of 66 #opensouthcode @agomezmoron ● Appium is a framework that allows us to write tests for native & hybrid mobile apps. ● Writing tests in Appium is not as easy as Selenium for Web Apps but there are Open Source libraries to help us! (https://github.com/agomezmoron/appium-handler) Conclusions
38 of 66 ● There are some Dockers with Appium on the Internet but I use my own image that contains Appium + Java + Android SDK (you can also clone and build it customizing the versions). (https://github.com/agomezmoron/docker-appium) Conclusions #opensouthcode @agomezmoron
www.emergya.com Questions? #opensouthcode @agomezmoron
www.emergya.com Thanks! #opensouthcode @agomezmoron

Continuous Integration of Mobile Apps with Docker and Appium

  • 1.
    Continuous Integration ofmobile apps with Appium and Docker @agomezmoron #opensouthcode
  • 2.
    2 of 66 Firstof all, let’s take a selfie! #opensouthcode @agomezmoron
  • 3.
    3 of 66 Aboutme agomezmoron-compose.yml version: '1987' services: works on: - company: { name: @emergya, role: QA & Team lead } - company: { name: @EPSUPO, role: QA teacher } type: Non-stop learner community: @SevillaQA organizer #opensouthcode @agomezmoron
  • 4.
    www.emergya.com Roadmap ● Introduction ● WhatAppium is ● Appium architecture ● Type of apps to be tested ● Continuous Integration ● Docker as centerpiece ● Conclusions #opensouthcode @agomezmoron
  • 5.
  • 6.
    6 of 66 Introduction ●Why do we develop for mobile devices? ● Why do we have to test apps? #opensouthcode @agomezmoron
  • 7.
    7 of 66 Introduction Whydo we develop for mobile devices? ● Since 2014 there are more mobile users than desktop ones. ● People buy more mobile devices than non mobile ones. source #opensouthcode @agomezmoron
  • 8.
    8 of 66 #opensouthcode@agomezmoron Introduction Why do we have to test apps? ● 90% of the time using apps vs 10% using the browser. ● Different OS (and also the same OS works different depending on the version…). ● Native vs Hybrid apps. source
  • 9.
  • 10.
    10 of 66 WhatAppium is ● Appium is an open source test automation framework for use with native, hybrid and mobile web apps. ● It drives iOS, Android, and Windows apps using the WebDriver protocol. #opensouthcode @agomezmoron
  • 11.
    11 of 66 WhatAppium is Appium rules: 1. You shouldn’t have to recompile your app or modify it in any way in order to automate it. 2. You shouldn’t be locked into a specific language or framework to write and run your tests. 3. A mobile automation framework shouldn’t reinvent the wheel when it comes to automation APIs. 4. A mobile automation framework should be open source, in spirit and practice as well as in name! #opensouthcode @agomezmoron
  • 12.
  • 13.
    13 of 66 Appiumarchitecture Appium test script JSON Wire protocol (WebDriver usage) node.js XCTest / UIAutomation (iOS) Selendroid (Android 2.3+) UiAutomator (Android 4.2+) WinAppDriver (Windows) Marionette (Firefox OS) #opensouthcode @agomezmoron
  • 14.
    www.emergya.com Types of appsto be tested #opensouthcode @agomezmoron
  • 15.
    15 of 66 #opensouthcode@agomezmoron Type of apps to be tested Device & Mobile API Web Mobile Browser Web www.emergya.com
  • 16.
    16 of 66 #opensouthcode@agomezmoron Type of apps to be tested Hybrid Apps Device API APP (WebView) HTML 5
  • 17.
    17 of 66 #opensouthcode@agomezmoron Type of apps to be tested Native Apps Device API APP
  • 18.
    18 of 66 #opensouthcode@agomezmoron Type of apps to be tested Native Apps Device API APP - Advanced touch actions - Delays between commands - etc
  • 19.
  • 20.
    20 of 66 ContinuousIntegration #opensouthcode @agomezmoron
  • 21.
    21 of 66 ContinuousIntegration pull request accept/reject Developers’ code Build the app Testing binary #opensouthcode @agomezmoron
  • 22.
    22 of 66 ContinuousIntegration Writing tests for mobile apps is easy but, what about running them? ● You can use cloud services (money!) ● You can use physical devices (money!) ● You can use emulators (memory usage!) #opensouthcode @agomezmoron
  • 23.
  • 24.
    24 of 66 Appiumtest script JSON Wire protocol (WebDriver usage) node.js XCTest / UIAutomation (iOS) Selendroid (Android 2.3+) UiAutomator (Android 4.2+) WinAppDriver (Windows) Marionette (Firefox OS) Docker as centerpiece #opensouthcode @agomezmoron
  • 25.
    25 of 66 Appiumtest script JSON Wire protocol (WebDriver usage) node.js XCTest / UIAutomation (iOS) Selendroid (Android 2.3+) UiAutomator (Android 4.2+) WinAppDriver (Windows) Marionette (Firefox OS) X11 Docker as centerpiece #opensouthcode @agomezmoron
  • 26.
    26 of 66 Dockeras centerpiece #opensouthcode @agomezmoron $ docker build --build-arg JAVA_VERSION=8 --build-arg ANDROID_SDK_VERSION=23 --build-arg VNC_PASSWD=1234 -t agomezmoron/docker-appium . && docker rmi -f $(docker images -f "dangling=true" -q) &> /dev/null
  • 27.
    27 of 66 Dockeras centerpiece #opensouthcode @agomezmoron $ docker run --privileged -v /YOUR/SOURCES/FOLDER:/src -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) -e DOCKER_TESTS_COMMAND="DOCKER COMMAND TO BE RUN" --rm -t -i -p 5900:5900 agomezmoron/docker-appium
  • 28.
    28 of 66 Dockeras centerpiece #opensouthcode @agomezmoron $ docker run --privileged -v /YOUR/SOURCES/FOLDER:/src -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) -e DOCKER_TESTS_COMMAND="DOCKER COMMAND TO BE RUN" --rm -t -i -p 5900:5900 agomezmoron/docker-appium X11 /src entrypoint Test code
  • 29.
    29 of 66 ●It rocks but...you can only emulate once! So, you will have your Jenkins node blocked (or you will need more slaves). ● So, it isn’t so easy... Docker as centerpiece #opensouthcode @agomezmoron
  • 30.
    30 of 66 Dockeras centerpiece #opensouthcode @agomezmoron
  • 31.
    31 of 66 pullrequest accept/reject Developers’ code Build the app Testing binary Testing + ZRAM + Docker as centerpiece #opensouthcode @agomezmoron
  • 32.
    32 of 66 pullrequest accept/reject Developers’ code Build the app Testing binary Testing + ZRAM + Docker as centerpiece #opensouthcode @agomezmoron
  • 33.
    33 of 66 ●Raspberry Pi 3 + ZRAM module will allow us to run our Docker image with the emulator (emulators with ARM architecture). ● So the Raspberries are our Jenkins slaves! Docker as centerpiece #opensouthcode @agomezmoron
  • 34.
  • 35.
    35 of 66 ●Appium is a framework that allows us to write tests for native & hybrid mobile apps. ● Writing tests in Appium is not as easy as Selenium for Web Apps but there are Open Source libraries to help us! (https://github.com/agomezmoron/appium-handler) Conclusions #opensouthcode @agomezmoron
  • 36.
    36 of 66 #opensouthcode@agomezmoron ● Appium is a framework that allows us to write tests for native & hybrid mobile apps. ● Writing tests in Appium is not as easy as Selenium for Web Apps but there are Open Source libraries to help us! (https://github.com/agomezmoron/appium-handler) Conclusions
  • 37.
    37 of 66 #opensouthcode@agomezmoron ● Appium is a framework that allows us to write tests for native & hybrid mobile apps. ● Writing tests in Appium is not as easy as Selenium for Web Apps but there are Open Source libraries to help us! (https://github.com/agomezmoron/appium-handler) Conclusions
  • 38.
    38 of 66 ●There are some Dockers with Appium on the Internet but I use my own image that contains Appium + Java + Android SDK (you can also clone and build it customizing the versions). (https://github.com/agomezmoron/docker-appium) Conclusions #opensouthcode @agomezmoron
  • 39.
  • 40.