2016-03-22 6 views

Antwort

2

Ich habe das irgendwann selbst herausgefunden und es gibt zwei Komponenten für die Antwort.

Schlechte Leistung

Ich erkannte, dass meine schlechte Leistung aufgrund der synchronen Prüfung von Asynchron-APIs war. Ich verwende Scalatest zusammen mit dem eigenschaftsbasierten Testen von Scalacheck und verwende die Methode futureValue zum Blockieren von Async-Anfragen. Aus irgendeinem Grund hatte ich die interval der PatienceConfiguration auf 500ms eingestellt, und so dauerte jeder Anruf mindestens eine halbe Sekunde, obwohl die Datenbankabfragen selbst in der Regel in höchstens 20ms ausgeführt werden, und normalerweise < 10ms. Ich habe das Intervall schließlich auf 2ms heruntergesetzt, und die Leistung wurde stark verbessert.

Scalatest 3 hat eine ordnungsgemäße asynchrone Testunterstützung, obwohl die Version 3.0.0-M15 GeneratorDrivenPropertyChecks derzeit nicht async unterstützt. Dies might change.

Diagnoseprotokollierung

installierte ich den SLF4J einfache Protokollierung Backend mit dem SBT libraryDependencies Eintrag von "org.slf4j" % "slf4j-simple" % "1.7.12". Ich konnte es nicht richtig funktionieren, indem ich die simple logger properties durch application.conf setze.

Ich legte eine Java-Systemeigenschaft zu sagen SLF4J-einfach anmelden Debug-Modus org.slf4j.simpleLogger.defaultLogLevel=debug und dann test an der SBT-Eingabeaufforderung ausgeführt. Da dies zu einer absurden Menge an Ausgaben aus dem Slick-Abfragecompiler führte, setzte ich die Debugausgabe für die Logger dieses Compilers zurück auf info, wodurch die zusätzliche Ausgabe weitgehend unterdrückt wurde, indem die Eigenschaft org.slf4j.simpleLogger.log.slick.compiler=info hinzugefügt wurde. Auf diese Weise können Sie Logger-Ebenen ändern, die mit einem Präfix übereinstimmen.

Die Einstellung der Eigenschaften erwies sich als ein nicht-triviales Problem. Ich habe versucht, mehrere Ansätze:

  • die Eigenschaft über Typesafe Konfigurationseinstellung (test/resources/application.conf) durch Zusatz von org.slf4j.simpleLogger.defaultLogLevel=debugnicht Arbeit tat. Dies ist normalerweise der Fall für Dinge, die von Systemeigenschaften vor dem Analysieren der Konfiguration eingerichtet werden, also nehme ich an, dass dies für den Logger der Fall ist.

  • die Eigenschaft von der Kommandozeile einstellen, wenn SBT Inbetriebnahme gearbeitet, von SBT beginnend mit sbt -Dorg.slf4j.simpleLogger.defaultLogLevel=debug, aber nur, wenn sie mit dem SBT Einstellung fork in test := false Tests in einer nicht-gegabelten JVM ausgeführt wird.

  • Einstellung der Eigenschaft von SBT mit javaOptions += "org.slf4j.simpleLogger.defaultLogLevel=debug" tat nicht Arbeit, gegabelte JVM oder nicht.

  • Die Einstellung der Eigenschaft durch Hinzufügen von org.slf4j.simpleLogger.defaultLogLevel=debug zu test/resources/simplelogger.properties funktionierte sowohl für gegabelte JVM als auch ungeforkt.