Ich habe gerade eine Caching-Ebene in meine Webanwendung implementiert und frage mich nun, wie die Qualitätssicherung dies testen soll, da das Caching für den Benutzer transparent ist.
Eine Idee, die ich habe, besteht darin, die Protokollierung in die Methoden zu integrieren, die den Code aufrufen, der den Cache auffüllt, und aufzuzeichnen, wann ein Objekt aus dem Cache abgerufen wird und wann eine Neuerstellung aus der Datenbank erforderlich ist. Anschließend können die Tester die Protokolle anzeigen, um festzustellen, ob Beispielsweise wird ein bestimmtes Objekt alle 10 Minuten aus der Datenbank neu geladen, anstatt aus jeder Seitenansicht.
Aber kann jemand bessere Praktiken für diese Situation vorschlagen?
Antworten:
Eine Frage ist, ob der Cache selbst wirklich eine Anforderung ist, die von der Qualitätssicherung getestet werden sollte. Durch das Zwischenspeichern wird die Leistung verbessert, sodass sie den Leistungsunterschied testen können, um sicherzustellen, dass er bestimmten Anforderungen entspricht.
Aber es ist eine gute Idee, einige Tests zum Thema Caching durchzuführen, wer auch immer dafür verantwortlich ist. Wir haben Leistungsindikatoren verwendet. Wenn Ihr Cache-System diese Vorteile nutzt, sind sie unkompliziert. Wenn es eine Möglichkeit gibt, eine Zählung aus dem Cache selbst zu erhalten, ist dies eine weitere Option.
Die Verwendung Ihres Ansatzes ist auch nett. Wenn einer dieser Tests in automatisierte Tests eingebunden ist, die die Ergebnisse überprüfen, muss niemand die Protokolle durchsehen, um Antworten zu finden.
quelle
Sie haben einen Cache implementiert (ich nehme an), weil das System nicht gut genug lief. Das ist etwas, das für den Benutzer relevant ist. Hier sind Dinge, die die Qualitätssicherung überprüfen kann:
Denken Sie daran, dass es Benutzern (und damit auch der Qualitätssicherung) egal ist, wie Sie ein Problem gelöst haben. Sie kümmern sich nur darum, dass das Problem gelöst wurde und keine neuen Probleme entstanden sind. Dies gilt unabhängig davon, ob Sie das Caching implementiert, das String-Parsing verbessert, ein Hardware-Upgrade durchgeführt oder magischen Feenstaub auf den Server gestreut haben.
quelle
Das Verbergen wichtiger Geschäftslogik oder des Systemzustands in einer Blackbox erschwert die Überprüfung des korrekten Systemverhaltens. Es ist einfacher, das Verhalten einer einzelnen Komponente im System ausführlich zu testen als das gesamte System. Ich bevorzuge es, solche Dinge explizit durch einen Mechanismus aufzudecken, damit sie auf sinnvolle Weise auf Einheit / Regression / Integration / Qualitätssicherung getestet werden können.
Eine Option für einen Cache wäre, eine spezielle Seite bereitzustellen, die einige Details zum Cache enthält (Inhalt, Status usw.). Dies kann beim Debuggen in der Entwicklung und möglicherweise in der Produktion hilfreich sein. Auf dieser Seite kann die Qualitätssicherung auch Testfälle für den Cache erstellen, wenn ihnen Einzelheiten zum erwarteten Verhalten des Caches mitgeteilt werden. Die Verwendung von Leistungsindikatoren und / oder Protokolldateien zur expliziten Dokumentation des Cache-Verhaltens ist ein weiterer weniger sichtbarer, aber praktikabler Ansatz.
Beachten Sie, dass dieser Ansatz kein Ersatz für End-to-End-Leistungstests ist. Dies ist ein Mechanismus, um sicherzustellen, dass sich der Cache selbst korrekt verhält. Leistungstests sollten verwendet werden, um festzustellen, ob das Caching die beabsichtigte Auswirkung auf die Leistung hat.
Beachten Sie auch, dass das Austauschen von Systemkomponenten durch neue, die dieselbe Schnittstelle wie das Einführen eines Caches implementieren, eine destabilisierende und täuschend komplexe Änderung sein kann. Mit dem Cache-Beispiel führen Sie den Status in dem Zustand ein, der zuvor statuslos war, wodurch Fehler verursacht werden können, die schwerer zu finden oder zu reproduzieren sind. Eine solche Änderung sollte immer mit einem vollständigen Regressionstest einhergehen, um das erwartete Systemverhalten zu überprüfen.
quelle
Testleistung, wie in Andys Antwort angegeben.
Ich habe festgestellt, dass das größte Hindernis für die Implementierung von Caching (und Leistung) in vielen Organisationen in einer Umgebung besteht, in der Sie gute Leistungstests durchführen und Tests für verschiedene reale Last- und Leistungstests durchführen können.
Um dies zu erreichen, sollten Sie eine Umgebung für Leistungstests einrichten , die die Produktion so genau wie möglich und unter Berücksichtigung der Kosten widerspiegelt. Dies wird wahrscheinlich NICHT Ihre aktuelle Entwicklungsumgebung sein, die kleiner und eigenständiger sein sollte, um eine schnelle Anwendungsentwicklung zu ermöglichen. Entwicklungsumgebungen verwenden in der Regel auch weniger Caching und eignen sich daher nicht für Leistungstests.
In der Umgebung für Leistungstests sollte die App im Produktionsmodus ausgeführt werden. Sie sollten mehr als einen Server verwenden, wenn die Produktion, der Datenbankverbindungspool und das Caching für eine Produktionsumgebung usw. festgelegt werden sollen.
Sie sollten auch ein Tool in Betracht ziehen, das beim Auslastungstest hilft.
jmeter ist sehr beliebt, obwohl ich es als ziemlich unfreundlich und primitiv empfinde.
Ein anderer Weg, den ich gewählt habe, ist, einfach eine URL
curl
mit einem Ruby-Skript zu erstellen.Deutlich sein
Möglicherweise finden Sie auch die folgenden Links hilfreich:
quelle
Denken Sie daran, die Tester zu veranlassen, die Server neu zu starten und zu überprüfen, ob die von ihnen eingegebenen Daten noch vorhanden sind. Ich habe ein System gesehen, das viele Mannmonate lang getestet wurde.
Der schwierigste Teil zu testen ist , dass jedoch die Daten aktualisiert werden, gibt es nie irgendwelche out-of-date Ergebnisse aus dem Cache zurückgegeben.
Dies kann teilweise dadurch unterstützt werden, dass immer die Daten im Cache verwendet werden, um die Bestätigungsseite auszufüllen, die einem Benutzer nach einer Änderung angezeigt wird. Verwenden Sie beispielsweise nicht das Objekt, mit dem Sie die Datenbank aktualisiert haben, sondern fordern Sie die Daten aus dem Cache an, die sie dann von der Datenbank anfordern. Ein bisschen langsamer, aber viel wahrscheinlicher, dass Fehler schneller auftauchen.
quelle
Dieser hat tatsächlich eine sehr einfache Antwort und hängt mit dem Grad der Zwischenspeicherung zusammen. Was Sie feststellen werden, wenn die Zwischenspeicherung korrekt ist, ist das Fehlen von Anforderungen am Ziel der Anforderungen. Es kommt also auf den abgedroschenen QS-Satz "erwartete Ergebnisse" an.
Wenn Sie einen Cache auf der Webebene implementieren, würde ich erwarten, dass Elemente, die der Zwischenspeicherung unterliegen, nur einmal für jede getestete Benutzersitzung (wenn Sie den Client-Cache implementieren) oder einmal für mehrere Benutzer (wenn Sie einen Cache im CDN-Stil implementieren) angezeigt werden. Wenn Sie einen Cache auf der Datenebene implementieren, um allgemeine Ergebnisse zu erzielen, würde ich erwarten, dass Ihre Cache-Ebene eine hohe Cachetrefferquote aufweist und im Profilprotokoll für die Datenebene keine Abfragen vorhanden sind.
etc...
quelle
Einige Dinge werden besser von einem Programmierer getestet, vielleicht demjenigen, der den Code mit Unit-Tests geschrieben hat. Das Testen der Richtigkeit Ihres Caching-Codes ist eines dieser Dinge. (Aufgrund der Art und Weise, wie Sie diese Frage stellen, gehe ich davon aus, dass Ihre QA-Mitarbeiter die Anwendung als "Black Box" behandeln und über die externe Schnittstelle testen.)
quelle
Die Caching-Logik sollte vom Entwickler getestet werden, da die Qualitätssicherung hauptsächlich Black-Box-Tests durchführt.
Die QA kümmert sich nur um die Leistungsaspekte oder die von Ihnen implementierte Fehlerbehebung. Sie können der QA einen Mechanismus zum Aktivieren / Deaktivieren des Cachings oder einen anderen Mechanismus zur Leistungsverbesserung bereitstellen und dann den Leistungsunterschied überprüfen. Natürlich könnte QA auch einfach eine alte Version mit Ihrer leistungsverbesserten Version vergleichen.
quelle
Als ich Caching-Lösung getestet habe, haben wir implementiert, was wir im Grunde die Leistung getestet haben. Wir haben diese Caching-Lösung für XML-Ergebnisse durchgeführt und nach dem Cache dauert es sehr kurz, bis die Antwort angezeigt wird. Wir haben es auch mit dem Serverprotokoll überprüft, indem wir die Protokolleinträge überprüft haben.
quelle