<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> ondemand.saucelabs.com は http しかなくて https にする方法がないみたいだけどいいのか・・・?
<time>2014/10/30</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> Selenium::Remote::Driver という便利そうなモジュールがあるが LWP かつ Moo だ・・・。
<time>2014/10/30</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> Sauce Labs:</p><ul><li>WebDriver Wire Protocol
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://code.google.com/p/selenium/wiki/JsonWireProtocol#POST_/session/:sessionId/timeouts">https://code.google.com/p/selenium/wiki/JsonWireProtocol#POST_/session/:sessionId/timeouts</anchor-external>
でブラウザーを操作できる</li><li>Perl モジュールはあるが微妙</li><li>簡単な HTTP API を叩くだけで良いので、自前で実装するのでよさそう</li><li>HTTP だけで、 HTTPS の API が提供されていない<ul><li>パスワードなど転送するのはちょっと躊躇してしまう...</li></ul></li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> Sauce Connect:<ul><li>手元のいくつかの TCP ポートと Sauce 側の TCP ポートでポート転送する</li><li>手元で実行するだけでいい感じにやってくれるが、ほぼ無設定で全部やってくれて逆に怖いw<ul><li>向こうで http://localhost:5000/ にアクセスしたらなぜかこちらの http://localhost:5000/ にアクセスが来るすごいやつ</li><li>しかもこちらの /etc/hosts が向こうでのアクセスにも反映されるとか何とか</li></ul></li><li>通信路は HTTPS なのでそこはまあ良かろう</li><li>手元の開発環境でこれを実行するのはちょっと怖い</li></ul></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> というのをふまえて</p><ul><li>(テストA群) その場で起動したアプリケーションサーバー + 直接HTTPアクセスのテスト<ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">外部テスト</anchor>と呼ばれることがあるやつ</li><li>アプリケーションサーバー側がちゃんと動作することを確認する</li></ul></li><li>(テストB群) その場で起動したアプリケーションサーバー + ブラウザー + Selenium 経由アクセスのテスト<ul><li>クライアント側スクリプトまで含めてちゃんと動作することを確認する</li></ul></li><li>(テストC群) 起動済みアプリケーションサーバー + 直接HTTPアクセスのテスト</li><li>(テストD群) 起動済みアプリケーションサーバー + ブラウザー + Selenium 経由アクセスのテスト</li></ul><p>というテストを書いて</p><ul><li>開発中に手元の開発環境で動かす<ul><li>テストA群</li><li>テストB群を手元のどれか1つのブラウザーで</li></ul></li><li>CI 環境で push のたびに自動実行する<ul><li>テストA群</li><li>テストB群を Sauce Labs + Sauce Connect で全部のブラウザーで</li></ul></li><li>デプロイ後に自動実行する<ul><li>テストC群</li><li>テストD群を Sauce Labs で全部のブラウザーで</li></ul></li></ul><p>という感じで実行するのが良いか。</p><p>A/C はブラウザー以外からのアクセスのテスト、境界ケースやセキュリティーに関わる場合のテストに必要である。ブラウザーが不要な分速いので、ブラウザーが必要ないサーバー側の基本動作のテストはこちらの方法で書くべきである。B/D は実際の人間利用者のアクセスに近いので、こちらのテストは必要である。 JavaScript や表示中のユーザー操作が関わる動作のテストもこちらでしか書けない。</p><p>A/B と C/D の違いはアプリケーションサーバーの起動のタイミング以上に、接続されているDBの違いがある。本番環境でのテストはユーザーに見えてしまうことがあるので、慎重にしなければならないし、テストできない動作もある。そのため本番環境で実行され得るテストとそれ以外のテストは分ける必要がある。開発中には任意の状態を作り出したいので、基本的には A/B の方法で書くべきである。しかし本番環境特有の問題が見つかることはよくあるので、 C/D も必要ではある。デプロイ後にロールバックするかどうかの判断はできるだけ早く行いたいので、 C/D のテストは少ない方が良い。
<time>2014/10/30</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> ただこういう使い方をするのに Sauce Labs の料金プランは高すぎる。
CI で常時チェックしたいなら、他の CI プラットフォーム上で Web ブラウザー + WebDriver
サーバーを自前で動かした方がコストパフォーマンスは圧倒的に優れている。
(ただしいろいろなプラットフォームの Web ブラウザーが揃っているという
Sauce Labs の圧倒的なメリットがある。)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <cite xml:lang="en-us">Pricing | Sauce Labs</cite>
(<time>2017-09-30 12:53:04 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://saucelabs.com/pricing">https://saucelabs.com/pricing</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <cite>Test with Sauce Labs - CircleCI</cite>
(<time>2017-09-29 11:16:08 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://circleci.com/docs/1.0/browser-testing-with-sauce-labs/">https://circleci.com/docs/1.0/browser-testing-with-sauce-labs/</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Sauce Labs</anchor> やっぱり <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CI</anchor> には高すぎるよなあ。</p></body></html>