groovy and noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/groovy-and-noteworthy.pdf · geb is...

44
Groovy and Noteworthy Izzet Mustafayev@EPAM Systems @webdizz http://webdizz.name

Upload: others

Post on 30-May-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Groovy and

Noteworthy

Izzet Mustafayev@EPAM Systems@webdizzhttp://webdizz.name

Page 2: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Agenda

● Groovy

○ Specials

○ Basics

○ Infrastructure

● Getting Started

Page 3: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

GroovySpecials

Page 4: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Groovy is an agile dynamic language

Page 5: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

println 'Hello World!'

Page 6: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Java is a Groovy but Groovy is not Java

Page 7: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Groovy supports DSL

Page 8: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Groovy supports DSL

● A flexible syntax

● Closures

● Meta-programming

● Operator overloading

● No dots and semicolons

● No parentheses, … well almost

Page 9: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Groovy provides statically type check

Page 10: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Groovy provides statically type check

@groovy.transform.TypeChecked void method() { // do nothing}

Page 11: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Groovy Basics

Page 12: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Groovy Shell

Page 13: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Groovy Console

Page 14: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Omission of get/set methodsclass Person { String name String email}

def person = new Person()person.email = '[email protected]'

println person.email //[email protected]

Page 15: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Initializing beans with named parametersclass Person { String name String email}

def person = new Person(name: 'me')

println person.name// me

Page 16: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Context operations using withclass Person { String name String email}def person = new Person(name: 'me', email: '[email protected]')person.with{ println name// me println email// [email protected]}

Page 17: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

GStrings (interpolation, multiline)

def param = 'param'def groovyString = """

There is a ‘${param}’ param"""

println groovyString// There is a ‘param’ param

Page 18: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Native syntax for data structures : List

def list = [1, 4, 6, 9]

println list[-2] // 6

list << 10println list.size() // 5

list = list - 10println list // [1, 4, 6, 9]

Page 19: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

def map = [UA: 'Ukraine', UK: 'United Kingdom']

println map.UA // Ukraineprintln map[‘UA’] // Ukraine

map << [US: 'United States']println map.US // United States

Native syntax for data structures : Map

Page 20: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Native syntax for data structures : Range

def range = 10..20println range[2] //12

def rangeAlpha = 'a’..'d’println rangeAlpha[2] //c

switch (weight) { case 1..10: shippingCost = 5; break case 11..25: shippingCost = 10; break default: shippingCost = 1; }

Page 21: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Elvis operator for default values

def name = null

println name != null ? name : ’Unknown’ // Unknown

println name ?: ’Unknown’ // Unknown

name = 'name'println name ?: ‘Unknown’ // name

Page 22: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Safe graph navigationif (order != null) { if (order.getCustomer() != null) { if (order.getCustomer().getAddress() != null) {

Address address;address = order.getCustomer().getAddress()System.out.println(address);

} } }

println order?.customer?.address

Page 23: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Closures

printSum = { a, b -> print a+b }

printSum(5, 7)// 12

Page 24: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Closures

upperCasedList = ['a','b','c','d']. collect { it.toUpperCase() }

println upperCasedList // A, B, C, D

Page 25: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

MetaprogrammingString.metaClass.cons2var = { ->

String res = ''delegate.toLowerCase()

.tokenize('_')

.each{ s ->res += res ? s.capitalize() : s

} res}

println ’SAMPLE_VAR’.cons2var() //sampleVar

Page 26: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Groovy Infrastructure

Page 27: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Gradle - http://gradle.org/● Strong yet flexible conventions

● Manageable and understandable builds for anything

● Follows convention over configuration approach

● Great plug-ins ecosystem

Page 28: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Spock - https://github.com/spockframework/spock

● Testing and specification framework

● JUnit compatible

● Highly expressive specification language

Page 29: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Easyb - http://easyb.org/● Behavior driven development framework

● Specifications are written in Groovy and run via a Java runner,

command line, Maven or Ant

● Supports a few different styles of specifications ranging from

RSpec's it to a story based DSL with givens, whens, and

thens

Page 30: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Grails - http://grails.org/● Grails is an Open Source, full stack web application

framework for the JVM

● Based on Spring, Hibernate, Sitemesh, etc.

● There are a lot of plug-ins

Page 31: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Grape - http://groovy.codehaus.org/Grape● Grape lets you quickly add maven repository

dependencies to your classpath.

@Grab(group='org.codehaus.sonar', module='sonar-ws-client', version='4.0')@Grab(group='commons-httpclient', module='commons-httpclient', version='3.1')

import org.sonar.wsclient.SonarClient

SonarClient sonarClient = SonarClient.builder().url(URL).login(options.u).password(password).build()

Page 32: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Geb - http://www.gebish.org/● Geb is a browser automation solution

● brings together the power of WebDriver, the elegance of jQuery

content selection, the robustness of Page Object modelling and

the expressiveness of the Groovy

● Can be used for scripting, scraping and general automation — or

equally as a functional/web/acceptance testing solution via

integration with testing frameworks such as Spock, JUnit &

TestNG.

Page 33: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Griffon - http://griffon.codehaus.org● Desktop development framework inspired in Grails

● Primarily Swing based however supports SWT, Pivot,

GTK and JavaFX too

● Growing plugin system (80+ plugins)

Page 34: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Gaelyk - http://gaelyk.appspot.com● Google App Engine development framework based

on Groovy and Groovlets

● Emerging plugin system

Page 35: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

GPars - http://gpars.codehaus.org/● Provides DSL and concurrent friendly methods for

collections

● Supports Actors and STM

● Dataflow concurrency model

Page 36: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

CodeNarc - http://codenarc.sourceforge.net/● Static analysis for Groovy code

● Over 175 rules to detect defects, bad practices, style

issues etc.

● Build tools and Sonar integration

Page 37: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

GVM - http://gvmtool.net/● Manages parallel Versions of multiple SDKs

● Convenient command line interface

● Inspired by RVM

● Supports Groovy, Grails, Gradle etc

● Unfortunately does not work for Win

Page 38: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

GroovyServ - http://kobo.github.io/groovyserv/● Improves Groovy’s startup time

Page 39: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Getting Started

Page 40: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

http://groovy.codehaus.org/

Page 41: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Groovy in Action*

by Dierk König

● Groovy committer since

2004

● Frequent conference

speaker

● Contributor to several agile

and testing books

Page 42: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Programming Groovy 2

by Venkat Subramaniam

● An award-winning author

● Famous Agile Guru

● Frequent conference

speaker

Page 43: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance
Page 44: Groovy and Noteworthy - jug.uajug.ua/wp-content/uploads/2014/03/Groovy-and-Noteworthy.pdf · Geb is a browser automation solution brings together the power of WebDriver, the elegance

Thank You!

Groovy and

NoteworthyIzzet Mustafayev@EPAM Systems@webdizzhttp://webdizz.name