さんのこちらの記事を参考にJavaでHTTPアクセスを記録/再生してテスト時に使える、Betamaxを試してみました。このBetamaxというのはその名の通り、テープに記録/再生するものなわけですが、その対象が映像ではなくHTTPアクセスだと言うことです。Rubyでvcrという同様のツールがあるのですが、こちらのクローンとなります。Betamxを使ったテストのメリットとしてネットに繋げる必要がない状態を固定できる(検索結果などアクセス毎に変わるものに有効)レアケースのテストに対応できるモックを用意する必要がないというのがあげられます。モックを用意しなくて良いので、テスト全体もシンプルになりますし、WebAPIを始め外部のリソースを叩くときにはかなり汎用的に活用できそうです。基本的な仕組みはJettyベースのProxyを立ち上げて、Javaの標準Proxy設定を変更する作りのようです。HttpUnitなど独自のProxyを利用するコードには明示的にProxyを指定してやる必要があります。Groovyで記述されたライブラリですが、ピュアJavaからでも問題なく利用出来ました。Scalaとかからの利用も可能でしょう。使い方について下記に書いていきます。<scope>test</scope></dependency>ここで重要なのはgroovy-allとhttpclientを追加するのを忘れないことです。このあたりが無いと下記のようなエラーがでるので要注意です。java.net.URLClassLoader.access$000(URLClassLoader.java:73)Javaだけ使ってると特にgroovy-allなんて入ってないと思うので、そこでハマるかもです。テスト以外には不要なのでscopeはtestにしておきます。テストの記述Betamaxを使うときのポイントは3点です。@RuleにRecorderを設定する各テストケースに@Betamaxを指定する必要に応じてresources/betamax.propertiesを編集するまずは下記の通り@RuleにRecorderのフィールドを宣言します。この値はpublicでなければいけません。Recorder();次に各テストに対して@Betamaxアノテーションを追記します。tapeで記載された値がHTTPリクエストの記録名となります。con.disconnect();}この状態で実行すると、まず初回アクセスは通常通りネットにアクセスを行います。その時のネットワークの記録がsrc/test/resources/betamax/tapes/記録名.ymlとして出力されます。これ以降は実行の度にこのファイルを参照して、ネットワーク通信無しのダミーアクセスとなります。ファイルの中身は以下のようなフォーマットです。World.</html>こちら、ファイルフォーマットを直接変更することで任意の内容に変えることができるので、再現が難しい内容に関しては、直接テープを用意してしまうのが良いと思います。デフォルトポートが5555なのですが、こちらが既に利用されていてる場合は当然ですが、下記のような例外が出ます。useその場合はsrc/test/resources/betamax.propertiesを作成して設定内容を変更するのが有効です。私の環境の場合5555はぶつかってしまったので、以下の設定ファイルを作成して6555に変更してあります。betamax.tapeRoot=src/test/resources/betamax/tapesbetamax.useProxy=truebetamax.proxyPort=6555betamax.proxyTimeout=5000betamax.defaultMode=READ_WRITEbetamax.ignoreHosts=localhost,127.0.0.1betamax.ignoreLocalhost=falsebetamax.sslSupport=trueこちらを読み込むことで無事、テストが動作します。HTTPSアクセスを有効にするためにはbetamax.sslSupport=trueを設定する必要があります。デフォルト設定ではfalseなので、下記のようなエラーが発生します。sun.security.ssl.Alerts.getSSLException(Alerts.java:192)HTTPSを利用する場合は忘れずに変更するようにしましょう。まとめさて、これで基本的なBetamaxの使い方は説明完了です。自分も使い始めたばかりですが、開発中のAndroidアプリがちょうど外部アクセスをするのでテストに組み込んで見ました。1ケースしか書いてないのであまり意味無いですがw仕事でAPI叩いてることも良くあるので、その辺にも随時適用していきたいと思います。12:11JavaでHTTPアクセスを記録/再生してテスト時に使える、Betamaxを試してみたTweet広告を非表示にする関連記事2015-12-09さよならスティッキーセッション!PayaraでJavaEEでもセッションをKVSに。(7)月別アーカイブはてなブログをはじめよう!pascal256さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。