Kiểm thử phần mềm
Kiểm thử hợp đồng API khi trường thiếu hoặc có giá trị null
Thiết kế bộ dữ liệu tách sự hiện diện của khóa khỏi kiểu giá trị.
Thích và đánh giá Bình luận và hỏi đáp1. Hai trạng thái dữ liệu cần hai kỳ vọng
Một phản hồi không có trường ghi_chu khác với phản hồi có ghi_chu mang null. Hợp đồng ví dụ yêu cầu ma là chuỗi khác rỗng, còn ghi_chu có thể vắng. Nếu xuất hiện, ghi_chu phải là chuỗi, kể cả chuỗi rỗng. Do đó null bị từ chối dù trường không bắt buộc. Đây là quyết định của hợp đồng, cần thống nhất với cả bên gửi và bên nhận.
2. Thiết kế ma trận theo hai chiều
Đối với mỗi trường, xét có mặt hay vắng mặt rồi xét kiểu và miền của giá trị. Với ma, ca thiếu và ca số nguyên đều sai. Với ghi_chu, thiếu là đúng, chuỗi rỗng là đúng, null là sai. Nếu chỉ dùng thao tác đọc khóa với mặc định null, bộ kiểm tra có thể vô tình gộp hai trạng thái cần phân biệt.
3. Chạy oracle nhỏ và đối chiếu đặc tả
Mẫu Python dùng phép kiểm tra khóa tồn tại trước khi kiểm tra kiểu. Năm ca kiểm chứng các nhánh của hợp đồng. Để chuyển sang JSON Schema, khai báo ma trong required, xác định type cho từng thuộc tính và thêm minLength cho ma. Mẫu chưa kiểm tra tập khóa bổ sung, vì quy định đó cần được phát biểu riêng.
Chạy ví dụ bằng python test_hop_dong_thieu_va_null.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.
def hop_le(doi_tuong):
if not isinstance(doi_tuong, dict):
return False
if not isinstance(doi_tuong.get("ma"), str) or not doi_tuong["ma"]:
return False
if "ghi_chu" not in doi_tuong:
return True
return isinstance(doi_tuong["ghi_chu"], str)
cac_ca = [
({"ma": "A"}, True),
({"ma": "A", "ghi_chu": ""}, True),
({"ma": "A", "ghi_chu": None}, False),
({"ghi_chu": "Buổi chiều"}, False),
({"ma": 7}, False),
]
for du_lieu, ky_vong in cac_ca:
assert hop_le(du_lieu) is ky_vong
print("Trường tùy chọn có thể vắng, nhưng null không được chấp nhận theo hợp đồng này.")4. Kiểm tra tác động tới các phiên bản máy khách
Khi máy chủ đổi từ bỏ trường sang gửi null, một máy khách cũ có thể báo lỗi dù thông tin nghiệp vụ gần giống nhau. Hãy lưu phản hồi đại diện của từng phiên bản, chạy cùng bộ giải mã và nêu rõ kết quả kỳ vọng. So sánh hợp đồng ở ranh giới hai thành phần giúp xác định thay đổi cần phối hợp phát hành.