Selenium WebDriverとApache JMeter


最近異なる案件で両方を使い分ける事案があったのでメモる

Selenium WebDriverと言ってここで意図しているもの

UIからカチカチではなくてPythonで書いたUnitTest的にどうさするもの。unittestモジュールから実行している

webdriver.Firefox() をsetUp()で作ってtearDown()で殺す。

ブラウザを起動してリンクを辿らせてクリックさせてフォームにテキスト入れて意図したページに飛ぶかをチェックする。その都度ブラウザが出てきて死ぬ瞬間の画面もtime.sleep()とか入れると見れるので割と「インタラクティブ」である。ブラウザを外枠に持つ。

少なくとも自分のX上で動かすと他の作業はできなくなる。一度実行開始直後にemacsに移ってctrl-n (下へ移動)をしようとしたらFirefoxがたちあらわれてたくさんのWindowが生成されて悲しい思いをした。

本当の動作を検証するには良い。UIでポチポチのSeleniumサイドはよく知らない。多分便利だ。

Apache JMeterと言ってここで意図しているもの

用途が似通っているのだがやはりHTTPを叩いてリンクを見て結果を取ってきて付き合わせるのに使っている。こちらはUIからポチポチしているのだが、何故かやろうとしていることはものすごくローテクである

Cookieを取得して次の画面でそれを使うにはSet-Cookieをresponseから取ってきて正規表現で加工する。

あるHTMLページのmp3ファイルを取得して順にダウンロードするには、正規表現で全部マッチするようにしてインデックスに -1 を指定して……んもーーー!!!

(-1を指定して、は事実。このようにするとForEachから呼び出せる形で変数に放り込まれる)

プログラミングと見せかけて高度なオレオレフィルタリングをUIエディタで書く。JMeterエディタがスマホに欲しい #わけがない

TCP/IPレベルの接続を生で編集している印象がとても強い。

よくあるドキュメントには「JMeterはブラウザではない」というよくある間違いの訂正がある。確かにそう。ユーザエージェントを指定することはできるが、レンダリング結果をお目にかかることはない。結果はHTMLで生で見る。取得するデータは正規表現で得る。せ、せめてブラウザでプレビューさせて欲しい……

JMeterは設定を書くのがとてもつらい。レコードも試したが、動的に変化する要素を変数化する部分はやはり自分でやる。しんどい。

しんどい後には相手を復讐できるのがJMeterである。ローカルから10クライアントえーい。AWS経由で複数ホストから合計1000クライアントえーい。

WebDriverではこういう「負荷」に関わる設定は難しい気がする。というかそういうツールではないと思う。

なおHTTP接続の話ばかりだが、LDAPやSMTPのポートへ接続するものも書ける。

欲しいもの

WebDriverの設定を書くとJMeterの設定が出てきて欲しい。ただ、JMeterのユーザ実行をレコードする機能を試していて「相当無理筋」という印象は受ける。あったら欲しいので教えていただきたい。

まとめ

そんなものはないが、ユーザの挙動をエミュレーションするツール本があったら買うと思う。