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
2019-07 テスト自動化/2019-07 Test automation
Search
Cybozu
PRO
May 31, 2019
Technology
170k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2019-07 テスト自動化/2019-07 Test automation
Cybozu
PRO
May 31, 2019
More Decks by Cybozu
See All by Cybozu
新卒1年目QAが リリース基準の"なぜ"をたどってみた
cybozuinsideout
PRO
1
600
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
83k
kintone リサーチ副部/UXリサーチャー 業務紹介
cybozuinsideout
PRO
0
120
私たちが『JaSST協賛』から『外部コネクト』チームになった理由
cybozuinsideout
PRO
0
410
LLMでもいつものテスト技術〜意外と半分はこれまでのテストでした〜
cybozuinsideout
PRO
1
990
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
1.5k
LLMアプリの品質保証
cybozuinsideout
PRO
1
710
技術広報チームに丸投げしない!「一緒につくる」スポンサー活動
cybozuinsideout
PRO
0
260
テクニカルライター (グループウェア) について
cybozuinsideout
PRO
0
240
Other Decks in Technology
See All in Technology
20260720_クラウド女子会×PyLadiesTokyoコラボ Amazon Bedrock ハンズオン用資料
yuuka51
1
110
探索・可視化・自動化を一本化 Amazon Quickでデータ活用スピードを上げる方法
koheiyoshikawa
0
170
人とエージェントが高め合う協業設計
kintotechdev
0
760
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
460
AI時代こそ、スケールしないことをしよう -「作る人」から「なぜ作るか」を考える人へ / Do Things That Don't Scale in the AI Era — From How to Why
kaminashi
1
100
AI時代におけるエンジニアの新たな役割──FDEとクオリアの探求/登壇資料(戸井田 裕貴)
hacobu
PRO
0
320
ここは地獄!つらい朝会を体験することで、チームとしてのより良い振る舞いに気づくワークショップ / The stand-up meeting from hell in the game industry
scrummasudar
0
230
生成AI×AWS CDK×AWS FISで"振り返れる"ミニGameDayをつくろう
yoshimi0227
2
530
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
620
Webの技術とガジェットで子どもも大人も楽しめるワクワク体験を提供する / Qiita Tech Festa Day 2026
you
PRO
1
170
[Droidcon Orlando '26] The Android Lens: Applying Mobile Forensics to AI Performance
amanda_hinchman
1
110
AICoEでAIネイティブ組織への進化
yukiogawa
0
220
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
160
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
210
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
270
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
910
Raft: Consensus for Rubyists
vanstee
141
7.6k
Typedesign – Prime Four
hannesfritz
42
3.1k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Transcript
開運研修2019 テスト自動化 テストエンジニアリングチーム
この講義の目的 ▌テスト自動化の基本の「き」を知る ▌テスト自動化の演習を通して、 ⚫ 自動テストのよい書き方を知る ⚫ 自動テストの動く仕組みを知る
テスト自動化の基本
質問:手動テストは全部、自動化すればいいと思いますか?
質問:手動テストは全部、自動化すればいいと思いますか? ▌答え:NO! ▌全部自動化すればいい訳ではない ▌なぜ? ⚫ 自動テストの数だけ、メンテナンスコストがかかる ⚫ 実施頻度が少ないテストケースを自動化しても、 自動化をすることに時間がかかる場合もある ▌実行頻度の多いテストケースのみを自動化するなど
工夫が必要
参考:テストのピラミッドという考え方 ▌テストのピラミッドは、Mike Cohnの"Succeeding with Agile"[Coh09]で最初に提唱されたモデル ⚫ UIテスト ⚫ いわゆる画面上で動作するテスト ⚫
テスト速度は遅い ⚫ UIの変更が入るとテストが動かなくなる ⚫ インテグレーション(統合)テスト ⚫ UI層の1つ下の層までをテスト ⚫ WebAPIのテスト ⚫ ユニットテスト ⚫ コードレベルのテスト ⚫ テスト速度は早い UIテスト インテグレーションテスト ユニットテスト テスト数 速度 速 遅
質問:どんなテストでも自動化できると思いますか?
質問:どんなテストでも自動化できると思いますか? ▌答え:NO! ▌画面の崩れや画像のテストは、自動化が難しい 例)ボタンがずれていないことをチェックするテスト 例)アイコンが「×」であることをチェックするテスト ▌人間の目でチェックした方が、格段に効率が良いことも ある
課題内容
課題の説明 ▌課題: cybozu.comのログイン画面のテスト自動化
自動ブラウザテストの作成 ▌TEが作成したTCB(Test Common Base, テスト共通基盤)の仕 組みを利用しています。 ⚫ テストの形式を共通化 ⚫ PageObject
⚫ TestFlow ⚫ TestScript ⚫ ライブラリの共通化 ⚫ tcb-util ⚫ tcb-eslint … ⚫ 簡単に自動テストを作成できる ▌言語:JavaScript(Node.js)
Selenium WebDriverについて ▌Selenium WebDriver ⚫ OSSのソフトウエア ⚫ 自動でWebブラウザを操作してくれるツール ▌できる操作 ⚫
ボタンをクリック ⚫ フォームに値を入れる ⚫ 値が表示されるまで待つ ⚫ 値を取得する ⚫ などなど… http://webdriver.io/api.html
chaiについて ▌アサーションライブラリ:chai ⚫ OSSのソフトウエア ⚫ 動作結果の判定 ▌http://www.chaijs.com/ ▌実行結果と期待結果を比較 ⚫ expect(実行結果).to.equal(期待結果)
ほかにもいろいろな比較方法がある expect(‘foo’).to.be.a(‘string’) →型がstringであるかどうか expect('foobar').to.include('foo’) →fooが文字列の中に含まれるかどうか expect(実行結果).to.be.true →実行結果がtrueかどうか 参考URL
mochaについて ▌テストフレームワーク:mocha ⚫ OSSのソフトウエア ▌https://mochajs.org/ ▌describe()→テストの説明 ▌it()→テスト1ケース
TCBの構成 ▌PageObject ⚫ ページを構成している部品を記述(element) ⚫ 簡単な動作を記述(method) ▌TestFlow ⚫ PageObjectを使って複雑な動作を記述(method) ⚫
動作結果の判定 ▌TestScript ⚫ 実施するテストの具体的な手順
PageObjectについて ▌PageObject ⚫ ページを構成している部品や、その簡単な動作を記述 /src/pages/LoginPage.js 「セレクタ」と呼ぶ $(“.class名”) $(“#id名”) でも利用可能。
PageObjectについて ▌セレクタのいろいろな書き方 セレクタ 書き方 Id #product Class名 .entry CSS div.entry
Xpath /html/body/div Tag名 div 属性フィルター input[name=“pass”] <html> <body> <div class="entry“ id=“product”> <form id="login"> <input name="user" type="text" /> <input name="pass" type="password" /> </form> </div> </body> <html>
PageObjectについて ▌PageObject ⚫ ページを構成している部品や、その簡単な動作を記述 /src/pages/LoginPage.js WebDriverIOのAPIを利用 http://webdriver.io/api/action/setValue.html 他にも、クリックする、値を取得する…などもある
TestFlowについて ▌TestFlow ⚫ PageObjectを使って複雑な動作を記述 ⚫ 動作結果の判定 /src/test_flows/Login.js
TestScriptについて ▌TestScript ⚫ 実施するテストの具体的な手順
TCBの構成 ▌なぜこんな構成? ⚫ メンテナンスやテストの再利用、テスト修正がやりやすい Page Object1 Test Flow1 Test Script1
< name=username > Test Script2 Page Object2 Test Flow2 画面上の要素の値を使うのはPageObjectのみ 例えば画面の要素名が変わっても、PageObjectのみ変更 すればよい TestFlowのおかげで、同じ処理を何度も書く必要がなく より少ないコード行数でテストを作成することが可能
参考資料 ▌初めての自動テスト ――Webシステムのための自動テスト基礎 https://www.oreilly.co.jp/books/9784873118161/