Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
E2E Test Tips
Search
はない
August 28, 2016
Technology
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
E2E Test Tips
Symfony Meetup #14資料
はない
August 28, 2016
More Decks by はない
See All by はない
2018年目標を達成できなかった私が 今年こそ達成するためにしていること
hanahiroaze
3
540
組み合わせテストを簡単にするgemを作った話
hanahiroaze
0
270
MySQLとデッドロックの話
hanahiroaze
1
1.4k
ここが変だよ。このテスト〜テストケース爆発と戦う〜
hanahiroaze
1
1.6k
Symfony Best Practiceを読もう!(ついでに翻訳した話)
hanahiroaze
2
950
テストことはじめ
hanahiroaze
0
510
Symfony2のi18n対応
hanahiroaze
0
840
開発合宿に行ってきました
hanahiroaze
0
160
GitHubよちよち会#3
hanahiroaze
0
180
Other Decks in Technology
See All in Technology
StepFunctionsとGraphRAGを活用した暗黙知活用のためのRAG基盤
yakumo
0
180
AIで楽になるはずが、なぜ疲れる?
kinopeee
0
130
なぜMIXIはゼロトラスト基盤として クラウドフレアを選んだのか - Cloudflare Peer Point SASE User Voices
mixi_engineers
PRO
2
120
VPCセキュリティ対応の最新事情
nagisa53
1
340
実践が先生だった— 新卒サーバーエンジニア1年目のリアル
mixi_engineers
PRO
0
180
DevOps Agentで運用判断をチーム資産にする~Agent InstructionsとAgent Skillを継続的に育てる~
fujioka6789
0
150
AI Native なプロダクト組織の立ち上げ方 : 生産性 100 倍への挑戦
mikesorae
0
1.7k
GMOフィナンシャルゲートが挑む、「止まらない」決済インフラ構築の裏側【SORACOM Discovery 2026】
soracom
PRO
0
100
キャリアLT会#3
beli68
2
280
データエンジニアこそ組織のオントロジーに向き合うべき — 問いに答えるAIから、事業を動かすAIへ
gappy50
4
1.1k
CTOキーノート:AI時代の「つなぐ」を再定義 ― 真のIoTとリアルワールドAI【SORACOM Discovery 2026】
soracom
PRO
0
300
ソフトウェアアーキテクチャ研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
2
860
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
780
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
470
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
430
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
570
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
640
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
360
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
Transcript
&&ςετ5JQT !IBOBIJSP@B[F
ͳ·͑ɿՖҪɹߦ UXJUUFSɿ!IBOBIJSP@B[F ॴଐɿIJUPNFEJB 4ZNGPOZྺɿ̍ 99
継続的デリバリー p129 技術視点 ビジネス視点 支 援 評 価 機能の受け入れ テスト ユニットテスト
インテグレーションテスト システムテスト ショーケース(デモなど) ユーザビリティテスト 探索的テスト 非機能の受け入れテスト (キャパシティ/セキュリティなど) リグレッション テスト 前回の復習
「同じ機能に対して手動テストを2回以上 行っていることに気づいたら、 その機能がこの先変更されるかどうか 確かめてみる。」 変更がなさそうなら自動化する。 よく変更されるなら自動化から外す。 継続的デリバリー p139-140 前回の復習
None
http://codeception.com/ https://www.browserstack.com/
"require": { "phpunit/phpunit": "^4.7", "facebook/webdriver": "^1.0" }, http://qiita.com/imunew/items/8806cd68a401c6975d44
・PHPUnit ・codecept ・Phantomjs
$url = 'http://'. self::BROWSERSTACK_USER. ':'. self::BROWSERSTACK_KEY. '@hub.browserstack.com/wd/hub'; return RemoteWebDriver::create($url, [
'browser' => "Chrome", 'browser_version' => "49.0", 'os' => "Windows", 'os_version' => "7", 'browserstack.debug' => "true", 'acceptSslCerts' => "true” ]); https://www.browserstack.com/automate/php
modules: enabled: - WebDriver: url: ‘https://hogehoge.com' browser: chrome - \Helper\Acceptance
Tips1 操作対象の項目にidを振って幸せになる
$I->fillField('//*[@id="main"]/div/div[2]/div/div[2]/div/input'); $textBox = $this->webDriver- >findElement(WebDriverBy::cssSelector('tbody input:nth- child(1)')); $textBox->sendKeys(’hogehoge'); idがないと、「cssセレクタをブラウザのコンソールで確認->貼付」の 繰り返しになり、時間がかかってテストコードを書くのが辛くなってく
る。 codeceptionのXPath指定はかなり便利。
Tips2 テストで確認する範囲を絞る
・複数の画面にまたがるテスト ・成功/失敗をいっぺんに確認するテスト は コード量・実行時間が増えて大変です。
Tips3 取得したスクリーショットを連結して 1枚にする
// about taking screenshots protected function concatFile($domain) { // saveScreenshot時に保存したファイルパスを取得
if(!empty($this->concatFiles)){ $now = new DateTime(); // 連結するベースになる画像の生成 $baseImg = imagecreatetruecolor(AbstractWebDriverTestCase::screenshotWidth, AbstractWebDriverTestCase::screenshotHeight*count($this- >concatFiles)); // ベースイメージにスクリーンショットを貼り付け for($i=0;$i<count($this->concatFiles);$i++){ $screenShot = imagecreatefrompng($this->concatFiles[$i]); imageCopy($baseImg, $screenShot, 0, AbstractWebDriverTestCase::screenshotHeight*$i, 0, 0, AbstractWebDriverTestCase::screenshotWidth, AbstractWebDriverTestCase::screenshotHeight); } // 連結した画像の保存 imagepng($baseImg, AbstractWebDriverTestCase::fileSavePath.$now->format('Ymd').'/'.$domain.'.png'); imagedestroy($baseImg); } // 個別のスクリーンショットは削除 for($i=0;$i<count($this->concatFiles);$i++){ if(file_exists($this->concatFiles[$i])){ unlink($this->concatFiles[$i]); } } // ループする時に前回実行時の情報が残ってしまうので、削除済みの情報を削除 $this->concatFiles = []; }
実行結果がvideoになって便利!
Tips4 あんなことやこんなことしたい
https://github.com/facebook/php-webdriver/issues http://codeception.com/docs/03-AcceptanceTests http://piccagliani.github.io/Codeception.docs.ja_JP/ index.html issuesに「こんなことしたいんだけど」->「こうすればできるよ」が豊富。 使い始めるとdocumentationより頻繁に見てる気がする。 日本語documentがあって安心。
)BWFBOJDF&&5FTU-JGF