So testen Sie ein Scheduling-Programm in PHP

8

Ich habe eine Codeigniter-App, die Ereignisse für bestimmte Daten und Zeiten in einer MySQL-Datenbank manchmal Wochen im Voraus plant, mit einem anderen Teil, der E-Mail-Erinnerungen sendet und andere Aktionen durchführt, wenn diese Daten auftreten. Wie würde man sich dem zeitbasierten Testen nähern? Gibt es eine Testsuite, die ich verwenden oder lesen könnte?

    
user61629 19.07.2013, 12:08
quelle

4 Antworten

5

Das ist etwas, über das ich eine ganze Weile nachgedacht habe - und dann habe ich mein Problem erkannt! Ich konzentrierte mich auf die Zeit, als wäre es etwas, das ich nicht kontrollieren und messen konnte. Die Zeit ist wie jede andere Berechnung in unseren Anwendungen. Zeitbasiertes Testen ist also einfach - wir müssen nur die Art und Weise ändern, wie wir darüber nachdenken - und wie wir unsere Anwendung aufbauen.

Zuallererst ist die Nummer eins, die zu tun ist, die aktuelle Zeitgenerierungssequenz zu einer Methode zu trennen. Auf diese Art und Weise können wir dies später ausspionieren (das heißt, erzeugen wir unsere eigene Methode, die immer eine vorbestimmte "Zeit" zum Testen zurückgibt). Das kann so einfach sein wie ...

%Vor%

Was ist der Vorteil: In unserem Code werden wir dies nennen, um die aktuelle Zeit für Berechnungen zu erhalten. Beim Testen können wir immer genau die gleiche Zeit generieren.

das ist wichtig - wir können immer genau die gleiche Zeit generieren, jedes Mal.

Nun bin ich mir nicht ganz sicher, wie ich das in Ihrer speziellen Anwendung umsetzen soll, aber lassen Sie mich eine "gefälschte" Anwendung erklären - und sehen Sie, ob Sie sie an Ihre Spezifikationen anpassen können.

Ok, zuerst haben wir diese Methode, die einen Eintrag in unsere Datenbank setzt, der eine "Erinnerung" für 3 Wochen von jetzt an ist.

das ist der alte Code

%Vor%

Also, wie testen wir das? Es wird offensichtlich jedes Mal anders sein?

Nun, lasst uns es aufteilen. Das ist unser neuer Code ...

neuer Code

%Vor%

Nun, wenn es um das Testen geht ... können Sie Ihre Test-Datenbank einrichten. Provozieren Sie als Nächstes die Methode _getCurrentTime (), um immer eine Ganzzahl zurückzugeben, die Sie kennen. Führen Sie dann den Befehl addReminderToDB () aus (er verwendet diese Integer-Zahl, die Sie kennen). Abschließend fragen Sie die Datenquelle ab, um zu bestätigen, dass die eingefügte Zeile über die richtigen Werte verfügt, die Sie erwarten würden.

Ich weiß, das ist nicht genau richtig mit dem, was Sie fragen, aber die Frage ist auch irgendwie vage: - / Viel Glück!

    
Aaron Saray 25.07.2013 01:23
quelle
1

Möchten Sie einen Komponententest ausführen, um zu überprüfen, ob der Code funktioniert, oder eine Produktionsumgebung testen?

Wenn Sie sicherstellen möchten, dass Ihre geplanten Aufgaben in der Produktion ausgeführt werden ... Die von mir erstellte Aufgabe schreibt jedes Mal ein Protokoll, wenn die Ausführung erfolgreich abgeschlossen wurde.

Dann testen wir es, indem wir überprüfen, ob es gelaufen ist (zB: Test, ob "tägliche" Aufgaben in den 36 Stunden ausgeführt wurden). Wenn sie nicht ausgeführt wurden, warnen wir einen Administrator.

    
Abhi Beckert 19.07.2013 14:20
quelle
1

Verwenden Sie Cron-Jobs, PHP-Live-Skripte oder JavaScript? Es gibt viele Möglichkeiten, eine geplante Zeitanwendung zu erreichen, und jeder Weg hat seine eigenen Testmethoden.

Offensichtlich, unabhängig davon, welche Lösung Sie verwenden und wie andere bereits erwähnt haben, können Sie einfach die Zeit anpassen. Ändern Sie den Wert in 1 Minute, um zu bestätigen, dass das Skript die angegebenen Funktionen korrekt ausführt.

Sobald Sie sicher sind, dass Ihr Skript korrekt funktioniert, können Sie einen letzten Test länger durchführen. Stellen Sie außerdem sicher, dass Sie eine Art Protokolldatei verwenden. Dies wird das Leben auf der Strecke viel einfacher machen, wenn Sie versuchen, Fehler zu erkennen.

Je nachdem, welche Lösung Sie verwenden, können Sie auch die Datenbank testen, wie andere bereits erwähnt haben. Dies hängt jedoch davon ab, wie Sie Ihr Ziel erreichen.

Ich hoffe, das hilft

    
user1641165 25.07.2013 03:05
quelle
1

Was wir hier machen, ist, dass wir über alle Tabellen, über alle Spalten hinweg iterieren, und wenn es eine der Datums- / Zeitspalten ist, subtrahiere die benötigte Zeit davon:

%Vor%

Fahren Sie dann wie gewohnt mit dem Testen fort - was in 5 Tagen geplant war, ist jetzt geplant.

    
Marek 26.07.2013 17:06
quelle

Tags und Links