🗂️ Automation Testing · Chương 12 · Mục 12.3
PUT/PATCH — sửa booking, cần token
Thêm vào cuối file:
FILE tests/test_04_crud_booking.py
def test_put_01_sua_booking_co_token(api_context, auth_token, booking_tao_moi):"""PUT-01: sua toan bo booking, co token hop le (Cookie: token=..) -> HTTP 200, du lieu duoc cap nhat dung."""bookingid, _ = booking_tao_moi # chi can id, "_" nghia la bo qua gia tri du_lieu khong dung toidu_lieu_moi = {"firstname": "Da Sua","lastname": "Roi","totalprice": 999,"depositpaid": False,"bookingdates": {"checkin": "2026-11-01", "checkout": "2026-11-02"},}response = api_context.put(f"/booking/{bookingid}",data=du_lieu_moi,headers={"Cookie": f"token={auth_token}"},)assert response.status == 200 # co token, sua thanh congassert response.json()["firstname"] == "Da Sua" # du lieu tra ve dung nhu da suadef test_put_02_sua_khong_co_token(api_context, booking_tao_moi):"""PUT-02: sua booking nhung KHONG gui token -> HTTP 403, khong sua duoc."""bookingid, _ = booking_tao_moi # chi can id, bo qua du_lieuresponse = api_context.put(f"/booking/{bookingid}",data={"firstname": "Hack","lastname": "Er","totalprice": 0,"depositpaid": False,"bookingdates": {"checkin": "2026-01-01", "checkout": "2026-01-02"},},)assert response.status == 403 # khong co token phai bi tu choidef test_patch_01_sua_1_field_giu_nguyen_field_khac(api_context, auth_token, booking_tao_moi):"""PATCH-01: chi gui totalprice -> HTTP 200, chi totalprice doi, cac field khac giu nguyen."""bookingid, du_lieu_goc = booking_tao_moi # giu du_lieu_goc de doi chieu field khong doi ben duoiresponse = api_context.patch(f"/booking/{bookingid}",data={"totalprice": 250},headers={"Cookie": f"token={auth_token}"},)assert response.status == 200 # co token, sua thanh congbody = response.json()assert body["totalprice"] == 250 # field vua gui phai doiassert body["firstname"] == du_lieu_goc["firstname"] # field khong gui phai giu nguyenassert body["lastname"] == du_lieu_goc["lastname"] # field khong gui phai giu nguyen
Gán token vào header Cookie (dạng token=<auth_token>) — Restful-Booker nhận diện đăng nhập qua header Cookie, không phải header Authorization thường gặp ở API khác. test_put_02 cố tình KHÔNG gửi header này để xác nhận bị từ chối (403).
Kết quả:
KẾT QUẢ
tests/test_04_crud_booking.py::test_put_01_sua_booking_co_token PASSEDtests/test_04_crud_booking.py::test_put_02_sua_khong_co_token PASSEDtests/test_04_crud_booking.py::test_patch_01_sua_1_field_giu_nguyen_field_khac PASSED======================= 3 passed in 3.16s =======================