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
20180125mocha.jsとbackstop.jsで大規模リニューアルのリグレッショ...
Search
moyashidaisuke
January 27, 2018
Technology
750
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20180125mocha.jsとbackstop.jsで大規模リニューアルのリグレッションテスト
moyashidaisuke
January 27, 2018
More Decks by moyashidaisuke
See All by moyashidaisuke
個人開発がやりたくなる本を読んでモチベーションアップを図る話
moyashidaisuke
0
60k
アプリ名を変更するプラグインを作った話
moyashidaisuke
0
160
20180315これで簡単Laravelの認証処理をカスタマイズ
moyashidaisuke
0
1k
PHP製マーケティングオートメーション(MA)ツール Mauticの紹介
moyashidaisuke
0
870
20170621LaravelでDeployer
moyashidaisuke
0
540
Other Decks in Technology
See All in Technology
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
340
公式ドキュメントの歩き方etc
coco_se
0
110
最適な自走を最小限の支援で — M&Aで拡大する組織で少人数SREが挑んだ1年 / SRE NEXT 2026
genda
0
1.2k
Data + AI Summit 2026 イベントレポート: 「AIがビジネスで意思決定するデータ基盤」へ
nek0128
0
150
知らん間に、回ってる
ming_ayami
0
590
貴方はどのエンジニアリングを磨くのか
hatyibei
0
130
ローカルLLMとLINE Botの組み合わせ その3 / LINE DC Generative AI Meetup #8
you
PRO
0
130
kintone の AI コワーカーを、 Anthropic にエージェントを"ホストさせて"作った話 #devkinmeetup
sugimomoto
0
110
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
260
地域 SRE コミュニティ最前線 / SRE NEXT 2026 Discussion Night Track C
muziyoshiz
0
220
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
240
なぜ私たちのSREプラクティスはなかなか機能しないのか 〜システムより先に組織を見る〜 / Why our SRE practices aren't really working
vtryo
3
3.7k
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
340
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
460
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
A Tale of Four Properties
chriscoyier
163
24k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
350
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
My Coaching Mixtape
mlcsv
0
170
Transcript
mocha.jsͱbackstop.jsͰେن ϦχϡʔΞϧͷϦάϨογϣ ϯςετ 2018/01/25 meguro.es #13 @ ϥΫεϧ༷
ࣗݾհ • ͡Ί·ͯ͠ • ాେཌྷʢ;͍͚ͩͩ͘͢ʣ • @moyashidaisuke • ίϩϓϥ ->
ΈΜΕͼ • αʔόαΠυΑΓͰ͕͢ϑϩϯτΓ· ͢ɻੲjsͱcssͰΨνϟԋग़࡞ͬͨΓͯ͠ ·ͨ͠ɻ • ࠇࡏॅ
5NB8FP(A4M ,- .& !B .QXSYWUV#/2E"C82+ D? 6<=2E9/ :B>'$B1LHE;.2EB0B"AL<;*@RSTD? 7GKN=2E9/
')B8FIP A4KNMJ3A/ O6LI92%?82'$B LPBA8E9/
େنϦχϡʔΞϧ͠·ͨ͠ ʢ༷ಉ͡··ʣ
ର • ͓͞Μศʢhttps://obousan.minrevi.jp/ʣ • Ϩεϙϯγϒ • IDҧؚ͍Ίͯϖʔδ600͘Β͍ • ΄ͱΜͲ͕੩తϖʔδ
چڥ • WordpressͷݻఆϖʔδΦϯϦʔ • Ϩϯλϧαʔό1ߏ
৽ڥ • Laravel + WordpressʢRestAPIʣ • AWSʢEC2ɺCloudFrontɺS3ɺALBɺRDSʣ • ͍ͭͰʹϑϧHTTPSԽ
എܠ • HP͡Όͳͯ͘WEBαʔϏεͱͯ͠ػೳՃ͠ ͍͖͍ͯͨ • Խͯ͠ͳ͍ͷͰ·ΕʹΑ͘མͪΔ • εύήςΟ • ࣌ͷ୲ऀෆࡏͰਖ਼͍༷͠ෆ໌
ϦάϨογϣϯςετ
Γ͍ͨࣄ • ͱΓ͋͑ͣݟͨಉ͡ΛΩʔϓ͍ͨ͠ • SEOؤுͬͯΔͷͰmetaλάͱ͔Ωʔϓ͠ ͍ͨ
ݟͨΩʔϓ
Backstop.js • https://github.com/garris/BackstopJS • ϒϥβදࣔͨ݁͠ՌΛը૾Ͱอଘ • ը૾ಉ࢜Λൺֱͯ͠diffΛग़ͯ͘͠ΕΔ • ը໘αΠζࢦఆͰ͖ΔͷͰɺPCͱεϚϗ྆ํ νΣοΫՄೳ
݁Ռ
݁Ռ
࢝Ίํ npm i phantomjs casperjs -g npm i backstopjs -g
backstop reference backstop test
ઃఆϑΝΠϧ { "viewports": [ { "label": "phone", "width": 320, "height":
480 }, { "label": "tablet", "width": 1024, "height": 768 } ], "scenarios": [ {"label": "/","url": “https://testdomain/" ,"referenceUrl": "http://obousan.minrevi.jp/"}, {"label": "/aisatsu-reibun/","url": “https://testdomain/aisatsu-reibun/", "referenceUrl": "http://obousan.minrevi.jp/aisatsu-reibun/"}, ], Ωϟϓνϟ͍ͨ͠ ը໘αΠζ ରͷ63-Λྻڍ
metaλάͱ͔Ωʔϓ
mochaͱcheerio-httpcliͰࣗ࡞ • mocha -> testingͷFW • cheerio-httpcli -> εΫϨΠϐϯά •
ؤுͬͯεΫϨΠϐϯάͯ͠metaλάΛऔಘ͠ ͯɺassert͢Δ • େͨ͠ࣄ͍ͯ͠ͳ͍ͷͰ͋Γͦ͏Ͱແ͔ͬͨʢ͋ͬ ͨΒڭ͍͑ͯͩ͘͞ʂʣ
εΫϦϓτͪΒݟͤ function getSeoData(url) { const data = {}; const result
= client.fetchSync(url); data.title = result.$('title').text(); data.keywords = result.$('meta[name="keywords"]').attr('content'); return data; } describe(senario.url, () => { let newSeoData, oldSeoData; before(done => { newSeoData = getSeoData(newUrl); oldSeoData = getSeoData(oldUrl); done(); }); // ҎԼςετέʔε it('title', () => { assert.equal(newSeoData.title, oldSeoData.title); }); it('keywords', () => { assert.equal(newSeoData.keywords, oldSeoData.keywords); }); }); });
݁Ռ
ۤ࿑ͱ͔ͱ͔
ۤ࿑ͱ͔ͱ͔ • backstopͷ݁Ռϖʔδ͕ॏ͍ͨͷʢը૾͕େྔʣͰదͷ·ͱ Ίͳ͍ͱ։͚ͳ͍ • ग़ྗ݁ՌΛάϧʔϐϯάͰ͖ͳ͍ͷͰɺઃఆϑΝΠϧ͝ͱ͚ Δඞཁ͕͋Δ • ͦΕͰॏ͔ͨͬͨͷͰʢ100ը໘Ͱ1GB͘Β͍ɺɺɺʣɺS3 ʹhostingͨ͠
• backstop ϖʔδϦϯΫ͕ແ͍ͷͰؤுͬͯεΫϩʔϧɺɺɺ • ݁ߏ͔͔࣌ؒΔͷͰɺશϖʔδΛରʹ͢Δͷதʹ࣮ߦ
QA