2011-12-06 64 views
3

memcached telnetインターフェイスコマンド、特にflush_allを実行するためにbeanshellでjmeterサンプラーを作成しようとしています。これは、各テストの後にキャッシュをクリアするために必要です。テストが失敗すると、すぐにテストが失敗します。JMeter - beanshellを使用してtelnetでコマンドを実行します。

import org.apache.commons.net.telnet.TelnetClient; 

TelnetClient telnet = new TelnetClient(); 
telnet.connect("memcachedServer.dev", 11211); 

//InputStream in = telnet.getInputStream(); 
PrintStream out = new PrintStream(telnet.getOutputStream()); 

out.println("flush_all\r"); 
out.println("quit\r"); 

telnet.disconnect(); 

問題なく実行するようだが、キャッシュがクリアされません。

は、私は、次のコードを持っています。私は "\ r"の有無にかかわらずコードを試しましたが、いずれの方法でも動作しません。

何が問題なのですか?

おかげで、エイドリアン

+0

memcacheサーバー上のログはありますか?あなたのプログラムから完全な出力が助けになるかもしれません。 –

答えて

0

スクリプト/端末emulateingは問題となり得ます。 コードが実行され、コマンド "flush_all"が表示されますが、入力/改行コマンドが処理されていないようです。

あなた

のために働くかもしれない2つのオプションがここにありますは、Telnet経由キャリッジリターンを送信する方法についての記事です。

How to send carriage return over telnet?

それとも、あなたは私が余分なLIBSに組み込まれていると思うのSSHのJMeterプラグイン、とのより多くの運を持っているかもしれないが、そうでない場合は、私はあなたのリンクを送信することができます。 これはあなたがログインし、指定されたdirでコマンドを実行することを可能にします。その単純できれいできれいです

+0

リンクが壊れた場合にそのリンクの関連部分を引用してください –

+0

申し訳ありません、良い点Johannes、telnetのenterキーは\ または\ r \ n のいずれかを送信するか、またはtelnetが接続する前にtelnetコマンド "toggle crlf"を使用してに転送してください – Dan

1

TCP Samplerを使用しない理由は?

flush_all${CR}${LF} 
quit${CR}${LF} 

  1. エリア「を送信するためにテキスト」に以下の行を入れて
  2. 設定のホストとポート
  3. を(あなたがキャッシュをフラッシュする必要があります)テスト計画にTCPサンプラーを追加します。

  4. Beanshell PreProcessorをTCPサンプラーの子として追加
  5. プリプロセッサの "スクリプト"領域に次のコードを入力してください:

    vars.put("LF",URLDecoder.decode("%0D", "ASCII")); 
    vars.put("CR",URLDecoder.decode("%0A", "ASCII")); 
    

より詳細な情報については、How To Send Control Characters Using The JMeter TCP Sampler?ガイドを参照してください。