2017-05-19 16 views
0

私はめったにスクリプトを書いていませんし、Jmeterのbeanshellを使ってreg式を使って問題があります。 基本的に、私は16桁の出力を持っています。私は文字列を検索し、2文字ごとに区切り、 '0x'の前にスペースを入れ、すべての16桁を繰り返し、最後にvars.putを使用して自己定義のパラメータにします。私はこれをbashで簡単に行うことができましたが、Beanshell Jmeterで解決策を見つけることはできませんでした。Jmeter beanshellを照合して置き換えよう

// get current date 
var d = new Date(); 
// convert to epoch 
var militime = d.getTime(); 
// convert to 16digit 
//var nowtime1 = (long.valueOf(militime) * 1000); 
var nowtime1 = militime * 1000; 

var nowtime1 = nowtime1.replace(/({0,2})/g,"x0"); //I'm unsure of the syntax here 

改善の提案はありますか?

これはをフォーマットするをsedを使用して、私のbashスクリプトからの出力例です。

1495207922508835 
0x14 0x95 0x20 0x79 0x22 0x50 0x88 0x35 

答えて

0

私はSystem.currentTimeMillis() * 1000に現在の時間の取得を簡素化します。次に、数字を文字列のように操作しようとしていますが、文字列に変換する必要があります。正規表現自体はほぼ正しいです。だから、全体のスクリプトは次のようになります。

now = "" + (java.lang.System.currentTimeMillis() * 1000); 
result = now.replaceAll("(.{2})", "0x$1 "); 

例:

now    result 
1495215390956000 0x14 0x95 0x21 0x53 0x90 0x95 0x60 0x00 
1495215441281000 0x14 0x95 0x21 0x54 0x41 0x28 0x10 0x00 
+0

確認するには、javascriptを使用してマイクロ秒単位で時間を取得する方法はありますか? – kellyin

+0

BeanShellではJavaScriptを使用できません。BeanShellはJavaのような言語です。 JavaScriptを使用する場合は、Dmitri Tが提案するように、JSR223ポストプロセッサに切り替えます。 –

0

それはJMeterのスクリプトを作成することになるとのBeanShellがantipattern何らかの形で使用して、Groovyのがあるとして代わりにJSR223 Test ElementsGroovy languageを使用することを検討すべきですリソースの消費量が少なく、パフォーマンスが大幅に向上し、Javaに準拠しています。

def now = "1495207922508835" 

def result = new StringBuilder() 
now.split("(?<=\\G..)").each { 
    result.append("0x").append(it).append(" ") 
} 
log.info(result.toString()) 

デモ:

JMeter Groovy string split and concatenate

なぜ、どのようにあなたがする必要がありますについて学ぶためにGroovy is the New Blackガイドを参照してください

が戻ってあなたの質問に来て、あなたの条件のGroovyの実装は次のようなものになるだろうJMeterテストでGroovyを使用しています。


NB:0xは本当にあなたの代わりにInteger.toHexString()方法を検討する必要があります、ヘクスに整数に変換されません加えます。

関連する問題