[]バイトとして文字列を治療するための試みIで始まるBeanShell
PostProcessor
あります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[]
割り当ての試行をどのように理解/訂正すればよいですか?参考のため
:ここに私のテスト計画は次のとおりです。
基本的には、各サンプラーは、レスポンスボディを取得するためにresult.getResponseDataAsString()
を使用して、それを「正常化」するためにいくつかの操作を行い、その後、vars.put()
経由で値を設定します。 BeanShell Assertion
はvars.get()
を使用して2つの値を取得し、それらを比較し、それに応じてFailureMessage
とFailure
のセットを比較します。
注:PostProcessor
にも同じ問題があります。
注2:String data = new String(result.getResponseData());
が均等に問題がある(すなわち、同じエラー)...ないそのIだろうエンコーディング/文字セットについて明示されずbyte[]
からString
を作成するため、これまで提唱。
あなたのコードを試しましたが、何のエラーもありませんでした。あなたは 'ctx'を必要としませんでしたが、' prev.getResponseDataAsString() 'を直接使うことができました。 あなたのレスポンスは本当にバイナリなのでしょうか。これを試してみましょう:コード: 'SampleResult.setResponseData(" Hello ");'でBeanShellサンプラーを作成し、そのサンプラーの下にポストプロセッサーを置きます。それは同じエラーを返しますか?そうでなければ、あなたの特定のデータでは間違いなく何かを意味します。はいの場合、あなたの環境を見る必要があります。 –
'prev'のヒントをありがとう。また、BeanShellサンプラーのアイデアを使用して、私の答えで述べた小さな.JMXを構築しました。あなたは私の間違いを発見するために私を助けてくれました。 –