2017-03-14 1 views
1

J'essaie de valider certains objets JsonPath pour les simulations Gatling et cela fonctionne bien pour les objets non nuls, mais il échoue pour les objets "Null".Vérification des objets NULL dans JsonPath

En fait, la chaîne "null" et la comparaison d'objet null ont échoué, comment puis-je gérer cette situation?

Nous vérifions l'erreur comme ci-dessous,

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

OU

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

Mais, obtenir erreur

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

toute chance

Répondre

1

Une meilleure réponse que mon premier serait:

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

Après tout, cela est Scala; nous ne prenons pas gentiment à null ici.

Malheureusement, cela ne fonctionne pas, car Gatling n'a pas de JsonFilter pour Option. Pas difficile à écrire, si:

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)) 
     } 
    } 
    } 
} 

(Si c'est l'avenir et Gatling a fixé cela, s'il vous plaît ne pas modifier cela.)

+0

Merci @Luke, s'il vous plaît prapose un PR pour Gatling https: // GitHub. com/gatling/gatling/issues/2997 # issuecomment-307425988 –

+0

Fait: https://github.com/gatling/gatling/issues/3342 –

+0

Merci, j'apprécie vraiment vos efforts _/\ _ –

0

Il semble que le chèque Gatling le système n'est pas configuré t o gérer null très bien; il est supposé que tout utilise Option, mais ce n'est pas ainsi que sa gestion JSON fonctionne.

Vous pouvez utiliser la méthode plus générale validate() pour résoudre ce problème. Tout d'abord définir simple validateur:

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) 
    } 
    } 
} 

Puis:

.check(jsonPath("$.userId")).validate(notNull[String])