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
[OutSystems] CodeceptJS で快適な E2E ライフを送ろう!
Search
kata_junn
October 20, 2021
Technology
360
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[OutSystems] CodeceptJS で快適な E2E ライフを送ろう!
CodeceptJS is god
kata_junn
October 20, 2021
More Decks by kata_junn
See All by kata_junn
[OutSystems] ユニットテスト in OutSystems
kata_junn
0
560
O11?ODC?一体何が違うのさ?_v1.0.2.pdf
kata_junn
0
1.5k
[OutSystems] O11 ユーザーに贈る ODC 移行に備えておくと良さそうなコト
kata_junn
0
640
ODC を乗りこなすために理解しておくと良いかもしれないいくつかのこと~Case:External Logic~
kata_junn
0
480
[OutSystems] シン・とりあえず Reactive なプロジェクトにはこれ導入しておくと良い規約
kata_junn
0
310
[OutSystems] Testing Framework がいい。とてもいい。
kata_junn
0
1.9k
[OutSystems] OutSystems が誘う Null がない世界の罠
kata_junn
0
1.1k
[OutSystems] とりあえず Reactive なプロジェクトにはこれ導入しておくと良いって規約
kata_junn
1
1.8k
[Agile][Scrum] 転リファ
kata_junn
3
11k
Other Decks in Technology
See All in Technology
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
270
Amazon Bedrock AgentCore ワークショップ JAWS UG TOHOKU / amazon-bedrock-agentcore-workshop-jawsug-tohoku-2026
gawa
8
260
Cloud Run のアップデート 触ってみる&紹介
gre212
0
310
イベントストーミングとKiroの仕様駆動開発で実現する要件の認識合わせプロセス
syobochim
7
1.2k
AI フレンドリーなエラー監視を TypeScript で実現する
shinyaigeek
2
260
Building applications in the Gemini API family.
line_developers_tw
PRO
0
1.5k
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
0
180
個人最適 から 全体最適 へ AI情報共有会・AIギルド・AI-DLC で進める カンリーの組織展開
rfdnxbro
0
1.5k
ルールやカスタム機能、どう使う?理想の出力を引き出すために今知りたいIBM Bob 5つの機能
muehara
1
340
Diagnosing performance problems without the guesswork
elenatanasoiu
0
160
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
4
1.8k
「気づいたら仕事が終わっている」バクラクAIエージェント本番運用の裏側 / layerx-bakuraku-aie2026
yuya4
18
10k
Featured
See All Featured
Accessibility Awareness
sabderemane
1
130
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
590
Rails Girls Zürich Keynote
gr2m
96
14k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
220
Building AI with AI
inesmontani
PRO
1
1.1k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
130
Marketing to machines
jonoalderson
1
5.4k
Embracing the Ebb and Flow
colly
88
5.1k
Transcript
CodeceptJS を使って 快適な E2E テストライフを送ろう! 片野 潤一 伊藤忠テクノソリューションズ株式会社 アジャイル営業推進部 OutSystems
Developer Conference 2021
Java Struts/Spring/MyBATIS 2005 2014 OutSystems Developer@3人(6か月) Developer && TL@約10人(24か月) OutSystems
推進 2019 2020 Scrum on AWS Role:Developer TypeScript Serverless Dynamo, Lambda, S3, SQS, Kinesis, Athena Angular 認定スクラムマスター(CSM) AWS Certified DevOps Engineer - Professional OutSystems Expert Traditional Web Developer OutSystems Architecture Specialist 好き:リアル脱出ゲーム、低温調理、スパイス、モブプロ、DQW、ゼルダ 20% OutSystems OutSystems 推進 Expert Service BootCamp 講師 PoC 提案+実施 now!! 2 片野 潤一(かたじゅん) Twitter:@kata_junn
書いてるよ!!! OutSystems プロジェクトで E2E テストを… 書いてないよ!!! E2E しらんよ!!! Zoom の
↓ の機能で枠内に✓とかつけてね!
今日の話が響きそうな人 ⚫ E2E テストってなんだよ、な人 ⚫ E2E テストにこれから取り組むぞ!な人 ⚫ E2E テストの実装やメンテに大変な思いをしている人
4
CodeceptJS こーどせぷとじぇいえす
CodeceptJS https://codecept.io/ Node.js で実装された E2E フレームワーク ヘルパーとして Webdriver や Puppeteer
などが選択でき、本体はそれらの Wrapper API を提供 https://codecept.io/basics/
E2E テスト いーつーいー/えんどつーえんど
E2E テスト “ エンドツーエンドテスト(E2Eテスト)とは、アプリケーションのワークフロー を最初から最後までテストすることを含むソフトウェアテスト方法を指します。こ の方法は基本的に、実際のユーザーシナリオを複製して、システムの統合とデータ の整合性を検証できるようにすることを目的としています。 https://www.browserstack.com/guide/end-to-end-testing
E2E テスト “ エンドツーエンドテスト(E2Eテスト)とは、アプリケーションのワークフロー を最初から最後までテストすることを含むソフトウェアテスト方法を指します。こ の方法は基本的に、実際のユーザーシナリオを複製して、システムの統合とデータ の整合性を検証できるようにすることを目的としています。 https://www.browserstack.com/guide/end-to-end-testing ブラウザや実機でぽちぽちするテスト
積み重なった機能群 (インクリメント)を 継続的にデリバリーするために 事実上必須だから なぜ人類は E2E テストをプログラムで実装するのか
E2E が快適でなかった時代 あるいは OutSystems での E2E 実装の思い出
OutSystems での E2E 実装の思い出 ⚫ [Traditional] ID が自動生成されるので後方一致検索する ⚫ Input_Hoge,
Select_Hoge を “Hoge” で検索すると混ざるので注意 ⚫ XPath やら CSS セレクタで特定する ⚫ HTML に独自属性(data-*)を付けて頑張って一意にする 12 参考: https://success.outsystems.com/Documentation/How-to_Guides/DevOps/How_to_do_UI_testing_with_Selenium
テストページに飛んでボタンを押してテキストを入力する with Puppeteer
テストページに飛んで テストページに飛んでボタンを押してテキストを入力する with Puppeteer
テストページに飛んで ボタンを押して テストページに飛んでボタンを押してテキストを入力する with Puppeteer
テストページに飛んで テキストを入力する ボタンを押して テストページに飛んでボタンを押してテキストを入力する with Puppeteer
OutSystems での E2E 実装の思い出 ⚫ [Traditional] ID が自動生成されるので後方一致検索する ⚫ Input_Hoge,
Select_Hoge を “Hoge” で検索すると混ざるので注意 ⚫ XPath やら CSS セレクタで特定する ⚫ HTML に独自属性(data-*)を付けて頑張って一意にする ⚫ 上記の事情から、画面実装を変更すると大体のテストは死ぬ ※ OutSystems に限らない話であり、OutSystems でもこういった問題は避けられないよ、という意味 17 参考: https://success.outsystems.com/Documentation/How-to_Guides/DevOps/How_to_do_UI_testing_with_Selenium
E2E テストの突然死に対するアプローチ ⚫ 死ぬたびにメンテ ⚫ やがて実装者の精神も死ぬ諸刃の剣 ⚫ Page Object Pattern
で影響範囲を狭める ⚫ E2E テスト実装の保守性を高める方法論 ⚫ DOM 検索をいい感じにする ⚫ CodeceptJS の Semantic Locator がいい感じに適合 18
Semantic Locator せまんてぃっく ろけーたー
Semantic Locator
Semantic Locator
Semantic Locator (速度はちょっぴり犠牲になるけど) Label とか文言でマッチすれば探し当ててくれる
Traditional Reactive
Traditional Reactive Semantic Locator 結果は等価
テストページに飛んでボタンを押してテキストを入力する with CodeceptJS
テストページに飛んでボタンを押してテキストを入力する with CodeceptJS テキスト(等)を入力する ボタンを押して テストページに飛んで
Semantic Locator でコードの可読性を高くできる(もちろんセレクタ指定も可能) 失敗時のスクショを自動的に保存 アクションごとにスクショを保存して簡易なレポートを作成(Allure と連携もできる) Translator でログがわかりやすい CodeceptJS の良いところ
「画面に対してテストを行う」文脈で E2E テストが書ける CodeceptJS と OutSystems の相性の良いところ Semantic Locator の恩恵
Traditional と Reactive を区別することなくテストコードが書ける プロダクト実装と E2E 実装の密さを軽減できる ServiceStudio での UI 実装の一覧性があまり快適でないことへの対策
書いてみたので Demo します! ひゃくぶんはいっけんにしかず
None
URL 以外コードは同じ
まとめ ⚫ プロダクトのリリースサイクルを早めるためにはテスト自動化が必須 ⁻ ユニットテストは言わずもがな ⁻ E2E テストも例外ではない ⚫ E2E
テスト実装はガラス細工のように脆く壊れやすい繊細さを持つ ⁻ 画面実装を変えると大体突然死 ⚫ 突然死の対抗手段の一つが Semantic Locator ⁻ CodeceptJS の実装が OutSystems と良相性 ⁻ 可読性やポータビリティが得られる代わりに速度は犠牲になる ⚫ CodeceptJS で快適な E2E テストライフを手に入れよう!!
CodeceptJS 使いたくなった? なった!!! いや… Zoom の ↓ の機能で枠内に✓とかつけてね!
ご清聴ありがとうございました ご質問があれば お願いします!
参考になる CodeceptJS 関連の記事たち CodeceptJSで、非エンジニアでも読みやすいテストコードを書く https://qiita.com/tsuemura/items/70b156baecfbcffb03fb E2Eテストの面倒くさいことはCodeceptJSにお願いしよう https://qiita.com/Kesin11/items/11da1b4cf9d58e4dd9af エンジニア視点で見たCodeceptJSのよさ https://qiita.com/tsuemura/items/fc0c74884cb3c6760a75 我が名は神龍……どんなテストもひとつだけ自動化してやろう
https://qiita.com/tsuemura/items/56ba9942565963858d8f CodeceptJSのfuzzy locatorは若干遅いことがある https://qiita.com/jyunji_watanabe/items/c4c9d31397c7e0f4372d