2017-03-16 3 views
1

私はテストケースを実行しており、groovyを使用してデータをアサートしています。失敗したすべてのメッセージをhtml junit generate reportに印刷したいと思います。すべてのアサーションエラーメッセージをSoapUIのHTMLレポートに出力する方法

サンプルコード

import groovy.json.JsonSlurper 

    def ResponseMessage = messageExchange.response.responseContent 
    def jsonString = new JsonSlurper().parseText(ResponseMessage) 

    assert !(jsonString.isEmpty()) 
    assert jsonString.code == 200 
    assert jsonString.status == "success" 

    def accountInfo = jsonString.data 
    assert !(accountInfo.isEmpty()) 

    def inc=0 

    //CHECKING LANGUAGES IN RESPONSE 
    if(accountInfo.languages.id!=null) 
    { 

      log.info("Language added successfully") 
    } 
    else 
    { 

     log.info("Language NOT added.") //want to display this in html report 
     inc++ 

    } 

    if(accountInfo.educations!=null) 
     { 

     log.info("Educations added successfully") 
     } 
    else 
    { 

    log.info("Educations NOT added.") //want to display this in html report 
    inc++ 

    } 

assert inc<=0,"API unable to return all parameters, Please check logs" 

シナリオ

テスト条件が一致するとELSE に行っていない場合は私がここでやっていることは、ですが、私はやる変数INCの増分1で終わるので、inc> 0ならテストに失敗します。テストはそれがAPI unable to return all parameters, Please check logs

と呼ばれる1つのメッセージのみを表示できなかった。しかし、私がしたいことのためならばHTMLレポートに各 IF条件のメッセージを表示する場合のJUnitスタイルのHTMLで

レポート

は、レポートを生成しましたいかなる条件もELSEセクションに入ります。ポインタの

答えて

1

カップル:

  • アサートが最初の失敗で停​​止し、これだけ失敗メッセージは、JUnitのレポートの一部です。ユーザが現在の応答に対してさらなる検証失敗があるかどうかを知ることができないことを意味する。
  • if..elseのメッセージは、junit report
  • の一部ではありません。これらのメッセージをすべて収集し、最後に収集されたエラーメッセージを表示する必要があります。
  • 以下の解決策では、変数messagesを使用して、それぞれの失敗を追加して最後に表示します。この方法では、OPが要求したことが望ましい場合は、すべての失敗をレポートに表示することができます。
  • ユーザーも

    if (messages) throw new Error(messages.toString())assertの文から離れての文の下に使用して、レポート内のメッセージを表示することができ

スクリプトアサーション

import groovy.json.JsonSlurper 


//check if the response is empty 
assert context.response, 'Response is empty or null' 

def jsonString = new JsonSlurper().parseText(context.response) 

def messages = new StringBuffer() 
jsonString.code == 200 ?: messages.append("Code does not match: actual[${jsonString.code}], expected[200]\n") 
jsonString.status == "success" ?: messages.append("Status does not match: actual[${jsonString.status}], expected[success]\n") 

def accountInfo = jsonString.data 
accountInfo ?: messages.append('AccountInfo is empty or null\n') 

def inc=0 

//CHECKING LANGUAGES IN RESPONSE 
if(accountInfo.languages.id) { 
    log.info('Language added successfully') 
} else { 
    log.error('Language NOT added.') //want to display this in html report 
    messages.append('Language not added.\n') 
    inc++ 
} 

if(accountInfo.educations) { 
    log.info('Educations added successfully') 
} else { 
    log.error('Educations NOT added.') //want to display this in html report 
    messages.append('Educations NOT added.\n') 
    inc++ 
} 

//inc<=0 ?: messages.append('API unable to return all parameters, Please check logs.') 
//if(messages.toString()) throw new Error(messages.toString()) 
assert inc<=0, messages.append('API unable to return all parameters, Please check logs.').toString() 
+0

あなたの与えられた解決策は、私のために正常に動作します。アサーションが失敗したとしても、私のテストケースは失敗していません。アサーションまではすべて正常に動作します。しかし、私はjunitのhtmlレポートを見るとき。ステータス=パスを示します。私が望むのは、アサーションが失敗したときにレポートが失敗し、失敗したレポートをすべてレポートに出力するということです。 –

+0

そのまま使用しましたか?あなたが意図したすべてのメッセージを表示しましたか?あなたはSoapUI自身と一緒にそれを試すことができましたか? – Rao

+0

答えの中で 'if(messages)'を 'if(messages.toString())'に変更しました。この最新の回答をお試しください。 – Rao

関連する問題