万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    第2回 日本Seleniumユーザーコミュニティ勉強会

    seleniumjp

    http://seleniumjp.connpass.com/event/9222/

    実践 Selenium WebDriver

    実践 Selenium WebDriver

    日本の書籍が初めて。

    ◯コミュニティー 1回め勉強会 193人 ↓ 2回め勉強会 340人

    【玉川竜司さん】Seleniumをもっと知るための本の話

    RubyPythonは少ない。 本の売上が良いので関心が集まっている。 セキュリティ会社勤務。普段は大阪。

    楽天のカンファレンス10/25

    Google BigQuery Analyticsが来年に出る。

    「実践Selenium WebDriver」ができるまで

    自社の回帰テスト(レグレッションテスト)に使用開始 2005年あたりにソフトウェアデザインの本に出てきた。

    Selenium 1系とSelenium 2系の情報が混在してる?

    ・原著 http://www.amazon.co.jp/gp/product/1782168850?ie=UTF8&camp=1207&creative=8411&creativeASIN=1782168850&linkCode=shr&tag=noctushinrsdi-22

    W玉川本

    英語の技術書を読む話

    翻訳本だけでは不可能。 Amazon.comのsoftware testのカテゴリでseleniumを検索すると20件以上、日本語は1件のみ。

    総合的な本を翻訳で読み、後は英語に当たる。 「翻訳書があると英語で読む動機が下がるのでは。」 おおよその概念がわかればあとは、英語で読めばいい。 「映画のDVDで勉強」は勘違い 英語の技術書を読むのは、英語へのチャレンジとしてはもっとも楽なチャレンジです

    英語を読む上で、お薦め2つの道具”Kindle"と”Safari(ブラウザのではない)"

    Fire HDX 8.9最高です http://www.amazon.co.jp/gp/product/B00KQNTJ1W?ie=UTF8&camp=1207&creative=8411&creativeASIN=B00KQNTJ1W&linkCode=shr&tag=noctushinrsdi-22

    AndroidKindleもいい 画面の大きさは大事 ※7インチは小さい

    単語長押しで辞書引けるのが非常に便利

    年間4万円くらいでO'Reillyの電子書籍購読サービス #seleniumjp オフラインボックスも有る。 出版社を色々カバー。

    Seleniumの本の紹介

    イギリスの出版社 PACKT publishing Safariで読める。

    Selenium Design Patterns and Best Practices Seleniumそのものよりも、テストの書き方に重点。 http://www.amazon.co.jp/gp/product/1783982705?ie=UTF8&camp=1207&creative=8411&creativeASIN=1783982705&linkCode=shr&tag=noctushinrsdi-22

    Selenium Webdriver in Python http://www.amazon.co.jp/gp/product/B00IZZ0GSS?ie=UTF8&camp=1207&creative=8411&creativeASIN=B00IZZ0GSS&linkCode=shr&tag=noctushinrsdi-22

    Kindleで読める。 女性の方。

    砂漠のものだったが、人気がなかったのか表紙が女性のものでRuby版。

    Selenium Webdriver in Ruby http://www.amazon.co.jp/Selenium-Webdriver-Ruby-Sagar-Salunke-ebook/dp/B00MJ1GP6Q/ref=sr_1_3?s=digital-text&ie=UTF8&qid=1413609275&sr=1-3

    C#版もやる。

    Selenium IDE Automation Testing Tutorial http://www.amazon.co.jp/Selenium-IDE-Automation-Testing-Tutorial-ebook/dp/B00J7ZT0LE/ref=sr_1_8?s=digital-text&ie=UTF8&qid=1413609444&sr=1-8&keywords=selenium Selenium: Questions and Answers StackOverflowのSeleniumのQ&Aをそのまま書籍化

    Q「電子版出ますか?」A「要望は理解してますが、予定はないです」

    1000〜2000位に入った。一瞬3桁になったことも有る。かなりいい。

    SliverLightで翻訳したいとオライリーへ電話したのがきっかけ。 Microsoftの記事を個人で翻訳してWebで載せてた時に翻訳を認めてられた。 金額的にも余りおすすめしない、何を求めてやるかが十余。 1日4〜5ページの翻訳。

    1日2日で英語の本をザーッと読むのはいい。流れがつかめる。

    【玉川紘子さん】脱・独自改造!GebでWebDriverをもっとシンプルに

    株式会社SHIFT 第三者検証。 技術開発部。

    ※竜司さんとは親戚ではありません

    ちょっとしたことを書くにも長い(Javaでは) テキスト入力に3行 プルダウンの選択3行

    OSSで提供されているライブラリ ・FluentLenium(Java)ふるーえんとれにうむ フランスの女性開発 ・Geb(Groovy)

    ・FluentLeniumについて http://grimrose.bitbucket.org/blog/html/2013/12/03/java_advent_calendar_2013.html

    Geb・・・ジェブ http://www.gebish.org/ Webドライバのラッパー、上書きするものではない

    テスト業界で有名な、テスト自動化研究会@kyon_mmさんから

    ブラウザ操作|WebDriver|Geb| テスティングフレームワーク|JUnitTestNG|Sock 言語|Java|Groovy

    メリット①:記述量の少なさ

    import geb.Browser
    
    Browser.drive {
        go "http://myapp.com/login"
        asset $(“h1”.text() == "Please Login")
        $(“form.login”).with {
            username = “admin”
            password = “password”
            login().click()
        }
        assert $("h1”).text() == "Admin Section"
    }

    jQueryらいくなセレクタ css selectorも浸かる。 ネームが「login()」となっているボタン。

    メリット②:「あるある」が解決済み

    ・テキスト入力のシンプル化

    1行で出来る。

    $(“#hoge”).value(“fuga")

    ※プルダウンとかも同様

    インスタンスの生成処理の外出し

    GebConfig.groovyに集約

    ・要素を見つけるときの待ち時間の変更

    // WebDriverインスタンスの生成 driver = { new FirefoxDriver() }

    // 要素を見つけるときの待ち時間 waiting { timeout = 10 retryInterval = 0.5 }

    ・テスト環境URL

    // テスト環境のURL baseUrl = ‘http://localhost:8000/example'

    メリット③もちろんPageObjectもサポート

    PageObjectパターン!

    atは今いるかどうかをチェックする。

    GroovyやSpockの機能が使える。

    ・4つのテストケースが有ると言われる。

    ・setup 前提条件 ・when 操作 ・then 検証 ・cleanup 後片付け

    メンテナンスしやすいコードはこれがしやすい。

    メリット④ Groovy/Spockの嬉しい機能が使える

    データ駆動テストがシンプルに書ける Cucumberみたいに表形式でかける。

    モジュールが使える。Groovyの機能。

    Javaの資産がそのまま扱える。 importが使える。

    ・Syntaxの省略に注意

    IDE上の補完に頼りたければ、多少長くなっても型を明記

    Implicit Assertionの使い方に注意

    // 省略できないケース if (/* 条件 /) { assert #〜〜〜 }

    if文はテストケースでは入れるべきではない?

    getter/setterを作らなくても動かせるので、ついつい生の処理を書いてしまいがち。

    失敗時のスクリーンショットの取得 Jenkinsを夜間で回した時にわからなくなる。 RunListenerがSpockにある。

    Jenkinsだけで失敗する場合など、一部だけテストするようにTestSuiteをつくると便利。

    Jenkinsのパラメタで%TEST_CLASS%を置換。

    Gebを使うと独自改造を減らすことが出来る。

    static content={xxx} みたいな書き方は、 「staticメンバにたいするテンプレートメソッドパターン」 と思えばいいんでしょうか?

    Gebの本たちのページ、これですか http://www.gebish.org/manual/current/

    jQueryライクについて GebではXPathはサポートしていない。jQueryでできることと同等のことは結構できる

    $(“p”, text:”hoge”) テキストの内容を指定。 containみたいなのはできると思う。

    https://www.jetbrains.com/idea/download/

    【伊藤望さん】海外のSeleniumカンファレンスではどんな発表がされているのか2014

    海外に目を見けてみたらいい感じでは。

    伊藤 株式会社TRIDENT

    www.trident-qa.com テスト自動化研究会

    サイモンスチュアート

    http://seleniumconf.org/

    Sales-force、テストにSelenium

    Grouponのエンジニアの発表 Selenium Design Patterns and Best Practicesの著者

    Selenium-Grid-Extras https://github.com/groupon/Selenium-Grid-Extras

    Mozillaのエンジニア FireFoxの次世代版を作っている W3Gの標準化のテストをする。

    Joomla!コントリビュータ

    Cucumber.js https://github.com/cucumber/cucumber-js

    WebDriverJS https://code.google.com/p/selenium/wiki/WebDriverJs

    ・Jim Evans氏 WebDriverの機能がIEに取り込まれている!

    ・Geb

    ・BrowserStackのエンジニア

    シミュレータではなく実機でテストスべきなのか

    シミュレータジャックはどう酷いか。

    ・セキュリティ

    Linkedinのエンジニア IronWASP OSS、Webサイトに脆弱性がないかどうか。

    ・Page Objectを超えるデザインパターン WebFormパターン ItemListパターン IframeWrapパターン

    ・ビジネスレイヤーオブジェクトに更にレイヤーを重ねる?

    Selenium RCからWebDriverに移行

    ・QTP/UFT(HP社)からSeleniumへの移行  80%の実行時間削減

    ・Yandex(ロシアの検索・ポータルサイト大手)

    ・Allureフレームワーク  見やすいHTMLレポート  https://www.youtube.com/watch?v=xrlS-7mLm0E  https://github.com/allure-framework/allure-core

     Allure Test Report(DEMOリポート)  http://allure.qatools.ru/

     エラー原因だけリストアップ。  「どのプログラミング言語でも使える!」と強調

    Clojure  Lisp方言

    ・「OSSを使い早く失敗するために、エンタープライズの手法の上に築かれたドラゴンをどう調教したか」  Dragon≒やっかいごと? https://www.youtube.com/watch?v=Pcroql20wFI

    ・思ったこと  Selenium IDEの発表が全然ない

    【宮田淳平さん】ハイパフォーマンスSeleniumテスト@サイボウズ(仮)

    kintoneというB2Bサービス https://kintone.cybozu.com/jp/

    17人で開発。 サーバ:Java、23万行 クライアント:JS、33万行

    実行時間は長くなりがち。 ブラウザを通すので、長い。

    ・Jenkins + Pipeline Plugin Gitのメインブランチにマージされるたびにすべてのテストが実行される 継続的デリバリー

    Selenium WebDriver + Selenium Grid 36並列

    全部流すのに30分ほどかかる ・体感的には20分切るとストレス

    ・実行時間が長くなると

    テスト自動化のメリットは素早くいつでも素早く繰り返し実行できる事

    1日かかると1日に1回しか出来ない もし失敗すると修正後の確認にまた1日

    ・実行期間短縮の基本戦略

    余計なテストを作らない メインシナリオのテストぐらいが無難 単体テストAPIテストなどでカバーする 並列化 Selenium Grid

    並列化はリソースとの戦い 1マシンで起動できるブラウザは1つまで 複数起動もできるけど、フォーカスの関係でテストが不安定になるのでおすすめしない 複数のバージョンのIEに対応すると更に大変

    ◯並行実行環境の構築 ・クラウドサービス  Sauce Labs、TestingBot、BrowserStack ・VMテンプレートを作って量産 ・docker  高速デプロイ&軽量  ただし環境は限られる  Windows Severはdocker対応するらしいので期待  MSの記事  http://www.publickey1.jp/blog/14/dockerwindows_serverdockermicrosoft_azuredocker_hub.html

    テストの実行順序 ・長い順に実行できれば理想値に近づく

    並列実行してもテスト実行時間に注意。 テストケースを調整してテスト実行時間を均一化する必要がある。 テストのクリティカルパス(遅いテストの実行順)考えないと、 並列実行した分のパフォーマンスでない。

    だけどこれやろうとすると色々手入れないとね

    並列化日から入れるほうが効果が大きい 初期データの作成、ブラウザの起動、認証処理など

    DBのdump ・速い ・スキーマ更新時が大変

    API ・そこそこ速い(ネットワークを通す) ・副作用としてAPIテストに使いまわせる ・APIが整っているなら一番おすすめ

    安定性の話 ・バグじゃないのにテストが落ちることが有る ・バグの可能性もあるので原因調査に時間を取られる ・辺に慣れてしまうとテストが落ちても誰もきにしなくなってしまう

    安定性を高める手法。

    リトライ:安定性に問題があるものは後で分かるようにして分析する・ 明示的なWait:findElementなどは不安定に失敗することがあるので対処が必要。

    明示的なWait

    メンテナンス性

    メンテナンス性が低いと? メンテナンスに時間が取られる

    手動の方がいいんじゃない?

    メンテナンス性の高める。PageObjectパターン必須。 スクリーンショット・録画があると原因調査が楽になる。 テストコードの品質、大事

     UI変更があり得るなら必須

    ・失敗時のスクリーンショット、録画  原因調査が楽になる

    ・テストコードの品質は製品と同じくらい大事  命名規則作ったりレビューしたり  DRY原則とかKISS原則とかYAGNIとか

    まとめ

    Seleniumテストの運用はパフォーマンスとの戦い 自動化するテストは重要なものに絞る 実行時間短縮は並列化してその効果〜

    失敗から始めるSelenium

    http://developer.cybozu.co.jp/tech/?p=5499

    継続的デリバリー

    パイプライン

    実践アジャイルテスト テスターとアジャイルチームのための実践ガイド

    「テストコードのヒンシツは製品と同じくらい大事」とても同意。テストコードもちゃんとレビューしないとほんとダメ。

    きちんとテストしてから実行

    チームで勉強した本

    実践アジャイルテスト テスターとアジャイルチームのための実践ガイド (IT Architects’Archive ソフトウェア開発の実践)

    実践アジャイルテスト テスターとアジャイルチームのための実践ガイド (IT Architects’Archive ソフトウェア開発の実践)

    ・ビデオ録画もしているどうやって?

    Pythonの画面録画するライブラリ

    成功したら削除 Vnc2swf ?

    IE以外は安定。 Windosも安定しない? sockerをLinuxにして動かすのがいいと思う。

    http://pdiff.sourceforge.net/

    【松尾和昭さん(@Kazu_cocoa)】クックパッドアプリの開発を支援するAppiumの話

    @Kazu_cocoa

    JaSST’14 Hokkaido

    モバイルアプリ開発体制の

    Appium・・・モバイルアプリを自動化テスト

    Turnip・・Cucumberの正規表現の部分を取り払ったようなもの http://magazine.rubyist.net/?0042-FromCucumberToTurnip

    Selenium Remote Control (RC)

    サーバサイドのWeb API

    Turnip・・Cucumberの正規表現の部分を取り払ったようなもの

    Appiumのよいところ  リリースビルドがテストできること。  言語が選べる。  アプリ操作をシミュレートできること。

     インターフェースなので柔軟性ある。 Appiumのよくないこと  実例がない。  実行に時間がかかる。  環境構築が手間(SauceLabsはいいとこついてる)。

    「これ以上は頑張っていない」のは業務(じゃないけど)ロジックなどはUnitTestでだいたい済ませているから。

    Appiumでやっていること。 夜間に最新ソースコードをビルドしてテストしている。 画面遷移、レイアウト崩れをチェック。 100ケース×2〜3capabilityを実行しており、現時点では並列化はしていない。

    UIテスト自動化しようとすると sleep 入れることになる。は仕方ない気がしてきた。

    iOS/Androidはアニメーションが入るので無視してテストを作成すると落ちる! (ラッパーでウェイトを入れる、など対処が必要)

    iOS 8対応が大変