SlideShare a Scribd company logo
Nuxt.js SSRにおけるE2Eテストの実装
Scramble Tech#1
株式会社 ミクシィ
太田 一行

構成
Nuxt.js SSRにおけるE2Eテストの実装
1. あらすじ
2. 背景
3. 実装例と運用してみた結果
4. 議論と今後の見通し
5. [image citations]
6. [self introduction]
あらすじ
Nuxt.js SSRにおけるE2Eテストの実装
E2Eテストの実装 安定したQAに自動化で貢献
Nuxt.js SSRにおけるE2Eテストの実装
使用する道具 いくつかの道具を組み合わせ
E2E test on Nuxt.js with SSR
Nuxt.js SSRにおけるE2Eテストの実装
Our Application
Nuxt.jsで作成されたフロント
& Phoenixで作成されたサーバ
Nuxt.js SSRにおけるE2Eテストの実装
…with SSR
time-to-contentの改善が見込
める。ビジネス要件によって
は考えたい選択肢。
背景
Nuxt.js SSRにおけるE2Eテストの実装
E2Eテスト

実装の目的
❖ 機械的に確認できる部分を自動化し、

QAの省力化に貢献すること
❖ かつ、単体テストやAPIテストには

カバーできない項目が存在する
E2E テストについて
❖ ソフトウェアテストの一種
1. 自動でブラウザを操作
2. 作成したシナリオを実行
3. スクリーンショット(SS)撮影等
4. 期待した描画結果か調べる
E2E テストの役割
❖ チームでは3つを定義した
1.デザイン崩れの検出
2.デグレーションの検出
3.ページ遷移を保証
E2E テストの留意点
❖ 外部要因に影響を受け得る
❖ ネットワーク遅延等
❖ 変更コストやや増
❖ それ自体に保守コストが

かかる
単体テストの代わりではなく、

補完として
代表的なツール
❖ Puppeteer
❖ Headless Chrome Node.js API
❖ maintenance by Chrome dev team
❖ 要点
❖ Chromeをスクリプトから

操るライブラリ
❖ 採用理由
❖ vs puppeteer-core
❖ jest-puppeteerの存在
❖ jest テスト環境がすでに存在したため
App要件1:SSR概要
❖ WebAppはSever-Side-
Rendering (SSR)を採用
❖ HTML&propsを合わせて

事前レンダリングする
❖ JSで書かれたcomponentが
propsを参照しながら遅れて
描画される
❖ アルゴリズムは本スライドの
スコープ外
App要件1:SSR概要
❖ 採用理由
❖ time-to-contentの改善が

ビジネス上クリティカル
❖ E2Eテストからみた制約
❖ Node.js 実行環境が必要
アクセスして何かが表示
されるまでの時間
App要件2:SMS認証
❖ 所与の要件として、SMS認証を
認証に用いる
❖ Puppeteerは正規の方法で
SMS認証を突破できない
❖ E2Eテストからみた制約
❖ SMS認証をモックした

専用のサーバを立てる必要
要件の整理
1. CI/CDで定期実行する
2. ビジネス要件への適応
❖ SSRを実行できる環境
❖ 専用のサーバ
3. (できれば)テスト失敗時に

対応しやすい
❖ 問題箇所をすぐ特定
❖ 正しいSSをすぐデプロイ
実装例
E2E test on Nuxt.js with SSR
アプリケーション部分
❖ Nuxt.js + Phoenix + Nginx
❖ Nuxt.js - Nginx間はDocker
ネットワークで繋がっている
❖ PhoenixにはE2Eテスト用の
環境設定を追加
❖ SMS認証はモックされている
アプリケーション部分
❖ 工夫したポイント
❖ Nuxt.jsはNodeコンテナに
❖ Phoenixのplugとして

SMS認証機能をモック

課題1を解決できた!
課題2を解決できた!
Docker-Compose on CircleCI
❖ Docker-Compose
❖ Nuxt.js コンテナ
❖ Nginx コンテナ
❖ Puppeteer コンテナ
❖ cronで定期実行
$ docker-compose up
Docker-Compose on CircleCI
❖ Nuxt.js コンテナ
❖ Node+ App本体
❖ Nginx コンテナ
❖ 本番ではS3-CloudFrontのメディア
サーバ
❖ Puppeteer コンテナ
❖ Node + Puppeteer + Chrome
❖ シナリオスクリプトや正解デー
タ、実際に撮影したSSなどのデー
タを含むテスト実行主体
Docker-Compose on CircleCI
❖ ローカルでも同じコマンド



でテスト実行できる
$ docker-compose up
テストの実行と通知
❖ Puppeteerがテストを実行
❖ S3から正解画像を取得し、
コンテナに含めてビルド
❖ 作成したSSはArtifact化
❖ ブラウザからすぐ見られる!
❖ 結果はURLつきで

Slackに通知 問題の早期特定に役立つ!
1. Slackに毎朝実行結果が通知される
2. 失敗していたら、Artifactとして保存したSSを参照。

失敗した理由を特定する。
3. コードを修正する。
4. ローカルから$docker-compose up
5. 正しく生成した画像をS3にプッシュ
運用フロー
CIで

定期実行 !
2step!
要件再掲
1. CI/CDで定期実行したい
2. ビジネス要件への適応
❖ SSRを実行できる環境
❖ 専用のサーバ
3. (できれば)テスト失敗時に

対応しやすい
❖ 問題箇所をすぐ特定
❖ 正しいSSをすぐデプロイ
要件を満たせた!
2ヶ月ほど運用した結果
❖ 設定した目標は実現できていそう
❖ デザイン崩れ防止
❖ デグレーション防止
❖ ページ遷移の保証
❖ 副次的なありがたみもいくらかある
❖ 単体テストやAPIテストのヌケが見つかることも
議論と今後の見通し
議論
❖ これは正しいend-to-endテストと呼べるのか?
❖ end-to-endとはいえない

なぜならサーバ側を厳密に保証できていないから
1. DB、インフラの性質が本番とは異なる
2. SMS認証部がモックされている
❖ SMS認証を回避しつつサーバコード全体をそのまま残すこと
ができればend-to-endと呼べるか? 1も同様に必須か?
皆さんの良いアイデアお待ちしていますmm
今後の課題
❖ E2Eテストの保守性向上
❖ E2Eテストは腐りやすい
❖ 更新ツールを整備して腐りにくく
❖ 単体テスト、APIテストのカバレッジ向上
❖ E2Eテストに依存せず、バランスの良いテスト体制を
余談(実装した感想)
❖ 実装時、CORSがエラーしがちで辛い
❖ Chrome devtool, curlの用法に詳しくなる
❖ フロント、サーバ、インフラを横断するタスク
❖ 全てのエンジニアが全てのコードに責任をもつ

@ガイドライン
❖ DockerとCircleCIに親しみを持てるようになった
ご清聴ありがとうございました
freepik contributions:
https://jp.freepik.com/free-vector/flat-robot-character-with-different-poses-collection_1510587.htm#page=2&query=robot&position=1

https://www.freepik.com/free-vector/businessman-holding-thumb-finger-stopwatch_1311422.htm#page=1&query=quickly&position=1
https://www.freepik.com/free-vector/maintenance-concept-illustration_5421740.htm#page=1&query=maintenance&position=0
https://jp.freepik.com/free-vector/bundle-of-engineering-set-icons_5984951.htm#query=computer%20tools&position=16
https://jp.freepik.com/free-vector/the-browser-window-with-the-donate-button_4015769.htm#page=1&query=browser&position=7
https://jp.freepik.com/free-photo/work-desk-coffee-documents-and-laptop_1189547.htm#page=1&query=%E6%9B%B8%E9%A1%9E&position=13

Google2段階認証プロセス - Google https://www.google.com/landing/2step/?hl=ja
phoenix - seeklogo https://seeklogo.com/vector-logo/273793/phoenix
image citation
太田 一行
❖ Software Engineer1年目
❖ フロントエンド
❖ 機械学習
❖ 略歴
❖ 2019.4 株式会社ミクシィ
❖ 2019.3 京都大学大学院 

情報学研究科 知能情報学専攻 卒
❖ 連絡先
❖ @samayotta
❖ samayotta@gmail.com

More Related Content

PDF
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
PDF
kubernetes on Azure 最新情報
PDF
ChainerRL の学習済みモデルを gRPC 経由で使ってみる試み (+アルファ)
PDF
インフラ廻戦 品川事変 前夜編
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PPTX
SQL Serverでデータ連携をする
PPTX
ワタシハ Azure Functions チョットデキル
PPTX
Azure SQLデータベース最新動向&TIPS
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
kubernetes on Azure 最新情報
ChainerRL の学習済みモデルを gRPC 経由で使ってみる試み (+アルファ)
インフラ廻戦 品川事変 前夜編
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
SQL Serverでデータ連携をする
ワタシハ Azure Functions チョットデキル
Azure SQLデータベース最新動向&TIPS

What's hot (20)

PDF
半日でわかる コンテナー技術 (応用編)
PDF
20130823 cloudpacknight AutoHealing
PDF
帰ってきた インフラ野郎 Azureチーム ~Azure データセンターテクノロジー解体新書2018春~ - de:code2018
PDF
俺の Kubernetes Workflow with HashiStack
PDF
Real World Azure RBAC
PDF
インフラ野郎AzureチームProX
PDF
Non-coding! Azure
PDF
cloudpackサーバ仕様書(サンプル)
PDF
半日でわかる コンテナー技術 (入門編)
PPTX
深層学習 環境構築 Azure
PDF
Ingress on Azure Kubernetes Service
PDF
インフラ野郎 Azureチーム at クラウド boost
PDF
Google Web Toolkit(GWT)入門
PDF
俺とHashiCorp
PDF
ダイ・ハード in the Kubernetes world
PDF
20210925_jazug_azure_what_to_do_first
PDF
Azure Infrastructure as Code 体験入隊
PPTX
msal.js v2を触る
PDF
ミッション : メガクラウドを安全にアップデートせよ!
PDF
Essentials of container
半日でわかる コンテナー技術 (応用編)
20130823 cloudpacknight AutoHealing
帰ってきた インフラ野郎 Azureチーム ~Azure データセンターテクノロジー解体新書2018春~ - de:code2018
俺の Kubernetes Workflow with HashiStack
Real World Azure RBAC
インフラ野郎AzureチームProX
Non-coding! Azure
cloudpackサーバ仕様書(サンプル)
半日でわかる コンテナー技術 (入門編)
深層学習 環境構築 Azure
Ingress on Azure Kubernetes Service
インフラ野郎 Azureチーム at クラウド boost
Google Web Toolkit(GWT)入門
俺とHashiCorp
ダイ・ハード in the Kubernetes world
20210925_jazug_azure_what_to_do_first
Azure Infrastructure as Code 体験入隊
msal.js v2を触る
ミッション : メガクラウドを安全にアップデートせよ!
Essentials of container
Ad

Similar to E2E test on Nuxt.js with SSR (20)

PPTX
スクリプト実行可能なサーバーサイド拡張(SSE)の実装例とその応用 - Node.js編
PPTX
Android e2e testing at mercari
PPTX
20190319 xtech recochoku_15m_pub
PPTX
機械学習 / Deep Learning 大全 (5) Tool編
PPTX
PDF
OpenStack on OpenStack with CI
PPTX
Test automation strategy for .net core 3 transition
PDF
Windows Azure and PowerShell DSC
PDF
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
PPTX
Hokuriku.net 2013 01-26 node.js
PPTX
Applibot presents Smartphone Game on AWS
PPTX
Microsoft AI Solution Update / DLL community Update
PDF
[MW11] OSS on Azure で構築する ウェブアプリケーション
PDF
1000人規模で使う分析基盤構築 〜redshiftを活用したeuc
PDF
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
PDF
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
PPTX
Azure Antenna AI 概要
PDF
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
PDF
開発者のための機械学習入門:Azure Machine Learning Studioで構造化データから予測分析
PPTX
Oracleがnode.jsをやり始めたというのだが!
スクリプト実行可能なサーバーサイド拡張(SSE)の実装例とその応用 - Node.js編
Android e2e testing at mercari
20190319 xtech recochoku_15m_pub
機械学習 / Deep Learning 大全 (5) Tool編
OpenStack on OpenStack with CI
Test automation strategy for .net core 3 transition
Windows Azure and PowerShell DSC
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
Hokuriku.net 2013 01-26 node.js
Applibot presents Smartphone Game on AWS
Microsoft AI Solution Update / DLL community Update
[MW11] OSS on Azure で構築する ウェブアプリケーション
1000人規模で使う分析基盤構築 〜redshiftを活用したeuc
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
Azure Antenna AI 概要
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
開発者のための機械学習入門:Azure Machine Learning Studioで構造化データから予測分析
Oracleがnode.jsをやり始めたというのだが!
Ad

E2E test on Nuxt.js with SSR