JMeterの埋込関数で動的変数を扱う

負荷テストツール「JMeter」を触っているのですが、日本語情報少なかったことを調べたのでメモ。
もはやRubricksと関係ありませんが。


JMeterは負荷ツールなので、たくさんのリクエストをWebサーバに対して発行してくれます。
ただ、一意性確保などの理由で、リクエスト毎に微妙に異なる値をパラメータに含めなくてはならない局面があります。
JMeterではユーザ定義変数という仕組みが提供されていて、${user1_name}とか書くとあらかじめ宣言していた値をあてこむことができます。
でもこの方法だと、異なる値が100個必要なら100個の変数を手動で作らなくてはなりません。動的に変数の値を生成するのはどうやるのでしょうか。


そんなときに役立つのが埋め込み関数であるFunctions。
下記のような関数が準備されています。

  • regexFunction - regular expression evaluator
  • counter
  • threadNum - get thread number
  • intSum - add variables
  • StringFromFile - read a line from a file
  • machineName - get the local machine name
  • JavaScript (Apache Rhino)
  • random number
  • CSVRead - read from CSV delimited file
  • read a property
  • P - read a property
  • setProperty - set a property
  • log - log a message
  • logn - log a message
  • BeanShell - run BeanShell
  • split - Split a string into variables
  • XPath - XPath use an xpath expression
  • time - return current time in various formats
  • jexl - evaluate a Commons Jexl expression

counterをつかえば連番を発行できます。
randomを使うと、ランダム値が発行できるので、ユーザを登録し続けるようなテストをしたい場合に(大体)一意な値を作ったりできます。
他にもCSVをよんだりとか、現在時刻を取得したりとか、JSでソースが掛けたりとかいろいろあります。


関数の使い方ですが、何気にCtrl+Fを押すと関数利用のヘルパが出てきてあとはなんとなくいじればわかります。
なかなか芸が細かい。


詳しくは
http://jakarta.apache.org/jmeter/usermanual/functions.html


(Shouta)

DelayedObserver

とあるやりとりで、Rubricksインクリメンタルサーチのライブラリはないのか、という話がありました。結論としては、ないのです。サブプロジェクトのspinelzにもありません。
しかし、script.aculo.usのライブラリを使えば普通にできる(はず)です。
あまり情報がないようなので書いておきます。

aculo.usのライブラリにForm.Element.DelayedObserverというのがあります。(control.jsに入っているはず)

そもそもprototype.jsにForm.Element.Observerというのがあって、任意のフォーム要素を監視して、要素に変更があった場合に実行するコールバックを指定できます。DelayedObserverはその名の通り、それの遅延時間を指定できるようにしたものです。
こんな↓感じで、テキストが変更されてから2秒後にアラートを出すことができます。

<input id='target_field' type='text' />

これのalertしてるところでprototypeの機能でnew Ajax.Updater(...)な感じに書けばインクリメンタルサーチになると思います。

以下、くどいかもしれませんが。
なぜ、Delayedにしなきゃいけないの?という疑問が沸く方もいるかもしれません。

続きを読む

todo_list_0.1.0リリース

Todoリストコンポーネントを新たに公開しました。
http://rubyforge.org/frs/?group_id=1494&release_id=8413

Todo Listコンポーネントはユーザ個々人のTodoリストを管理する機能を提供します。

  • ユーザは新たなTodoリストの作成や完了ができます。
  • ドラッグアンドドロップスタイルでTodoリストの整理をすることができます。
  • Todoリストに完了予定日を設定することでカレンダーとの連携やメール通知ができます。

なお、メール通知の機能はBackgrounDrbを使っているため、別途サーバ起動が必要です。
詳しくは下記サイトを参照。

http://dev.rubricks.org/wiki/RubricksComponentTodoListJa

どうぞ試してみてください。
バグ報告等も歓迎です。

(Shouta)

Rails1.2rc1 追加機能の斜め読み

Rails1.2rc1がでました。DHH氏がブログで概要を書いています。
http://weblog.rubyonrails.com/2006/11/23/rails-1-2-release-candidate-1
斜め読みした感じ、こんなことが書いてあった気がします。

RESTフレームワークの追加

RubyKaigiでもプレゼンしてたActiveResourceのことでしょうか?(違う?)
本来HTTPはCRUDだ、という考えに基づいているような感じだったかと。

多少理想的過ぎる感もあるけど、scaffoldもついてて便利だし、極度にシンプルだし今後広がっていくのかな。

respond_toの拡張子対応

respond_toという機能が1.1から追加されてました。Acceptフィールドを見てレンダリングするViewを切り替えるような機能だったと思います。1.2からは更に補強されて拡張子に対応したようです。

マルチバイト文字対応

今まではUnicodeで3バイト文字が混じったりすると文字列操作がうまく行かなかったのが直るようです。

ActiveSupport::Multibyteで実現されてるようですが、これをうまいこと拡張すれば様々なエンコーディングに対応できるようにしてあるようです。SJISとか必要なら勝手に拡張して作ってコミットして!という感じでしょうか。
今までまともに動く環境がUnicodeオンリーだったことを考えると、マルチバイト圏としてはかなり大きいかもしれない。

Routes周りの仕様変更

Routes周りは丸々書き直しているようです。確かにあの辺りはevalやり過ぎでアクロバティックだったし、セキュリティホールも出ちゃってたし。

その関係でピリオドとセミコロンがセパレータとして捉えられるように仕様変更があったみたいです。
routes.rbに「/download/:file」と書いても「/download/history.txt」にはマッチしなくなるみたいです。「:requirements => { :file => /.*/ }」を追加すれば行けるみたいです。地味ですが、routesでマジックをバリバリ書いてる場合は影響あることが多いかも。

Autoload周りの仕様変更

requireで明示的に宣言しないとRubyの標準ライブラリにアクセスできなくなったようです。(逆?)

また、モジュール使って「Accounting::Subscription」を呼ぼうとしても「app/models/accounting/subscription.rb」を見るんじゃなくて、「app/models/subscription.rb」を見に行くらしい。どうしてもサブフォルダ配下を見に行かせたい場合はenvironment.rbにaccountingディレクトリを個別に登録しなくちゃいけないみたい。
ちょっと使いづらくなった感もありますがこれもセキュリティ対策なんでしょうか。

(2006/12/5追記)

モジュール使って「Accounting::Subscription」を呼ぼうとした際に、今まではmodels配下のいずれかのサブディレクトリにsubscription.rbがあれば、とりあえずそれを見ていたようです。そこをちゃんとして、「models/accounting/subscription.rb」のみを見に行くようになった、と。
今までの仕様に依存しているアプリケーションがあったら、environment.rbに個別登録しなくてはならないようです。
影響は少ないかな??



ちなみに微妙に違う話ですが、10月頃にtrunkでcomponentsを動かしたときは従来通り「Accounting::Subscription」で「components/accounting/subscription.rb」を見てました。

Prototype周りの仕様変更

Formをシリアライズするときにdisabledなフィールドをポストしなくなるようです。これはRubricksにも影響ありそうだなぁ。地味にきつい。
というか、これってRailsのhelperとかじゃなくて、prototype.jsのFormクラスの仕様変更ですね。あと、Elementクラスとかの可変長APIが固定長になったりとかもあるらしいです。

ActionMailer周りの仕様変更

全てのMIMEがデフォルトでver1.0になったそうです。今までがどうだったのかを把握してないので、ほうそうですか、という感じです。



斜め読みなので内容はあまり信用しないで原文を読んでください。
おかしいところあったら教えてください。

(Shouta)

10分で作るTODOリストコンポーネント on Rubricks

Rubricks 0.4にてコンポーネントを作成するためのScaffoldジェネレータを追加いたしました。
このScaffoldを使ったTODOリストコンポーネントを作る動画を作成いたしましたので、公開させていただきます。
http://rubricks.org/scaffold.html

コメントもなにもなく、ひたすらコンポーネントを作成する動画になっています。
動画の概要は次の通りです。

  • Rubricksの起動を確認
  • テーブルを作成
  • Scaffoldを実行
  • 動作確認
  • メッセージを国際化
  • ブロックを作成
  • 動作確認

コンポーネントの作成時間は約10分でした。

Rubricks0.3リリース

Rubricks0.3をリリースしました。
カレンダー機能をコアに追加しました。
まだ部品という感じなので何ができるわけでもないのですが、今後スケジューラやTodoなんかを作るときに利用する感じになると思います。

たぶん、0.4リリースももうすぐです。
0.4にはダッシュボードが入る予定です。Macみたいな。

http://rubyforge.org/frs/?group_id=1494

(Shouta)

日本Rubyカンファレンス2006参加予定

日本Rubyカンファレンス2006のライトニングトークスでRubricksを紹介させていただけることになりました。
5分間でどこまでできるか難しいところですが、デモ中心に紹介したいと思っています。

それにしてもRuby作者、Rails作者の前でプレゼンすることになるとはなぁ。

http://jp.rubyist.net/RubyKaigi2006/program0611.html#l23

Shouta