2017-05-08 17 views
0

私はJmeterを新しくして、失敗したアサーションごとにメールを送信する方法を探しています。jmeter send emailアサーション

テスト構造:

  1. スレッドグループ:
    • トランザクション・コントローラ:
      • HTTPリクエスト:
      • HTTPリクエスト:
      • HTTPリクエスト:
  2. スレッドグループ:
    • トランザクション・コントローラ:
      • HTTPリクエスト:
      • HTTPリクエスト:
      • HTTPリクエスト:

各Http要求には応答アサーションが含まれています。トランザクションコントローラ内のすべての失敗したアサーションを含む1つの電子メールを取得して送信したいと思います。これを行う方法はありますか?私はこれを行うと

import org.apache.jmeter.assertions.AssertionResult; 


try { 
     AssertionResult[] results = prev.getAssertionResults(); 
    StringBuilder body = new StringBuilder(); 
    for (AssertionResult result : results) { 
     body.append(result.getName()); 
     body.append(result.getFailureMessage()); 
     body.append(System.getProperty("line.separator")); 
    } 
    vars.put("body", body.toString()); 
} 
catch (Throwable ex) { 
    log.error("Error in Beanshell", ex); 
    throw ex; 
} 

それだけですべて失敗したアサーションのではなく、最後に失敗したアサーションの電子メールが送信されます:私はこのコードが含まれている子ビーンプリプロセッサでスレッドグループ内のSMTPサンプラーを追加使用してみました。

答えて

0
  1. グローバルJSR223 Listenerを追加します(むしろBeanShellのよりGroovyを使用することがはるかに優れています、詳細についてはGroovy is the New Blackの記事を参照してください)
  2. 「スクリプト」領域に以下のコードを入れて(それは基本的にあなたのコードですが、

    ${body}変数から以前のサンプラーの結果を読み、それらに新しい結果を追加する改正
    import org.apache.jmeter.assertions.AssertionResult; 
    
    try { 
        AssertionResult[] results = prev.getAssertionResults(); 
    
        StringBuilder body = new StringBuilder(); 
        String previousBody = vars.get("body"); 
        if (previousBody != null) { 
         body.append(previousBody); 
        } 
        for (AssertionResult result : results) { 
         body.append(result.getName()); 
         body.append(result.getFailureMessage()); 
         body.append(System.getProperty("line.separator")); 
        } 
        vars.put("body", body.toString()); 
    } catch (Throwable ex) { 
        log.error("Error in Groovy", ex); 
        throw ex; 
    } 
    
+0

これは働いていました私のために完全に感謝! – eradicator

0

私たちは、失敗した場合にコンソールにリクエストボディ情報を出力するテストを行っています。これは個々のサンプラーに個別に追加され、きれいに動作します。このコードを更新して、コンソールに印刷する代わりに失敗メッセージを送信することができます。

//Loop through assertions and check for failed 
for (int i = 0; i < results.length; i++){ 
    if (results[i].isFailure() || results[i].isError()){ 
     failed_assertion = true; 
     System.out.println("\n********** Request Body ***************\n"+ctx.getCurrentSampler().getUrl().getPath()+ctx.getCurrentSampler().getQueryString()+'\n'+ctx.getCurrentSampler().getArguments().getArgument(0).getValue()+"\n"); 
    System.out.println("************ ERROR DETECTED ***********\n"+prev.getResponseDataAsString()+"\n****************************************\n"); 
    break; 
    } 
} 

これでうまくいかない場合は、各サンプラーでIFブロックを作成できます。彼らがやっていることに似てhere