DedSec Project

Ντετερμινιστική εισαγωγή αποτυχιών και έλεγχοι ανάκαμψης — DedSec Project

Ντετερμινιστική εισαγωγή αποτυχιών και έλεγχοι ανάκαμψης Μηχανισμός και συμβόλαιο Μια δοκιμή επαναλήψεων δεν χρειάζεται πραγματική διακοπή, τυχαίες αναμονές ή δημόσιο endpoint. Πέρνα τη…

Μηχανισμός και συμβόλαιο

Μια δοκιμή επαναλήψεων δεν χρειάζεται πραγματική διακοπή, τυχαίες αναμονές ή δημόσιο endpoint. Πέρνα τη λειτουργία ως εξάρτηση και κάνε το δείγμα να αποτύχει σε ονομασμένο βήμα. Έτσι διαχωρίζεις προσωρινή διακοπή από μόνιμο σφάλμα επικύρωσης. Η επανάληψη κάθε εξαίρεσης μπορεί να κρύψει προγραμματιστικό λάθος και να πολλαπλασιάσει επιδράσεις.

Έλεγξε αποτέλεσμα και πλήθος κλήσεων. Το τελικά σωστό αποτέλεσμα μπορεί να κρύβει υπερβολικά αιτήματα ή διπλές εγγραφές. Χρησιμοποίησε μικρό σταθερό όριο στο δείγμα και χωριστά δοκιμασμένο μονοτονικό όριο σε πραγματικούς clients. Η εισαγωγή αποτυχίας αναπαράγει συγκεκριμένη διαδρομή ελέγχου χωρίς να αντικαθιστά δοκιμή ολοκλήρωσης του πραγματικού συμβολαίου σφαλμάτων.

Τοπικό παράδειγμα

from unittest.mock import Mock

def retry_read(read, attempts=3):
    for n in range(attempts):
        try:
            return read()
        except TimeoutError:
            if n + 1 == attempts:
                raise
read = Mock(side_effect=[TimeoutError("fixture"), "result"])
assert retry_read(read) == "result" and read.call_count == 2
bad = Mock(side_effect=ValueError("invalid payload"))
try:
    retry_read(bad)
except ValueError:
    pass
assert bad.call_count == 1
print("temporary and permanent failures separated")

Έλεγχοι αποτυχίας και όρια

Πρόσθεσε εξάντληση προσπαθειών, άμεση επιτυχία και ακύρωση. Επαλήθευσε άμεση διακοπή σε μόνιμη αποτυχία. Η εγγραφή χρειάζεται επιπλέον συμβόλαιο idempotency πριν επαναληφθεί με ασφάλεια. Κράτησε τεχνητά μηνύματα ανεξάρτητα γλώσσας ώστε η δοκιμή να ελέγχει τύπους εξαιρέσεων και μεταβάσεις αντί για εύθραυστη αντιστοίχιση κειμένου.

Πρωτογενής αναφορά

Επίσημη τεκμηρίωση