2016-08-12 17 views
1

[]バイトとして文字列を治療するための試みIで始まるBeanShellPostProcessorありますLoopControllerの第二のループにJMeterのBeanShellのポストプロセッサが

result = ctx.getPreviousResult(); 
String data = result.getResponseDataAsString(); 

を、それがログにこれを与える:

ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: set Variable assignment: data: Can't assign byte [] to java.lang.String 
WARN - jmeter.extractor.BeanShellPostProcessor: Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: set Variable assignment: data: Can't assign byte [] to java.lang.String 

私はString宣言を削除する場合は、私が)...すなわちタイプについて曖昧で(そう回避するために、これを使用して)警告を得ることはありません:

data = result.getResponseDataAsString(); 

この行の前にresult.getResponseDataAsString().getClass().getName()を印刷すると、java.lang.Stringと表示されます。

JMeterでかなり新しいBeanShellが使用されていますが、そのラインの問題はかなり自信があります。

同時に、のアサインメントがString data = ...より前にある場合、それらは2番目のループ反復では印刷されません。

byte[]割り当ての試行をどのように理解/訂正すればよいですか?参考のため

:ここに私のテスト計画は次のとおりです。

enter image description here

基本的には、各サンプラーは、レスポンスボディを取得するためにresult.getResponseDataAsString()を使用して、それを「正常化」するためにいくつかの操作を行い、その後、vars.put()経由で値を設定します。 BeanShell Assertionvars.get()を使用して2つの値を取得し、それらを比較し、それに応じてFailureMessageFailureのセットを比較します。

注:PostProcessorにも同じ問題があります。

注2:String data = new String(result.getResponseData());が均等に問題がある(すなわち、同じエラー)...ないそのIだろうエンコーディング/文字セットについて明示されずbyte[]からStringを作成するため、これまで提唱。

+2

あなたのコードを試しましたが、何のエラーもありませんでした。あなたは 'ctx'を必要としませんでしたが、' prev.getResponseDataAsString() 'を直接使うことができました。 あなたのレスポンスは本当にバイナリなのでしょうか。これを試してみましょう:コード: 'SampleResult.setResponseData(" Hello ");'でBeanShellサンプラーを作成し、そのサンプラーの下にポストプロセッサーを置きます。それは同じエラーを返しますか?そうでなければ、あなたの特定のデータでは間違いなく何かを意味します。はいの場合、あなたの環境を見る必要があります。 –

+0

'prev'のヒントをありがとう。また、BeanShellサンプラーのアイデアを使用して、私の答えで述べた小さな.JMXを構築しました。あなたは私の間違いを発見するために私を助けてくれました。 –

答えて

2

私は小さな.jmxを作成し、問題を再現しました。

私はJMeterのコード(JMeterは3.0、org.apache.jmeter.extractor.BeanShellPostProcessor:63内の特定の行まで追跡:私をひっくり返した

bshInterpreter.set("data", prev.getResponseData());//$NON-NLS-1$ 

...私はVARを持っている以上のポストプロセッサでdataという名前

はJMeterのUI @もう一度見て...案の定、databyte[]として(上記の行ごとに)入力された事前定義されたスクリプトのVAR、である。

私はBeanShellのはを管理することを前提としています私のvarがStringで宣言されていないときのキャスト厳密なString宣言で、タイプ混乱が作成されました。私のスクリプトのVARの名前を変更することで解決

String localResponseData = result.getResponseDataAsString(); 

レッスンは学んだ:data(または1つの事前定義された任意の他)としてビーンシェル変数に名前を付けないでください!

+0

Woow、great find :)私は30分かけてJMeterのポストプロセスタスクがデータ変数名を使用できない理由を理解しようとしました。 – Boris

+1

もちろん、UIで定義された変数名のリストに注意を払うことで、両方とも問題を解決することができました。 - \ –

関連する問題