CherryPy - Testen
Testen ist ein Prozess, bei dem die Anwendung aus verschiedenen Perspektiven durchgeführt wird, um -
- Hier finden Sie die Liste der Probleme
- Finden Sie Unterschiede zwischen dem erwarteten und dem tatsächlichen Ergebnis, der Ausgabe, den Zuständen usw.
- Verstehen Sie die Implementierungsphase.
- Finden Sie die Anwendung nützlich für realistische Zwecke.
Das Ziel des Testens besteht nicht darin, den Entwickler zu beschuldigen, sondern Tools bereitzustellen und die Qualität zu verbessern, um den Zustand der Anwendung zu einem bestimmten Zeitpunkt abzuschätzen.
Tests müssen im Voraus geplant werden. Dies erfordert die Definition des Testzwecks, das Verständnis des Umfangs der Testfälle, die Erstellung der Liste der Geschäftsanforderungen und die Kenntnis der Risiken, die mit den verschiedenen Phasen des Projekts verbunden sind.
Testen ist definiert als eine Reihe von Aspekten, die auf einem System oder einer Anwendung validiert werden müssen. Es folgt eine Liste dercommon test approaches - -
Unit testing- Dies wird normalerweise von den Entwicklern selbst durchgeführt. Damit soll überprüft werden, ob eine Codeeinheit wie erwartet funktioniert oder nicht.
Usability testing- Entwickler vergessen normalerweise, dass sie eine Anwendung für Endbenutzer schreiben, die keine Systemkenntnisse haben. Usability-Tests bestätigen die Vor- und Nachteile des Produkts.
Functional/Acceptance testing - Während Usability-Tests prüfen, ob eine Anwendung oder ein System verwendbar ist, stellen Funktionstests sicher, dass alle angegebenen Funktionen implementiert sind.
Load and performance testing- Dies wird durchgeführt, um zu verstehen, ob sich das System an die durchzuführenden Last- und Leistungstests anpassen kann. Dies kann zu Änderungen an der Hardware, zur Optimierung von SQL-Abfragen usw. führen.
Regression testing - Es wird überprüft, ob aufeinanderfolgende Releases eines Produkts keine der vorherigen Funktionen beeinträchtigen.
Reliability and resilience testing - Zuverlässigkeitstests helfen bei der Validierung der Systemanwendung mit der Aufteilung einer oder mehrerer Komponenten.
Unit Testing
Photoblog-Anwendungen verwenden ständig Komponententests, um Folgendes zu überprüfen:
- Neue Funktionen funktionieren korrekt und wie erwartet.
- Bestehende Funktionen werden durch die neue Code-Version nicht beeinträchtigt.
- Mängel sind behoben und bleiben behoben.
Python wird mit einem Standard-Unittest-Modul geliefert, das einen anderen Ansatz für Unit-Tests bietet.
Gerätetest
unittest basiert auf JUnit, einem Java-Unit-Test-Paket, das von Kent Beck und Erich Gamma entwickelt wurde. Unit-Tests geben einfach definierte Daten zurück. Scheinobjekte können definiert werden. Diese Objekte ermöglichen das Testen anhand einer Schnittstelle unseres Designs, ohne sich auf die Gesamtanwendung verlassen zu müssen. Sie bieten auch die Möglichkeit, Tests im Isolationsmodus auszuführen, einschließlich anderer Tests.
Definieren wir eine Dummy-Klasse folgendermaßen:
import unittest
class DummyTest(unittest.TestCase):
def test_01_forward(self):
dummy = Dummy(right_boundary=3)
self.assertEqual(dummy.forward(), 1)
self.assertEqual(dummy.forward(), 2)
self.assertEqual(dummy.forward(), 3)
self.assertRaises(ValueError, dummy.forward)
def test_02_backward(self):
dummy = Dummy(left_boundary=-3, allow_negative=True)
self.assertEqual(dummy.backward(), -1)
self.assertEqual(dummy.backward(), -2)
self.assertEqual(dummy.backward(), -3)
self.assertRaises(ValueError, dummy.backward)
def test_03_boundaries(self):
dummy = Dummy(right_boundary=3, left_boundary=-3,allow_negative=True)
self.assertEqual(dummy.backward(), -1)
self.assertEqual(dummy.backward(), -2)
self.assertEqual(dummy.forward(), -1)
self.assertEqual(dummy.backward(), -2)
self.assertEqual(dummy.backward(), -3)
Die Erklärung für den Code lautet wie folgt:
Das unittest-Modul sollte importiert werden, um Unit-Test-Funktionen für die angegebene Klasse bereitzustellen.
Eine Klasse sollte durch Unterklasse unittest erstellt werden.
Jede Methode im obigen Code beginnt mit einem Worttest. Alle diese Methoden werden von unittest handler aufgerufen.
Die Assert / Fail-Methoden werden vom Testfall aufgerufen, um die Ausnahmen zu verwalten.
Betrachten Sie dies als Beispiel für die Ausführung eines Testfalls -
if __name__ == '__main__':
unittest.main()
Das Ergebnis (Ausgabe) zum Ausführen des Testfalls lautet wie folgt:
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
Funktionsprüfung
Sobald die Anwendungsfunktionalitäten gemäß den Anforderungen Gestalt annehmen, kann eine Reihe von Funktionstests die Richtigkeit der Anwendung in Bezug auf die Spezifikation überprüfen. Der Test sollte jedoch für eine bessere Leistung automatisiert werden, was die Verwendung von Produkten von Drittanbietern wie Selen erfordern würde.
CherryPy bietet integrierte Funktionen wie Hilfsklassen, um das Schreiben von Funktionstests zu vereinfachen.
Lasttest
Abhängig von der Anwendung, die Sie schreiben, und Ihren Erwartungen hinsichtlich des Volumens müssen Sie möglicherweise Last- und Leistungstests durchführen, um potenzielle Engpässe in der Anwendung zu erkennen, die verhindern, dass sie ein bestimmtes Leistungsniveau erreicht.
In diesem Abschnitt wird nicht detailliert beschrieben, wie ein Leistungs- oder Auslastungstest durchgeführt wird, da er aus dem FunkLoad-Paket stammt.
Das grundlegende Beispiel für FunkLoad lautet wie folgt:
from funkload.FunkLoadTestCase
import FunkLoadTestCase
class LoadHomePage(FunkLoadTestCase):
def test_homepage(self):
server_url = self.conf_get('main', 'url')
nb_time = self.conf_getInt('test_homepage', 'nb_time')
home_page = "%s/" % server_url
for i in range(nb_time):
self.logd('Try %i' % i)
self.get(home_page, description='Get gome page')
if __name__ in ('main', '__main__'):
import unittest
unittest.main()
Hier ist eine detaillierte Erklärung des obigen Codes -
Der Testfall muss von der FunkLoadTestCase-Klasse erben, damit FunkLoad seine interne Aufgabe erfüllen kann, um zu verfolgen, was während des Tests passiert.
Der Klassenname ist wichtig, da FunkLoad anhand des Klassennamens nach einer Datei sucht.
Die entworfenen Testfälle haben direkten Zugriff auf die Konfigurationsdateien. Die Methoden Get () und post () werden einfach für den Server aufgerufen, um die Antwort zu erhalten.