Ντετερμινιστική εισαγωγή αποτυχιών και έλεγχοι ανάκαμψης — 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 πριν επαναληφθεί με ασφάλεια. Κράτησε τεχνητά μηνύματα ανεξάρτητα γλώσσας ώστε η δοκιμή να ελέγχει τύπους εξαιρέσεων και μεταβάσεις αντί για εύθραυστη αντιστοίχιση κειμένου.