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ユーザーコミュニティ勉強会
PDF
Seleniumをもっと知るための本の話
PDF
ApiとE2Eテスト #entapihack
PPTX
Selenium WebDriver + python で E2Eテスト自動化
PDF
ひよこテスト駆動開発(PHPカンファレンス2014)
PDF
レガシーコード改善はじめました 横浜道場
PDF
JenkinsとSeleniumの活用事例
PDF
20120927 findjob4 dev_ops
Seleniumの薄っすい話 百八式 @ 第3回 日本Seleniumユーザーコミュニティ勉強会
Seleniumをもっと知るための本の話
ApiとE2Eテスト #entapihack
Selenium WebDriver + python で E2Eテスト自動化
ひよこテスト駆動開発(PHPカンファレンス2014)
レガシーコード改善はじめました 横浜道場
JenkinsとSeleniumの活用事例
20120927 findjob4 dev_ops

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

PDF
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
PDF
Nishimoto osh2014: Test driven development and accessibility
PPT
Sue445 Style TDD #atest_hack
PPTX
worker_threadsを使った実装の勘所
PPTX
Selenium IDE for primer
PPTX
Androidアプリ開発のテスト環境
PDF
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
KEY
自動テストのすすめ
PDF
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
PDF
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
PDF
作る人から作りながら運用する人になっていく
PPTX
TDDはじめる前に
PDF
ソフトウェアテスト入門
PDF
第2回nseg slideshare
PDF
Node js 入門
KEY
Jenkins + awsで並列テスト
PDF
Should bee
PDF
nseg第5回勉強会
PDF
Introduction to Continuous Testing
PDF
大規模ソフトウェア開発とテストの経験について
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
Nishimoto osh2014: Test driven development and accessibility
Sue445 Style TDD #atest_hack
worker_threadsを使った実装の勘所
Selenium IDE for primer
Androidアプリ開発のテスト環境
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
自動テストのすすめ
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
作る人から作りながら運用する人になっていく
TDDはじめる前に
ソフトウェアテスト入門
第2回nseg slideshare
Node js 入門
Jenkins + awsで並列テスト
Should bee
nseg第5回勉強会
Introduction to Continuous Testing
大規模ソフトウェア開発とテストの経験について
Ad

More from civicpg (9)

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

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