SlideShare uma empresa Scribd logo
1 de 33
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のテストの書き方は工夫が必要
• すべてを網羅するテストはユニットテストの方で
• テストをがんばりすぎない

Mais conteúdo relacionado

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

SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分松田 千尋
 
Nishimoto osh2014: Test driven development and accessibility
Nishimoto osh2014: Test driven development and accessibilityNishimoto osh2014: Test driven development and accessibility
Nishimoto osh2014: Test driven development and accessibilityTakuya Nishimoto
 
worker_threadsを使った実装の勘所
worker_threadsを使った実装の勘所worker_threadsを使った実装の勘所
worker_threadsを使った実装の勘所yo_waka
 
Selenium IDE for primer
Selenium IDE for primerSelenium IDE for primer
Selenium IDE for primeryasukoS
 
Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Toshiyuki Hirata
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~Tomomi Kajita
 
自動テストのすすめ
自動テストのすすめ自動テストのすすめ
自動テストのすすめKatsunori Kanda
 
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11Katsuhiro Morishita
 
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田Y Watanabe
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていくRyo Mitoma
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前にYasui Tsutomu
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門Preferred Networks
 
第2回nseg slideshare
第2回nseg slideshare第2回nseg slideshare
第2回nseg slideshareko ty
 
Jenkins + awsで並列テスト
Jenkins + awsで並列テストJenkins + awsで並列テスト
Jenkins + awsで並列テストYamamoto Kazuhisa
 
Should bee
Should beeShould bee
Should beeReo Mori
 
nseg第5回勉強会
nseg第5回勉強会nseg第5回勉強会
nseg第5回勉強会ko ty
 
Introduction to Continuous Testing
Introduction to Continuous TestingIntroduction to Continuous Testing
Introduction to Continuous TestingAtsuhiro Kubo
 
大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験についてRakuten Group, Inc.
 

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

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

Mais de civicpg

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

Mais de civicpg (9)

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

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