2017-03-14 9 views
1

Gatlingシミュレーション用のJsonPathオブジェクトを検証しようとしていますが、null以外のオブジェクトに対してはうまく動作していますが、「null」オブジェクトでは失敗しています。JsonPathでヌルオブジェクトを確認する

実際には、文字列「null」とオブジェクトnullの比較が失敗します。この状況をどうすれば処理できますか?

我々は

failed: jsonPath($.userId).find.is(null), but actually found null 

運などのエラーを取得し、以下のように

.check(jsonPath("$.userId").ofType[Any].is(null)) 

.check(jsonPath("$.userId").ofType[String].is("null")) 

OR

をエラーをチェックされますが、それはガトリングチェックのように思える

答えて

1

私の最初のものよりも良い答えは次のようになります。

jsonPath("$.userId").ofType[Option[String]].not(None) 

は結局のところ、これはスカラ座です。ここではnullにはお気軽にはいません。

GatlingにOptionJsonFilterが足りないため、残念ながら、これは機能しません。しかし、書くことは難しいことではありません:おかげ@Lukeは

+0

implicit def optionJsonFilter[T : JsonFilter] : JsonFilter[Option[T]] = { new JsonFilter[Option[T]] { def filter = { case null => None case other => { val subfilter : JsonFilter[T] = implicitly Some(subfilter.filter(other)) } } } } 

(。それは未来だとガトリングがこれを修正した場合は、編集にこれを実行してください)、ガトリングHTTPSのPRをpraposeしてください:// githubの。 co.jp/gatling/gatling/issues/2997#issuecomment-307425988 –

+0

完了:https://github.com/gatling/gatling/issues/3342 –

+0

ありがとう、本当にありがとうございます_/\ _ –

0

システムがセットアップされていないハンドルnull非常によく;すべてがOptionを使用すると仮定していますが、それはそのJSON処理の仕組みではありません。

さらに一般的なvalidate()メソッドを使用してこれを修正することができます。その後

def notNull[T] = new Validator[T] { 
    val name = "notNull" 
    def apply(actual : Option[T]) : Validation[Option[T]] = { 
    actual match { 
     case Some(null) => Failure("but it's so null you guys") 
     case _   => Success(actual) 
    } 
    } 
} 

:まず、単純なバリデータを定義

.check(jsonPath("$.userId")).validate(notNull[String]) 
関連する問題