33
Selenide or Geb? 〜あなたはその時どちらを使う〜 JJUG CCC Fall 2017 @shimashima35 & @PoohSunny

Selenide or Geb 〜あなたはその時どちらを使う〜

Embed Size (px)

Citation preview

Page 1: Selenide or Geb 〜あなたはその時どちらを使う〜

Selenide or Geb?〜あなたはその時どちらを使う〜

JJUG CCC Fall 2017@shimashima35 & @PoohSunny

Page 2: Selenide or Geb 〜あなたはその時どちらを使う〜

このセッションでは

Page 3: Selenide or Geb 〜あなたはその時どちらを使う〜

Seleniumを使う上で、Selenide, Gebどっちを使えばいいの?を考えます。

● とはいえ最初はそれぞれの概略から

● それぞれの推しポイント

● 使った際のメリット、デメリット

● で、どういう時にどちらを使えばいいの?

途中の質問&ご意見大歓迎です!!

Page 4: Selenide or Geb 〜あなたはその時どちらを使う〜

自己紹介:Selenide担当

● Bio○ 名前 島根義和

○ ピクシブ (New! 2017年11月から)○ Twitter : @shimashima35○ 15年以上Javaエンジニア、でもテストも好き。本当はソフトウェア工学が好き。

○ JaSST Tokyo実行委員 / JSTQB AL テストマネージャー取得 (New!)● Selenideとのかかわり

○ 前職でSelenideを使い始めた

○ WebDriver初経験がSelenide○ 生のWebDriverは使ったことがない

○ 「SelenideによるDSL風E2E自動テスト基盤開発の実例 」

Page 5: Selenide or Geb 〜あなたはその時どちらを使う〜

自己紹介:Geb担当

● @PoohSunny○ ある事業会社の開発リーダー

○ Java, Swift, Groovy● Gebとのかかわり

○ 前職でGeb使い始める

○ 現職では紹介したり廃止したり

○ コントリビューター

○ CodeZineの連載Geb担当

Page 6: Selenide or Geb 〜あなたはその時どちらを使う〜

好評連載中!

Page 7: Selenide or Geb 〜あなたはその時どちらを使う〜

好評連載中!

最新化して

書籍化決定!

〜デブサミ〜

Page 8: Selenide or Geb 〜あなたはその時どちらを使う〜

よろしくお願いします

Page 9: Selenide or Geb 〜あなたはその時どちらを使う〜

まずは概略

Page 10: Selenide or Geb 〜あなたはその時どちらを使う〜
Page 11: Selenide or Geb 〜あなたはその時どちらを使う〜

紹介:Selenide

● エストニアのCodeborne社 Andrei Solntsev氏によって開発

が行われているJava製WebDriverラッパー。

○ GitHub上で積極的に開発が行われている。

○ 現在 Ver 4.8○ 1,2 ヶ月毎にバージョンアップ

● DSLを用いたjQuery風セレクタなどを提供。

● IDEによる補完を積極的に利用することで、容易に利用するこ

とができる。

● 要素取得時の待ち暗黙的に行う。

○ AJAXなどの非同期処理の返りの処理記述が容易。

Page 12: Selenide or Geb 〜あなたはその時どちらを使う〜
Page 13: Selenide or Geb 〜あなたはその時どちらを使う〜

紹介:Geb

● Groovy製のSeleniumラッパー

○ 現在のバージョンは2.0● DSLを用いたjQuery風セレクタなどを提供。(Selenideと一緒)● Groovyの機能をふんだんに利用した、超簡潔な記述がウリ

○ 柔軟なwaitも使いやすい

Page 14: Selenide or Geb 〜あなたはその時どちらを使う〜
Page 15: Selenide or Geb 〜あなたはその時どちらを使う〜
Page 16: Selenide or Geb 〜あなたはその時どちらを使う〜

Pros and Cons

Page 17: Selenide or Geb 〜あなたはその時どちらを使う〜

Pros/Cons : Selenide

● Pros○ 簡単に利用できる/学習コストが低い

○ Seleniumの知識はほぼ不要

○ IDEとの親和性が高い

○ 標準でAjaxなどの待ち処理対応

○ Enterprise Support (New!)○ Java

● Cons ○ 日本語情報が(まだ)少ない

○ 対話的に使うことができない

■ IDE上のデバッグで代用

■ Java9 JShell で可能かも

Page 18: Selenide or Geb 〜あなたはその時どちらを使う〜

Pros/Cons : Geb

● Pros○ 簡潔な記述

○ 豊富な機能群

○ 豊富なエコシステム

○ 日本語情報はSelenideに比べると多め

○ 簡単に利用できる

● Cons ○ 学習コストが高め

■ Gebそのものもそうだが、GroovyやGradleも手を出す

と大変

○ IDEの補完が効きづらい

■ IntelliJ IDEAを利用したり、多少補完を効かせる方法

はある

Page 19: Selenide or Geb 〜あなたはその時どちらを使う〜

いくつかの体験談

Page 20: Selenide or Geb 〜あなたはその時どちらを使う〜

経験談:初めてのSelenium(Selenide)

● SeleniumでのE2Eテスト導入を担当

○ Selenium、Selenideとも未経験

○ SelenideはWebサイトを見ていただけ

Selenideのサンプル通りに書き何も躓かずに動いた。

そのまま1週間程度で簡単なシナリオ完成。

Page 21: Selenide or Geb 〜あなたはその時どちらを使う〜

経験談:Jenkinsで不安定

● Jenkinsで不安定

○ 手元で通るのにJenkinsに載せると失敗する

○ デフォルトで待ち処理が入っているのに……○ 録画機能などを使わないと原因追及が困難

生のSeleniumよりはましかもしれないが、安定化はやはり大変

Page 22: Selenide or Geb 〜あなたはその時どちらを使う〜

経験談:マルチブラウザテストの導入

● マルチブラウザのテストがしたい

○ でも最初に辛い思いはしたくない

■ 開発時にphantomjsを利用

○ Chrome -> Firefox、と展開

● クラウド上のブラウザでやりたい

○ Sauce labsを利用

GebConfigの書き換え(Driverの生成処理の変更)で実現でき、

対応が楽だった。

Page 23: Selenide or Geb 〜あなたはその時どちらを使う〜

経験談:運用が始まってからテストが落ちる→記述の簡潔さに助かるimport geb.Pageimport geb.spock.GebSpec class LoginSpec extends GebSpec { def "login to admin section"() { given: to LoginPage when: loginForm.with { username = "admin" password = "password" } and: loginButton.click() then: at AdminPage }}

Page 24: Selenide or Geb 〜あなたはその時どちらを使う〜

Selenide or Geb?

Page 25: Selenide or Geb 〜あなたはその時どちらを使う〜

外的要因

● Groovyが使えるか

● 知名度/利用実績

○ Selenideは弱い

● 商用サポートの有無

○ Selenideは日本語ではないが、商用サポート

が始まった

Page 26: Selenide or Geb 〜あなたはその時どちらを使う〜

内的要因:読むか書くか

● 記述量/記述性 どちらを優先させるか

○ Gebは記述量が少ない

○ Selenideは記述性(IDEによる補完)がよい

Page 27: Selenide or Geb 〜あなたはその時どちらを使う〜

内的要因:学習コスト

● SelenideはIDEの力を借りやすく、初見でもある程

度書ける

● Gebは相対的に習得コストは高め。ただし機能は

豊富なので慣れると便利。

Page 28: Selenide or Geb 〜あなたはその時どちらを使う〜

内的要因:テスティングフレームワーク

● テストティングフレームワーク

○ GebはGroovyなのでSpockが使える

○ SelenideはJUnit/TestNGなど

■ アサーションもある程度同梱

○ データ駆動などをするならSpockが優位

Page 29: Selenide or Geb 〜あなたはその時どちらを使う〜

内的要因:さくっと動かす

● 対話環境

○ Gebはgroovysh○ SelenideはJShellがもしかしたら使えるかも……

■ IDE+Debugで似たようなことは今までもな

んとかできた

● Groovyはスクリプトとして動かすという手も

Page 30: Selenide or Geb 〜あなたはその時どちらを使う〜

まとめに変えて

Page 31: Selenide or Geb 〜あなたはその時どちらを使う〜

あなたは「その時」どちらを使う?

● コンテクストは様々

○ その時々で良し悪しは変わる

Page 32: Selenide or Geb 〜あなたはその時どちらを使う〜

タイミングを味方にして良いSelenide or Gebライフを!

Page 33: Selenide or Geb 〜あなたはその時どちらを使う〜

おしまい