Upload
youtarou-takahashi
View
1.297
Download
0
Embed Size (px)
Citation preview
Selenide or Geb?〜あなたはその時どちらを使う〜
JJUG CCC Fall 2017@shimashima35 & @PoohSunny
このセッションでは
Seleniumを使う上で、Selenide, Gebどっちを使えばいいの?を考えます。
● とはいえ最初はそれぞれの概略から
● それぞれの推しポイント
● 使った際のメリット、デメリット
● で、どういう時にどちらを使えばいいの?
途中の質問&ご意見大歓迎です!!
自己紹介:Selenide担当
● Bio○ 名前 島根義和
○ ピクシブ (New! 2017年11月から)○ Twitter : @shimashima35○ 15年以上Javaエンジニア、でもテストも好き。本当はソフトウェア工学が好き。
○ JaSST Tokyo実行委員 / JSTQB AL テストマネージャー取得 (New!)● Selenideとのかかわり
○ 前職でSelenideを使い始めた
○ WebDriver初経験がSelenide○ 生のWebDriverは使ったことがない
○ 「SelenideによるDSL風E2E自動テスト基盤開発の実例 」
自己紹介:Geb担当
● @PoohSunny○ ある事業会社の開発リーダー
○ Java, Swift, Groovy● Gebとのかかわり
○ 前職でGeb使い始める
○ 現職では紹介したり廃止したり
○ コントリビューター
○ CodeZineの連載Geb担当
好評連載中!
好評連載中!
最新化して
書籍化決定!
〜デブサミ〜
よろしくお願いします
まずは概略
紹介:Selenide
● エストニアのCodeborne社 Andrei Solntsev氏によって開発
が行われているJava製WebDriverラッパー。
○ GitHub上で積極的に開発が行われている。
○ 現在 Ver 4.8○ 1,2 ヶ月毎にバージョンアップ
● DSLを用いたjQuery風セレクタなどを提供。
● IDEによる補完を積極的に利用することで、容易に利用するこ
とができる。
● 要素取得時の待ち暗黙的に行う。
○ AJAXなどの非同期処理の返りの処理記述が容易。
紹介:Geb
● Groovy製のSeleniumラッパー
○ 現在のバージョンは2.0● DSLを用いたjQuery風セレクタなどを提供。(Selenideと一緒)● Groovyの機能をふんだんに利用した、超簡潔な記述がウリ
○ 柔軟なwaitも使いやすい
Pros and Cons
Pros/Cons : Selenide
● Pros○ 簡単に利用できる/学習コストが低い
○ Seleniumの知識はほぼ不要
○ IDEとの親和性が高い
○ 標準でAjaxなどの待ち処理対応
○ Enterprise Support (New!)○ Java
● Cons ○ 日本語情報が(まだ)少ない
○ 対話的に使うことができない
■ IDE上のデバッグで代用
■ Java9 JShell で可能かも
Pros/Cons : Geb
● Pros○ 簡潔な記述
○ 豊富な機能群
○ 豊富なエコシステム
○ 日本語情報はSelenideに比べると多め
○ 簡単に利用できる
● Cons ○ 学習コストが高め
■ Gebそのものもそうだが、GroovyやGradleも手を出す
と大変
○ IDEの補完が効きづらい
■ IntelliJ IDEAを利用したり、多少補完を効かせる方法
はある
いくつかの体験談
経験談:初めてのSelenium(Selenide)
● SeleniumでのE2Eテスト導入を担当
○ Selenium、Selenideとも未経験
○ SelenideはWebサイトを見ていただけ
Selenideのサンプル通りに書き何も躓かずに動いた。
そのまま1週間程度で簡単なシナリオ完成。
経験談:Jenkinsで不安定
● Jenkinsで不安定
○ 手元で通るのにJenkinsに載せると失敗する
○ デフォルトで待ち処理が入っているのに……○ 録画機能などを使わないと原因追及が困難
生のSeleniumよりはましかもしれないが、安定化はやはり大変
経験談:マルチブラウザテストの導入
● マルチブラウザのテストがしたい
○ でも最初に辛い思いはしたくない
■ 開発時にphantomjsを利用
○ Chrome -> Firefox、と展開
● クラウド上のブラウザでやりたい
○ Sauce labsを利用
GebConfigの書き換え(Driverの生成処理の変更)で実現でき、
対応が楽だった。
経験談:運用が始まってからテストが落ちる→記述の簡潔さに助かる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 }}
Selenide or Geb?
外的要因
● Groovyが使えるか
● 知名度/利用実績
○ Selenideは弱い
● 商用サポートの有無
○ Selenideは日本語ではないが、商用サポート
が始まった
内的要因:読むか書くか
● 記述量/記述性 どちらを優先させるか
○ Gebは記述量が少ない
○ Selenideは記述性(IDEによる補完)がよい
内的要因:学習コスト
● SelenideはIDEの力を借りやすく、初見でもある程
度書ける
● Gebは相対的に習得コストは高め。ただし機能は
豊富なので慣れると便利。
内的要因:テスティングフレームワーク
● テストティングフレームワーク
○ GebはGroovyなのでSpockが使える
○ SelenideはJUnit/TestNGなど
■ アサーションもある程度同梱
○ データ駆動などをするならSpockが優位
内的要因:さくっと動かす
● 対話環境
○ Gebはgroovysh○ SelenideはJShellがもしかしたら使えるかも……
■ IDE+Debugで似たようなことは今までもな
んとかできた
● Groovyはスクリプトとして動かすという手も
まとめに変えて
あなたは「その時」どちらを使う?
● コンテクストは様々
○ その時々で良し悪しは変わる
タイミングを味方にして良いSelenide or Gebライフを!
おしまい