2017-03-14 9 views
1

Ich versuche, einige JsonPath-Objekte für Gatling-Simulationen zu validieren, und es funktioniert gut für Nicht-Null-Objekte, aber es ist für "Null" -Objekte fehlgeschlagen.Überprüfen von Null-Objekten in JsonPath

Eigentlich die Zeichenfolge "Null" und Objekt Null Vergleich erhalten gescheitert, wie kann ich mit dieser Situation umgehen?

Wir prüfen Fehler wie unten,

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

ODER

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

Aber bekommen Fehler als

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

irgendein Glück

Antwort

1

Eine bessere Antwort als meine erste wäre:

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

Immerhin ist dies Scala; Wir sind nicht freundlich zu null hier in der Nähe.

Leider funktioniert das nicht, weil Gatling JsonFilter für Option fehlt. Nicht schwer zu schreiben, aber:

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

(Wenn es die Zukunft ist und Gatling hat dieses Problem behoben, bitte Bearbeiten.)

+0

Dank @Luke, prapose bitte ein PR für Gatling https: // GitHub. com/gatling/gatling/issues/2997 # issementcomment-307425988 –

+0

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

+0

Danke, ich schätze deine Bemühungen wirklich _/\ _ –

0

Es scheint, wie der Scheck Gatling System ist nicht eingerichtet t o Handle null sehr gut; Es wird angenommen, dass alles Option verwendet, aber so funktioniert seine JSON-Handhabung nicht.

Sie können jedoch die allgemeinere Methode validate() verwenden, um dies zu beheben. Zunächst eine einfache Prüfung definieren:

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

Dann:

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