2016-04-22 10 views
1

soapuiのJsonレスポンスにGroovyスクリプトを使用し、そのプロパティが自分の応答に存在するかどうかを調べようとしています。 If文を以下のように使用しました。それがプロパティが存在しない場合でも、私がそれをチェックするために使用するプロパティ名は本当のステートメントだけを返します。私はここで何をしているのか分からない。Groovyスクリプトを使用してjsonレスポンスにプロパティ名が存在するかどうかを調べるには

import groovy.json.JsonSlurper 

def slurper = new JsonSlurper() 
def i = 0 

responseContent = testRunner.testCase.getTestStepByName("DAY").getPropertyValue("response") 
slurperresponse = new JsonSlurper().parseText(responseContent) 

if(slurperresponse.day_details.activities.to_locans) { 
    println "************************" 
    res = "Crew_base found" 
} else { 
    res = "Crew_base not found" 
} 
+0

印刷しましたか?たぶん長さ '' if(slurperresponse.day_details.activities.to_locans.size()> 0) 'をチェックしてみてください。なぜそれがそれのように行動するのか分からない。 –

+0

@Mikelis Baltruks、私はsize()> 0を使用していて、真のステートメントを印刷しています。実際、私の応答にはto_locansという名前はありません。どんな方法でも解決する必要がありますか?メソッドがあり、エラーが発生しました。groovy.lang.MissingMethodException:メソッドのシグネチャがありません。java.util.ArrayList.has() – Vin

+0

これは不可能です。 'size is> 0'を出力すると、何かが本当に間違っています。 :D要素(存在しない)とその長さをチェックする( 'if'文の前に)印刷を試してください。 –

答えて

1

これは、一緒に来ていくつかのことが原因です:Groovyのは、未知のキーにnull

  • Groovyのは、あなたはそれがネストされたリストを経由場合を含め、XPathのタイプ変数の参照を使用することができますを返す

    1. リストのGroovy truthyは、リストのサイズに基づいています。リストにはnullのみが含まれていても、空でない場合はtrueに評価されます。あなたは(どちらの場合も、結果はリストで見る無効なプロパティ名の有効なプロパティ名について

      Fri Apr 22 16:01:19 EDT 2016:INFO:<[email protected] elementData=[[NYP, NYP]] size=1 modCount=1> 
      

      Fri Apr 22 16:01:35 EDT 2016:INFO:<[email protected] elementData=[[null, null]] size=1 modCount=1> 
      

      :コメント上記の問題点を明らかにし

    リストの2つの項目の) - 常に常に真と評価します。あなたはday_detailsactivitiesが故に、両方のネストされたリスト(されていることがわかります、という読み

    [ 
         day_details: [ 
          [ 
           fra_status:'', block_training_day:0, holiday_name:'', activities:[ 
            [ from_location:'WAS', craft:'Conductor', departure_datetime:'2016-04-26T13:02:00-04:00', end_datetime:'2016-04-26T16:30:00-04:00', crew_base:'NYP', ends_next_day:false, description:'Unit', train_number:172, to_location:'NYP', arrival_datetime:'2016-04-26T16:30:00-04:00', zone:'Zone 2', start_datetime:'2016-04-26T12:52:00-04:00' ], 
            [ from_location:'NYP', craft:'Engineer', to_location:'WAS', zone:'Zone 2', start_datetime:'2016-04-26T17:55:00-04:00' ] 
           ] 
          ] 
         ] 
        ] 
    

    :あなたがその変数のダンプを印刷し、あなたの最後のコメントから、それはこのようになりますマップとして

    、応答内に2つのリストがあるので、activitiesの中の各マップにナビゲートし、キーが見つからない場合はnullを返し、リストに2つのnullを入れます。

    ifチェックを変更するあなたが元々意図していた通りに以下のことが働きます。これらのリストのそれぞれの最初の要素のみを考慮する必要があるという前提で):

    if (slurperresponse.day_details[0].activities[0].to_locans){ 
    
  • 関連する問題