Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20170809 start python_selenium

1,593 views

Published on

みんなのPython勉強会 #27「SeleniumでWebと戯れる」の発表資料です。

Published in: Engineering
  • Be the first to comment

20170809 start python_selenium

  1. 1. SeleniumでWebと戯れよう みんなのPython勉強会 #27 株式会社SHIFT 玉川紘子 @nkns165
  2. 2. 自己紹介  玉川紘子(@nkns165)  ソフトウェアテストエンジニア  主に自動化・CIを担当しています  コミュニティ活動もしています テスト自動化研究会
  3. 3. 自己紹介  自動テスト関連の技術書の翻訳お手伝いとかもしています 付録執筆 監訳 付録執筆
  4. 4. Seleniumとは?  http://www.seleniumhq.org/  Webブラウザの操作を自動化できるOSS  対応ブラウザ  IE, Firefox, Chrome, Safari, Opera, Edge  利用できるプログラミング言語  Java, C#, JavaScript, PHP, Python, Rubyなど多数
  5. 5. Seleniumでできること・できないこと  できること  URL遷移  入力操作(テキスト入力、ラジオボタン/チェックボックス/プルダウンの選 択、ボタンのクリック等)  各種マウス操作 ※やや苦手(不安定になりがち)  画面の内容確認(タイトル、画面内の文字列、要素の表示/非表示、要素 の活性/非活性、CSSの値)  JavaScriptの実行  できないこと  ブラウザ外の操作(ファイル選択ダイアログの操作等)  HTMLタグ以外の要素の解析
  6. 6. Seleniumの歴史  Selenium 1 or Selenium RC(2004〜)  JavaScriptベースの実装  クロスブラウザのテストを実際に運用するにはやや厳しい  Selenium 2 or Selenium WebDriver(2011〜)  Googleで開発されていたWebDriverと融合し、APIを一新  各ブラウザ専用のドライバを使い、APIのみ共通化することでクロスブラ ウザのテストを現実的なものに  この時点ではSelenium RCのAPIも残存  Selenium 3(2016〜)  Selenium RCのAPIを切り捨て、スリム化  特に大きな機能追加はなし
  7. 7. 簡単なSeleniumのコード # 必要なライブラリのインポート from selenium import webdriver from selenium.webdriver.common.keys import import unittest # Chromeを起動し、Googleを開く browser = webdriver.Chrome() browser.get(‘https://google.co.jp’) # 検索キーワードを入力 query_input = browser.find_element_by_id(‘lst-ib’) query_input.send_keys(‘みんなのPython勉強会’) query_input.send_keys(Keys.ENTER) # 結果を出力 links = browser.find_elements_by_css_selector(‘div.rc>h3.r>a’) for link in links: print(link.text) print(link.get_attribute('href')) assert len(links) == 7
  8. 8. 8 Seleniumを使ったスクレイピング  pyqueryやBeautiful Soupを使ったスクレイピングとの違い  メリット  実際のユーザ操作と同じように画面を開いて、ログインして、…という処 理ができるので、Cookie等の仕組みを解析しなくても自由に画面遷移が できる  Ajax通信で後から表示される要素も取得することができる  デメリット  遅い(画面遷移だけでなく、タグの取得自体も遅い)  静的なページやログイン不要なサイトであれば、通常のHTTPリクエストで HTMLを取得するタイプのライブラリが圧倒的に有利  Seleniumと上記のようなライブラリを併用する場合もある(画面を開いてから、 HTMLソースの文字列を取得して解析にかける)
  9. 9. 9 Jupyter Notebookを使ってTry & Error  Jupyter Notebookとは  Pythonのコードを含んだWebページを生成できる機能  ドキュメント生成としても優れているが、Webページ上でかんたんにステッ プ実行ができるので、Try & Errorを繰り返しながらコーディングを進めて いくのにも最適  インストールも簡単(下記はMacの場合) # Jupyter本体のインストール $ pip install jupyter # Seleniumと、その中でChromeを使うための設定 $ brew install chromedriver $ pip install selenium # 起動 $ jupyter notebook
  10. 10. 10 実際に作ってみたNotebook
  11. 11. 11 デモ
  12. 12. 12 Notebookの内容をバッチ実行してみる  作成・保存したNotebookはipynb形式で保存される  runipyコマンドで実行可能 # runipyのインストール $ pip install runipy # バッチ実行 $ ruipy start_python.ipynb out.ipynb # 結果をどこでも見られるようにHTMLに変換 $ jupyter nbconvert out.ipynb --to html
  13. 13. 13 Seleniumで自動テスト  こちらの用途のほうがメジャー(たぶん)  Selenium自体にはテストの機能はないため、別途テスティング フレームワークと組み合わせる必要がある  unittest  Doctest  Nose など  テスティングフレームワークとは  コードの結果に対してOK/NGの判定、結果の集計、レポーティング等を 行ってくれるフレームワーク。ただブラウザを操作するだけではテストに ならないので、テスティングフレームワークの利用は必須 # unittestを使う場合 import unittest … assert len(links) == 7
  14. 14. 14 ふたたびデモ
  15. 15. 15 自動テストのメリット  人では絶対にこなせない量・高頻度のテストを工数をかけずに 実現  サービスの機能追加に伴い回帰テストを自動化することで、開 発のリードタイムを落とさず品質をキープ 機能数の増加 顧客数の増加 自動化 新規機能 既存機能 テスト ケース数 開発のイテレーション ベースとなるパッケージ 顧客A の設定 顧客B の設定 顧客C の設定 … 顧客A用の 改修を実施 顧客A用の 設定をテスト 自動化 新機能 開発 OK OK
  16. 16. 16 自動テストをもっと活用するために  「自動テストを手動で実行する」ほど悲しいことはない  CI(継続的インテグレーション)環境を作って、自動テストが自 動で回るようにする  定期的 or コードに変更があるたびにテストを実行  結果を通知(メール, Slack,…)  履歴が綺麗に残り、みんなで共有できる Jenkins Travis CI Circle CI
  17. 17. 17 Seleniumで苦労する点  実行時間が長い  いくら工数がかからないとは言え、あまりにも長いテストは生産性を下げる  テストが不安定になる  特にJavaScriptによる動的なアクションの多い画面では、うまく作らないとタイ ミング依存のエラーが頻発する  注意しないとすぐに保守コストが爆発  UI変更、文言変更で即崩壊するテストは役に立たない  うまく共通化して保守コストを下げよう  人によっては、「何でもSeleniumでテストしたい」症候群を発病  メール受信のテストは普通にメール受信するプログラムを書きましょう…
  18. 18. 18 バランスに気をつけることが大事  理想は「テストのピラミッド」  最初は逆ピラミッド(アイスクリームコーン)になってしまうことも ある  ないよりはマシ。少しずつ形を変えていけばOK 単体テスト・ コンポーネントテスト 受入テスト (APIレイヤー) GUIテスト 手動テスト どうしても欠かせない 重要ケースはEndToEndで。 ただし、不安定なので 数は絞る 高速実行可能・ 安定している 単体テストを重視
  19. 19. 19 最後に宣伝  あの「アジャイルサムライ」の著者、Jonathan Rasmussonの自動化 本「The Way of the Web Tester」の日本語訳を担当しました  9月ごろ発売予定  「テストのピラミッド」の話もたくさん出てきます ※表紙は全然違う ものになると思います
  20. 20. 20 ご清聴ありがとうございました!

×