38
#JCConf 㵕ಋሻ Java 䌕礯ୌᗝૡ Gradle Docker JCConf Taiwan 2015 Workshop

JCConf 2015 workshop 動手玩 Java 專案建置工具

Embed Size (px)

Citation preview

Page 1: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

Java

Gradle Docker

JCConf Taiwan 2015 Workshop

Page 2: JCConf 2015 workshop 動手玩 Java 專案建置工具

Outline• Introduction• Docker Image Installation• Classical Geb Testing• Geb Test with Dockerize Browser• Gradle Build and Geb Test with Docker

Page 3: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

Hackpad

https://goo.gl/PbW62V

Page 4: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

Introduction

Page 5: JCConf 2015 workshop 動手玩 Java 專案建置工具

PackageLibrary

ApplicationServer

e2e test

Page 6: JCConf 2015 workshop 動手玩 Java 專案建置工具

auto test success

local debug

test case success success

remote debug

test failed

test failed test failed

Page 7: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

Docker Image Installation

Page 8: JCConf 2015 workshop 動手玩 Java 專案建置工具

docker load• docker load --input ${ }/jcconf_main.tar• docker load --input ${ }/jcconf_client.tar•• docker images• trunk/groovy_gradle• vvoyer/docker-selenium-firefox-chrome

Page 9: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

Let’s Start!

Page 10: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

Classical Geb Testing

Page 11: JCConf 2015 workshop 動手玩 Java 專案建置工具

Browser with WebDriver

control

test resultsJava Gradle Geb

Page 12: JCConf 2015 workshop 動手玩 Java 專案建置工具

••

Page 13: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

Demo Repository

Page 14: JCConf 2015 workshop 動手玩 Java 專案建置工具

GebConfig1. firefox {2. driver = {3. DesiredCapabilities capabilities = DesiredCapabilities.firefox()4. def host = System.env.JCCONF_CLIENT_PORT_4444_TCP_ADDR ?: 'localhost'5. def port = System.env.JCCONF_CLIENT_PORT_4444_TCP_PORT ?: '4444'6. 7. if (host == 'localhost') {8. new FirefoxDriver()9. }10. else {11. URL url = new URL("http://$host:$port/wd/hub")12. new RemoteWebDriver(url, capabilities)13. }14. }15.}16.

src/test/resources/GebConfig.groovy

Page 15: JCConf 2015 workshop 動手玩 Java 專案建置工具

Target

••• Google Chrome• Firefox

Page 16: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

Page 17: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

Geb Web Testingwithout Docker

Page 18: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

Page 19: JCConf 2015 workshop 動手玩 Java 專案建置工具

Run Gradle

./gradlew firefoxTest

./gradlew chromeTest

Get Source Code

https://github.com/TrunkWorkshop/jcconf-2015-java-docker

git clone https://github.com/TrunkWorkshop/jcconf-2015-java-docker.git

Page 20: JCConf 2015 workshop 動手玩 Java 專案建置工具

Testing with Jenkins CI• daily build• code committed• pull request• before staging• before release• trigger manually

Page 21: JCConf 2015 workshop 動手玩 Java 專案建置工具

Jenkins CI with Real Browser ?• PhantomJS(headless) is not real

??HOW-TO

Page 22: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

Geb Test with

Dockerize Browser

Page 23: JCConf 2015 workshop 動手玩 Java 專案建置工具

browser

test case

control

result

VNC

Page 24: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

docker browser

docker-compose up client

Page 25: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

View Docker Inside

vnc://DOCKER_HOST:5999

password: secret

Page 26: JCConf 2015 workshop 動手玩 Java 專案建置工具

• Jenkins CI Test Failed• CI

••

Page 27: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

export JCCONF_CLIENT_PORT_4444_TCP_ADDR=DOCKER_HOST

export JCCONF_CLIENT_PORT_4444_TCP_PORT=4444

Page 28: JCConf 2015 workshop 動手玩 Java 專案建置工具

GebConfig1. firefox {2. driver = {3. DesiredCapabilities capabilities = DesiredCapabilities.firefox()4. def host = System.env.JCCONF_CLIENT_PORT_4444_TCP_ADDR ?: 'localhost'5. def port = System.env.JCCONF_CLIENT_PORT_4444_TCP_PORT ?: '4444'6. 7. if (host == 'localhost') {8. new FirefoxDriver()9. }10. else {11. URL url = new URL("http://$host:$port/wd/hub")12. new RemoteWebDriver(url, capabilities)13. }14. }15.}16.

src/test/resources/GebConfig.groovy

Page 29: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

local test + docker browser

gradle remoteFirefoxTest

Page 30: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

vnc://DOCKER_HOST:5999

password: secret

Page 31: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

Gradle Build and Geb Test with

Docker

Page 32: JCConf 2015 workshop 動手玩 Java 專案建置工具

client env

project env

browser test case

control

result

VNC JAVAgradle

Page 33: JCConf 2015 workshop 動手玩 Java 專案建置工具

• CI ••• migrate

Page 34: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

docker-compose up main

Page 35: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

vnc://dockerhost:5999password: secret

Page 36: JCConf 2015 workshop 動手玩 Java 專案建置工具

#JCConf

docker-compose

Page 37: JCConf 2015 workshop 動手玩 Java 專案建置工具

main: container_name: jcconf_main image: trunk/groovy_gradle command: "/bin/bash -l -c 'gradle firefoxTest'" links: - client volumes: - ./:/jcconf_main working_dir: /jcconf_main

client: container_name: jcconf_client image: vvoyer/docker-selenium-firefox-chrome ports: - "4444:4444" - "5999:5999"

Page 38: JCConf 2015 workshop 動手玩 Java 專案建置工具

Jenkins with Docker

docker-compose up main