« July 2008 | Main | September 2008 »

August 2008

2008.08.31

VMwareのゲストOSに対してSSHでアクセス

VMware上で動作させているゲストOSに対してSSHでアクセスする場合、

・ホストOSを稼働させている端末からアクセスする場合
・ブリッジ接続でネットワークを接続している場合

は特に悩むことなくアクセス可能。で、はまったのが、NATでネットワークを接続し、かつ、ホストOSを稼働させている端末とは異なる端末からアクセスする場合。セグメントが違っているので、そのままではアクセスできません。

(VMware) NATを設定してsshでログイン、あるいはVMware Serverの仮想マシンに外部からアクセスする SSH編を参考にセットアップ。

ホストマシンのIPアドレスに対してアクセスし、それをVMwareがフォワーディングするような感じですか。なので、例えば複数のゲストOSを同時に起動してそれぞれにSSHでアクセスする場合、ホストマシンに対してsshでアクセスする際のポート番号を変える必要があります(例えば、ゲストOS1に対してはポート22でアクセスし、ゲストOS2に対してはポート10022でアクセス)。

※ポートフォワーディングする際に、転送先のIPアドレスも指定する必要があるので、ゲストOSはdhcpではなく固定IPアドレスを割り当てた方が無難でしょう。

| | Comments (0) | TrackBack (0)

2008.08.30

VMwareのDHCPのセグメントを変更

VMwareでゲストOSのネットワークをNATにした場合、デフォルトではVMnet8のネットワークアダプタを経由してDHCP(ホスト側のVMware用DHCPサーバ)によりIPアドレスが割り振られます。

通常の使用においてはまず問題になることはないと思いますが、会社等でVPNが構築されている場合、セグメントがバッティングしてしまうというケースも。そういう時は、VMnet8(およびVMwareDHCPサーバ)のセグメントを変更すればOK。

VMware Playerを使用中の場合、C:\Program Files\VMware\VMware Player\vmnetcfg.exeを実行してHost Virtual Network MappingタブでVMnet8(VMware Network Adapter VMnet8)のSubnetを変更すればOK。

もしかすると、ホスト側のネットワークアダプタのIPアドレスも変更する必要があるかも知れません(先にホスト側のIPアドレスを変えてしまったので・・・(^^;

vmware updateでネットワークセグメント変更を元に戻す方法 あたりが画像付きで詳しく説明されております。ただ、このページからすると、先にホスト側のIPアドレスを変更しておく必要があるのかも知れません。

| | Comments (0) | TrackBack (0)

2008.08.27

JExcelAPI 日付のセット

JExcelAPIで日付を(日付型として)セルにセットする場合。

jxl.write.DateFormat df = new jxl.write.DateFormat("yyyy/MM/dd");
DateTime time = new DateTime(col++, row, new java.util.Date(), new WritableCellFormat(df));

といった感じで、WritableCellFormatを明示的に指定する必要があるようです。

| | Comments (0) | TrackBack (0)

2008.08.19

TeedaでDataSourceを取得

基本はS2Daoで事足りつつ・・・動的にテーブルを切り替えたい場合(例えば、PostgreSQLでパーティショニングテーブルを使用していて、親テーブル経由ではなく子テーブルに直接データを登録したいような場合)、S2Daoではなかなか難しいケースも。

そんなときは、Connectionを用いてPreparedStatement等を直接使用すればどうとでもなるわけで。

参考:S2Daoで使用しているコネクションを取得する方法

public fieldとして定義し、@Bindingアノテーションを組み合わせて、

@Binding("dataSource")
public DataSource dataSource;

とか言う感じで定義しておくとDIしてくれるので、後はgetConnection()でコネクションを取得していかようにでも(closeするのを忘れないようにしなければなりませんが)。

Continue reading "TeedaでDataSourceを取得"

| | Comments (0) | TrackBack (0)

2008.08.18

lha on Linux

ディストリビューションによってはaptなどでサクッとインストールできるようですが、CentOS(5.2)においては残念ながら見あたらないようで(yum search lha で検索しても、フロントエンドしか見あたらない)。

ってことで、http://sourceforge.jp/projects/lha/ にて公開されている1.14i-ac20050924p1のソースをダウンロードし、コンパイル。

# wget http://iij.dl.sourceforge.jp/lha/22231/lha-1.14i-ac20050924p1.tar.gz
# tar zxvf lha-1.14i-ac20050924p1.tar.gz
# cd lha-1.14i-ac20050924p1
# ./configure
# make
# make install

まぁ、Linuxでlzhを展開することはほとんどないような気もしつつ(^^;

| | Comments (0) | TrackBack (1)

2008.08.15

JMeter : バッチファイルからの実行

JMeterは-nオプションを指定して実行すると、non-guiモードで動作します。なので、

java.exe -jar ApacheJMeter.jar -n -t test.jmx

といった感じで実行すると、バッチファイルからtest.jmxで記述したテストの自動実行を行うことができます。

java.exe -jar ApacheJMeter.jar -n -t test.jmx -l fuga.txt
のように-lオプションを指定すると、動作ログを出力することができます(ログの内容は、おそらくjmeter.propertiesで定義されている状態に準拠しているかと)。

また、スレッドグループのスレッドプロパティにおいて、


  • スレッド数:${__P(threadcount,1)}
  • ループ回数:${__P(loopcount,1)}

という風に記述しておくと、
java.exe -jar ApacheJMeter.jar -n -t test.jmx -l fuga.txt -Jthreadcount=10 -Jloopcount=5

と、実行時に動的に切り替えることが可能となります。

これらを組み合わせると、1スレッド⇒5スレッド⇒10スレッド⇒・・・といった感じで同一のテストシナリオでスレッド数を変えながら、それぞれのテストのログを別のファイルに保管すると言うことも可能になりますので、テストの自動化を行うことができます。

#起動時オプションに関しては2.4.7 Full list of command-line optionsに、起動時のパラメータ指定はHow do I pass parameters into my Test scripts? I want to be able to use the same script to test with different numbers of threads and loops, and I don't want to have to change the script each time.が参考になるかと。

| | Comments (0) | TrackBack (0)

2008.08.14

JMeter : カウンタ

counter関数を使う方法
例えばHTTPリクエストで

${__counter(TRUE,count)}

って感じで指定すればOK。第2引数を指定すると、その名前の変数に値がセットされるため、それ以降の処理で採番された値を使用することができます(上記の場合は${count})。なお、このカウンタは1から1ずつ増えていくという挙動しかしないため、それ以外の条件で使用する場合は「前処理のカウンタ」を使用することとなります。
ユーザ毎にカウンタを採番する場合は第1引数をTRUEに、テスト全体で共通のカウンタを使用する場合は第1引数をFALSEにするとのことです。カウンタの用途にも寄りますが、ユーザ毎に採番することの方が多い・・・のではないかと。

前処理のカウンタを使う方法
開始値や増分を指定することができるカウンタ。また、カウンタの最大値を指定することで一定の範囲内でループさせることもできます。なお、counter関数の第1引数に相当するものは「各ユーザ独立のトラックカウンタ」のチェックボックスになるかと。

| | Comments (0) | TrackBack (0)

2008.08.13

JMeter : パラメータの内容をログに出力

正規表現やXPathなどで抽出した内容をリクエストに使うことができますが、その内容をテキスト(ログ)に出力したい場合。

HTTPリクエストに与えるパラメータの部分で${someparam}という感じで指定している部分を

${__log(${someparam},,,SOMEPARAM=)}

といった感じでlog関数を使って書き換えればOK。出力結果は、(デフォルトのままの場合)jmeter.logに出力されます。

まぁ、HTTPリクエストを行った場合は、結果をツリーで表示などの画面で内容を確認することができますが(^^;;

#理想を言えば、XPathや正規表現で抽出するタイミングでその結果をログに出力できればいいのですが・・・。

| | Comments (0) | TrackBack (0)

2008.08.12

JMeter : リスナーのログ出力の設定に関して

jmeter.propertiesの設定を変更することで、リスナーのログ出力(主に設定の初期値)のパターンをいろいろと変えることができます。そのうちいくつかを。

jmeter.save.saveservice.output_format=csv
デフォルトがcsvモードになります。ただし、指定する前に既に登録(使用)されているリスナーに対しては効果がないようです(propertiesファイルを変更した後で追加したリスナーのみ有効)。

jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss.SSS
出力時刻を1970/01/01からの経過ミリ秒ではなく、実際の時刻の形式で出力することができます。ただし、日付のフォーマット処理が実行されるようになるため、クライアントのリソースをそれなりに消費してしまうかも・・・??

jmeter.save.saveservice.default_delimiter=\t
出力結果をカンマ区切りからタブ区切りに変更できそうな気がするのですが・・・テストを読み込むタイミングで例外が発生してしまいます。何か設定の仕方を間違えているのかなぁ・・・。

sample_variables=userid
こんな感じで指定すると、リクエストなどの際に使用している${userid}の値を出力することができます(任意の項目をカンマ区切りで指定することができます)。それぞれのリクエストにおいて「どのユーザの処理を行っている時の結果か」というのを補足することができるのではないかと。

| | Comments (0) | TrackBack (0)

2008.08.11

JMeter : リスト(ファイル)を用いたアサーション

ID/PWの組み合わせでリクエストを行い、認証OKならば「xxさん、ようこそ」といったメッセージを表示するページの場合、「ID/PW/名前」のいろいろな組み合わせでテストを行うことが可能です。

JMeterでファイルから読み込む方法としては、CSVRead関数、StringFromFile関数あるいはCSV Data Set Configの3つの方法があります・・・が、実際に使うことが多いのはStringFromFileではないかと。

CSVRead関数
ファイル名と列番号を指定すると、その部分の値を取得することができます。ただ、スレッドのループ毎に値を変えることができないような(スレッド1が1行目、スレッド2が2行目・・・といった感じで固定となるようです)。また、ドキュメントによると、ファイル全体をメモリ上に乗せるため大きなファイルには使用しないように、とか、CSV Data Set Config element の方が(多くの場合は)使いやすいと思うよ、とか書かれていたりします。

StringFromFile関数
こちらは、1行につき1データという感じで読み込みます(CSVのように列の概念はないようです)。ユーザパラメータで「繰り返し毎に更新」にチェックを入れておくと、スレッド1の1ループ目に1行目、2ループ目に2行目といった感じで順次読み込んでいくようになります(ただし、「ループコントローラ」のループは対象外となるので注意)。
ユーザパラメータの画面で、以下のような感じで登録します(ファイル名は絶対パスで指定することも可能です)。


  • userid : ${__StringFromFile(userid.txt,,,)}
  • password : ${__StringFromFile(password.txt,,,)}
  • username : ${__StringFromFile(username.txt,,,)}

で、HTTPリクエストで${userid}、${password}を使ってリクエストを実行し、アサーションで${username}が含まれているかどうかのチェックをすればOKです。

CSV Data Set Config
複数のStringFromFile関数を組み合わせて冒頭のようなテストを行う場合、本来はCSV Data Set Configを用いることでサクッと1つにまとめることができる・・・はずなのですが、何故か上手く動いてくれません(version 2.3.2)。現象としては、いわゆる2バイト文字を正しく読み込めない感じ。なので、2バイト文字を含んでいなければおそらく問題なく動作するはず。
例えば、CSVに3列存在して、順番にユーザID、パスワード、ユーザ名だとした場合、


  • Filename : userlist.txt
  • File encoding : MS932
  • Variable Names : userid,password,username
  • Delimiter : ,

といった感じで指定し、HTTPリクエストで${userid}、${password}を使ってリクエストを実行し、アサーションで${username}が含まれているかどうかのチェックをすればOKです。

#2バイト文字を問題なく処理できればCSV Data Set Configの方が何かと楽ではあるのですが・・・。

| | Comments (0) | TrackBack (0)

2008.08.10

JMeter : https通信のサンプリング

JMeterは、プロキシサーバとして動作することにより、http通信の内容をキャプチャしてテストシナリオの作成の支援を行うことが可能です。

しかしながら、https通信の場合、通信内容のキャプチャを行うことはできません(というか、簡単にキャプチャできてしまうとSecureな通信ではなくなってしまうわけで)。

そういう場合は、Badboyを使用するという方法があります。Badboyは、それ自身がテスト用のツールにもなっており、ブラウザコンポーネントを用いることでプロキシの設定を行うことなく(https通信を含め)データのキャプチャ等を行うことができます。

他にも、JMeterのHTTP プロキシサーバの設定でAttempt HTTPS Spoofingにチェックを入れ、プロキシに対してはhttpでアクセスするという方法もあります。この場合、ブラウザ->JMeterプロキシ間は平文で通信され、JMeter->対象サーバのところでSSL通信が行われることとなります。
ただし、ページの内部で明示的にhttps://~などといった感じでリンクが存在した場合、その部分に対しては通信できないことになってしまうため、全てのケースで適用できるというわけにはありませんが。

| | Comments (0) | TrackBack (0)

2008.08.09

JMeter : XPathとForEachコントローラ

正規表現では抽出(条件付きの抽出)が難しいような場合、XPath Extractorを使用することが可能です。特にTeedaのような、XHTMLで記述されたページの場合、XPathとの相性もいい感じとなります。

XPathを組み合わせると、例えば「テーブルの中にある画像ファイルだけを抽出」するなんてことも簡単にできます。

XPath Extractorを定義する


  • Use Tidy? :チェックを入れる(この部分はレスポンスのhtmlに応じて使い分ける必要があるかと)
  • 参照名:tdimgsrc
  • XPath Query://td/img/@src ⇒ 任意の場所にあるtd要素の子要素であるimg要素内のsrc属性の値を取得

ForEachコントローラを定義する


  • Input変数名接頭辞:tdimgsrc
  • Output変数名:tdimgsrcurl
  • Add "_" before number? :チェックあり

HTTPリクエストを作成
${tdimgsrcurl}を含めたパスを構築します。imgの部分がどのように指定されているか(絶対パス/相対パス)によって、パスの指定を工夫する必要があるかもしれません。

パスの部分も実はJMeterの関数を使用することが可能で、画像のパスが../のような感じの相対パスで指定されている場合、${__javaScript('/hoge/' + vars.get("tdimagesrc").substring(3),)}をパスに登録すると、../の部分を除去して/hoge/****といった感じのパスに変換することができます。

Continue reading "JMeter : XPathとForEachコントローラ"

| | Comments (0) | TrackBack (0)

2008.08.08

JMeter : 正規表現とForEachコントローラ

例えば、HTTPリクエストで得られた結果のhtmlから、全てのimgを取得してその画像データに対してリクエストを行いたいような場合。

まずは後処理の「正規表現抽出」機能でimgの内容を取得


  • 参照名:imgsrc
  • 正規表現:<img src="(.*)" />
  • テンプレート:$1$
  • 一致番号:-1 ※ForEachと組み合わせる場合、負の値を指定するのが重要です。

ForEachコントローラを作成


  • Input変数名接頭辞:imgsrc
  • Output変数名:imgsrcurl
  • Add "_" before number? :チェックあり

HTTPリクエストを作成
${imgsrcurl}を含めたパスを構築します。imgの部分がどのように指定されているか(絶対パス/相対パス)によって、パスの指定を工夫する必要があるかもしれません。

Continue reading "JMeter : 正規表現とForEachコントローラ"

| | Comments (0) | TrackBack (0)

2008.08.06

TracMetrixPlugin

MERGEリクエストが失敗しました の件。

 MatPlotLibのバージョンをTracMetrixPluginのページに記載されている、Recommendである0.87.7に戻す(それまでは0.91.xを使っていた)だけで問題なく動作するようになりました。

 これは一度試してNGだったような気がするんだけどなぁ・・・。もしかすると、0.91.xのフォルダ(あるいはeggファイル)のいずれかを削除し忘れていて、そちらが実行されていただけなのかも知れません。

| | Comments (0) | TrackBack (0)

2008.08.04

帰省土産

山吹色のお菓子

帰省土産に使えるかなぁ・・・さすがにやめといた方が無難か??(^^;

#さすがに超(メガ)山吹色のお菓子は単価が(汗

| | Comments (0) | TrackBack (0)

2008.08.03

TicketDeletePlugin(Trac0.11)

Trac0.11用のTicketDeletePluginは結構前にリリースされていたんですね。

 そのままだと、チケット表示のページからは削除できない(管理画面からの削除しかできない)ので、TicketDeleteプラグインのパッチを適用するといい感じです。

#TicketChangePluginの方は、まだ0.11対応版は存在しないようで・・・。

【訂正】
TicketChangePlugin ⇒ Trac-hacks Ticket #3418
にてファイルが公開されている(というか、公開された)ようです。なお、TicketDeletePluginに関しては、
TicketDeletePlugin ⇒ Trac-hacks Ticket #1749
も参照のこと。いずれもそのうちリポジトリに反映されるんでしょうか・・・。

| | Comments (0) | TrackBack (0)

« July 2008 | Main | September 2008 »