Kiểm thử phần mềm
Tiêm lỗi mất phản hồi để kiểm thử gửi lại
Đo tác động khi thao tác đã ghi thành công nhưng máy khách chưa nhận xác nhận.
Thích và đánh giá Bình luận và hỏi đáp1. Đặt lỗi ở đúng phía của điểm ghi
Mất kết nối trước khi ghi và mất phản hồi sau khi ghi tạo cùng biểu hiện ở máy khách. Tác động phía máy chủ khác nhau. Ca thứ hai dễ tạo bản ghi trùng vì máy khách gửi lại mà không biết lần đầu đã thành công. Điểm tiêm lỗi phải đặt sau khi thay đổi bền vững và trước khi phản hồi tới bên gọi.
2. Phân biệt mã yêu cầu và dữ liệu nghiệp vụ
Dùng một mã ổn định cho các lần thử của cùng yêu cầu. Lưu kết quả cùng dấu vết dữ liệu đã nhận. Nếu mã cũ đi kèm dữ liệu khác, trả lỗi xung đột để phát hiện việc dùng lại nhầm mã. Hai yêu cầu thực sự độc lập vẫn có thể có nội dung giống nhau và phải dùng hai mã riêng.
3. Kiểm chứng cả kết quả lẫn số lần ghi
Ví dụ làm mất phản hồi của lần đầu, gửi lại cùng mã và xác nhận kết quả được lấy từ lần ghi trước. Bộ đếm chỉ tăng một lần. Sau đó thử lại cùng mã với số tiền khác để xác nhận hệ thống từ chối. Mô hình bộ nhớ minh họa giao thức và chưa bao quát thao tác đồng thời.
Chạy ví dụ bằng python test_loi_mat_phan_hoi.py.
Môi trường thực hành. Python 3.10 trở lên. Ví dụ dùng thư viện chuẩn Python.
class SoGhi:
def __init__(self):
self.yeu_cau = {}
self.tac_dong = []
def gui(self, ma, gia_tri, mat_phan_hoi=False):
if ma in self.yeu_cau:
cu, ket_qua = self.yeu_cau[ma]
if cu != gia_tri:
raise ValueError("Mã yêu cầu có dữ liệu khác")
return ket_qua
self.tac_dong.append(gia_tri)
ket_qua = len(self.tac_dong)
self.yeu_cau[ma] = gia_tri, ket_qua
if mat_phan_hoi:
raise TimeoutError
return ket_qua
so = SoGhi()
try:
so.gui("r17", 9, mat_phan_hoi=True)
except TimeoutError:
assert so.gui("r17", 9) == 1
else:
raise AssertionError("Phải mất phản hồi ở lần đầu")
assert so.tac_dong == [9]
try:
so.gui("r17", 10)
except ValueError:
print("Một lần ghi, mã dùng lại với dữ liệu khác bị từ chối.")
else:
raise AssertionError("Mã dùng lại phải bị từ chối")4. Mở rộng điểm tiêm lỗi
Trong triển khai thật, thử hai yêu cầu cùng đến, lỗi ngay giữa cập nhật bản ghi nghiệp vụ và lưu mã yêu cầu, cùng trường hợp đã hết hạn giữ mã. Quan sát trạng thái bền vững, phản hồi và số lần gọi dịch vụ phụ. Việc ghi mã và tác động nghiệp vụ cần có ranh giới nhất quán rõ ràng.
Đọc thêm Thiết kế API an toàn khi gửi lại của AWS Builders’ Library.