SlideShare a Scribd company logo
WebのテストをPythonでやって
エビデンス取得作業から開放?
〜Selenium風味〜
#nds47 @civic
お前だれよ
• @civic
• NDS管理者
• Python, Java
今日話す内容
今日話す内容
• Pythonがメインではありません
• E2Eテストについて
• Seleniumについて
• デモ
突然ですが
NDSの発表者は講師ではない
発表者である私自身も使い始めようと調べて
いる段階ですので、今わかっている内容につ
いて報告するという体で
講師じゃなくても学習中の身で
発表できるのがNDS
講師じゃなくても
学習中の身で
発表できるのが
NDS
E2E (End to End) テスト
E2Eテスト
• End to Endテスト
• テスト対象となるシステムを使ってテスト
• Webシステムの場合・ブラウザを使って...
• UI
• Webのネットワーク接続
• サーバーサイドの処理
• データベース
E2Eテスト
• 単体テストで確認した項目を再び全部テストするわけ
ではない
• 詳細な点は単体テストで確認しているので、全体的
なシナリオにそって動作するかを確認する
• テストが大変で、時間もかかるためできるかぎり量
を減らしたい
→詳細な内容は単体テスト・結合テストで網羅する
エビデンス
• テストがちゃんと実施されたという証拠(エビデンス)
• 例
• 画面のスクリーンショット(ちゃんと正常に出力さ
れてます)
• データベースのダンプ(処理前・処理後)
• 操作してスクリーンショットをとってExcelに貼り付け
るだけの仕事...
エビデンス
「Xのテスト実施しました!」
「わかった。よくやった」
・・・
「不具合だ!Xが怪しい!テストしたのか!」
「しました!」
「ほんとか!」
「ホントです!」つエビデンス
「よし!通れ!」
不具合はあったが、Xについてテストは
きちんとおこなわれていた証明になった
Seleniumについて
Selenium
• E2Eテストを自動化するツール
• 結構古い歴史(2004〜)
• Selenium 2.0で大きく変わった
• WebDriver
• 昔:ページ内JavaScriptでブラウザを操作
Java他→JSコードに変換→ページに埋め込み
• 今:ブラウザの機能でブラウザを操作
各種言語でブラウザの拡張機能を操作
WebDriver
Selenium WebDriverでWebアプリのテストが変わる(前編)
http://www.atmarkit.co.jp/ait/articles/1210/05/news104.html
WebDriverによって
• WebDriverによって
• ブラウザを操作するのは各ブラウザごとに用意され
た拡張機能で行う(Chromeはブラウザ本体)
• WebDriverへの指示をクライアントライブラリから送
る(HTTP)
• クライアントライブラリとしては、HTTPを送るだけ
だから様々な言語で用意可能
• Selenium Serverを経由することで離れた場所でも操
作できる→SauceLabsなどのサービス
デモ
REPLでブラウザを操作
環境構築
• クライアントライブラリにPythonを使用
• Seleniumモジュールのインストール
$ pip install selenium
•ipython というREPL環境で試してみます
REPLで確認
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.google.com")
q = driver.find_element_by_name('q')
q.send_keys("長岡IT開発者勉強会")
q.submit()
driver.screenshot()
driver.quit()
デモ
pythonのunittestでテストコード記述
テストプログラム化
• Pythonのテストコードとして記述
• 標準テストライブラリunittestを使用する例
(特にSelenium用に特化しなくてよい)
class MyTest(unittest.TestCase):
def test_mytest(self):
driver = webdriver.Firefox()
driver.get("www.google.com")
....
テストメソッド-前半
テストメソッド-後半
要点をかいつまんで
• エレメントの取得 find_element〜
driver.find_element_by_name('q')
• キー入力
element.send_keys('cheese!')
• スクリーンショット取得
driver.get_screenshot_as_file("filename")
• 待機
ui.WebDriverWait(driver, 10).until(...)
テストコードの記述の仕方については、
ダラダラと書いてしまったが、メンテしやす
く読みやすいコードにすべき
→ ページオブジェクトパターン
http://www.seleniumhq.org/docs/06_test_design_considerations.jsp#page-object-design-pattern
SauceLabsを使った
クロスブラウザでのテスト
SauceLabs
• ブラウザの実行環境を提供してくれるサービス
• Selenium対応 Remote WebDriver
デモ
SauceLabsでリモートのブラウザでテスト
Remote WebDriver
• Remote WebDriverを使うだけでテストコードは同じ
まとめ
まとめ
• Seleniumを使えばブラウザの操作を自動化できる
• 各種言語(Pythonふくむ)でテストコードを書ける
• E2Eのテストの書き方は工夫が必要
• すべてを網羅するテストはユニットテストの方で
• テストをがんばりすぎない

More Related Content

PDF
Seleniumの薄っすい話 百八式 @ 第3回 日本Seleniumユーザーコミュニティ勉強会
Hiroshi Toda
 
PDF
Seleniumをもっと知るための本の話
Ryuji Tamagawa
 
PDF
ApiとE2Eテスト #entapihack
nihon buson
 
PPTX
Selenium WebDriver + python で E2Eテスト自動化
JustSystems Corporation
 
PDF
end to end testing(jscafe15)
Ryuma Tsukano
 
PDF
Selenium with pixiv
Kohki Yamagiwa
 
PPT
PHP agile test tips
Tsutomu Chikuba
 
PPT
ビジネス的に高価値なアジャイルテスト
Tsutomu Chikuba
 
Seleniumの薄っすい話 百八式 @ 第3回 日本Seleniumユーザーコミュニティ勉強会
Hiroshi Toda
 
Seleniumをもっと知るための本の話
Ryuji Tamagawa
 
ApiとE2Eテスト #entapihack
nihon buson
 
Selenium WebDriver + python で E2Eテスト自動化
JustSystems Corporation
 
end to end testing(jscafe15)
Ryuma Tsukano
 
Selenium with pixiv
Kohki Yamagiwa
 
PHP agile test tips
Tsutomu Chikuba
 
ビジネス的に高価値なアジャイルテスト
Tsutomu Chikuba
 

Similar to #nds47 WebのテストをPythonでやってエビデンス取得作業から開放? (15)

PDF
「Selenium実践入門」で学ぶテスト自動化の世界
Nozomi Ito
 
PPTX
Selenium IDE for primer
yasukoS
 
PDF
2015年に「画面テストの動画録画」を作って「流行れ!」 と願ったが、流行らんかった上ロストした話 #seleniumjp
Kazuhito Miura
 
PPTX
Selenium WebDriver,Cypress,TestCafeの違いを調べてみました
MaiKaneko4
 
PDF
JenkinsとSeleniumの活用事例
Takeshi Kondo
 
PDF
【Pycon2012】unittest嫌いがunitestをtesting
ido_ojos_jp
 
KEY
capybara で快適なテスト生活を
Ryunosuke SATO
 
PDF
海外のSeleniumカンファレンスではどんな発表がされているのか2014
Nozomi Ito
 
PDF
PHP Application E2E with Capybara
Yoshiaki Yoshida
 
PPTX
エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT
Taichi Watanabe
 
PDF
PHP Codeception テスト -- 日本語
Florent Batard
 
PPTX
Selenium
takeuchi-tk
 
PPTX
Selenium2でつくるテストケースの構成について
yufu yufu
 
PDF
E2E Test Tools
KeepAlive1
 
PDF
ブラウザのUIテストをしてみた話
Mitsushige Ishiguro
 
「Selenium実践入門」で学ぶテスト自動化の世界
Nozomi Ito
 
Selenium IDE for primer
yasukoS
 
2015年に「画面テストの動画録画」を作って「流行れ!」 と願ったが、流行らんかった上ロストした話 #seleniumjp
Kazuhito Miura
 
Selenium WebDriver,Cypress,TestCafeの違いを調べてみました
MaiKaneko4
 
JenkinsとSeleniumの活用事例
Takeshi Kondo
 
【Pycon2012】unittest嫌いがunitestをtesting
ido_ojos_jp
 
capybara で快適なテスト生活を
Ryunosuke SATO
 
海外のSeleniumカンファレンスではどんな発表がされているのか2014
Nozomi Ito
 
PHP Application E2E with Capybara
Yoshiaki Yoshida
 
エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT
Taichi Watanabe
 
PHP Codeception テスト -- 日本語
Florent Batard
 
Selenium
takeuchi-tk
 
Selenium2でつくるテストケースの構成について
yufu yufu
 
E2E Test Tools
KeepAlive1
 
ブラウザのUIテストをしてみた話
Mitsushige Ishiguro
 
Ad

More from civicpg (9)

PDF
オンライン英会話のモチベーション維持!
civicpg
 
PPTX
#nds54 ルーチンワーク自動化の話
civicpg
 
PPTX
#nds53 IoTプラットフォーム・工作でスーヴィード(低温調理)
civicpg
 
PPTX
第52回なんてかんたんなJavaEE
civicpg
 
PPTX
第51回NDS PostgreSQLのデータ型 #nds51
civicpg
 
PPTX
第49回emailを安全んにつかうための心がけ
civicpg
 
PPTX
jupyterの紹介 #nds48
civicpg
 
PPTX
私の好きなPython構文 vol.2 #nds46
civicpg
 
PDF
Amazon SESのメール受信対応でサーバー減らせた話 #nds44
civicpg
 
オンライン英会話のモチベーション維持!
civicpg
 
#nds54 ルーチンワーク自動化の話
civicpg
 
#nds53 IoTプラットフォーム・工作でスーヴィード(低温調理)
civicpg
 
第52回なんてかんたんなJavaEE
civicpg
 
第51回NDS PostgreSQLのデータ型 #nds51
civicpg
 
第49回emailを安全んにつかうための心がけ
civicpg
 
jupyterの紹介 #nds48
civicpg
 
私の好きなPython構文 vol.2 #nds46
civicpg
 
Amazon SESのメール受信対応でサーバー減らせた話 #nds44
civicpg
 
Ad

#nds47 WebのテストをPythonでやってエビデンス取得作業から開放?