1

問題は簡単です。応答からいくつかのデータを抽出するために使用される正規表現があります。それはそのように見えます:

<input type="hidden" +name="reportpreset_id" +value="(\w+)" *>${reportPresetName}</td>

問題は、変数${reportPresetName}に括弧やドットなどの正規表現で使用される文字が含まれている可能性があることです。この変数を(に基づい
) とで囲んでみましたが、明らかにこれらのマーカーは機能しません(Javaがこのマーカーをサポートしているため、混乱しています)。そのマーカーを追加しているときでも、この式は 変数のコンテンツに対して失敗します(それらのマーカーなしで機能していた場合でも)。\Q\E${reportPresetName}

JMeterの関数のリストを確認しましたが、有用なものは見つかりませんでした。JMeterで正規表現文字をエスケープする方法を知っている人はいますか?


更新:これを
使用していて、アサーションを使用すると失敗します。「結果ツリーの表示」のアサーションログから正規表現のコピーを実行し、記録された応答データでテストすると、機能します。したがって、JMeterのある種のバグのように見えます。\Q\E

4

3 に答える 3

3

Jmeterは、RegexpExtractorおよびRegexpTesterの正規表現エンジンとしてjakartaOROを使用します。

ただし、HTML/テキストビューアでの検索にはJava正規表現エンジンを使用します。

読む:

解決策は、正規表現の後にGroovyを使用してJSR223ポストプロセッサを追加することです。これにより、変数が抽出され、次のコマンドを使用して正規表現文字がエスケープされます。

org.apache.oro.text.regex.Perl5Compiler.quotemeta(String valueToEscape)

次のバージョン2.9の時点で、これを行うための新しい関数が作成されました。

  • __escapeOroRegexpChars(エスケープする文字列、変数名)
于 2012-11-21T06:48:43.273 に答える
1

\Q\EJavaで動作します。パターンを参照してください

(\\w+)ただし、Javaではバックスラッシュ文字を2倍にするために使用するため、および、もちろん、\\Qおよびを使用する必要がある場合があります\\E

私はあなたの文脈を理解していないので、あなたの場合はよくわかりません(これまでJMeterを使用したことはありません)。

于 2012-11-20T12:10:15.947 に答える
0

JMeterがサポートしていない場合(サポート\\Q\\Eているかどうかはわかりませんが...)、次のように文字列を文字に分割し、各文字をエスケープされたシーケンスに置き換える独自の関数/手順を作成できます。

  • 文字がの場合は、次の\ように置き換えます\\\\
  • それ以外の場合は、文字の前にプレフィックスを追加します\\

これは最適な方法ではありませんが、必要に応じて確実に機能します。


たとえば入力用

This is-a\string 12&$34|!`^5

あなたが得るでしょう

\\T\\h\\i\\s\\ \\i\\s\\-\\a\\\\s\\t\\r\\i\\n\\g\\ \\1\\2\\&\\$\\3\\4\\|\\!\\`\\^\\5
于 2012-11-20T13:13:14.480 に答える