Mmaiqai.com
🔁 Automation Testing · Chương 9 · Mục 9.2

scope — tạo mới hay dùng lại

scope quyết định 1 fixture được tạo lại bao lâu 1 lần — có 2 mức hay dùng:

scopeTạo lại khi nàoVí von
"function" (mặc định)MỚI HOÀN TOÀN cho MỖI hàm testVào phòng thi được phát 1 tờ giấy nháp mới, dùng xong bỏ đi — không ai dùng chung
"session"1 LẦN DUY NHẤT cho cả phiên chạy test (1 lần gõ pytest)Đăng nhập 1 lần đầu ngày, dùng chung phiên đó cho mọi việc

Chọn mức nào — 2 câu hỏi cần trả lời:

Câu hỏiTrả lời
Chọn "session" khi nào?Tài nguyên KHÔNG bị thay đổi sau mỗi lần dùng, và tạo mới lại tốn thời gian. Vd api_context: giống như 1 cái thẻ ra vào công ty — quẹt qua quẹt lại nhiều lần trong ngày, thẻ không hề hao mòn hay đổi gì cả, nên hàng chục test cứ dùng chung 1 api_context cho nhanh, không cần tạo lại từng lần.
Để mặc định "function" khi nào?Mỗi test cần 1 bản RIÊNG, độc lập, tránh ảnh hưởng lẫn nhau — xem ví dụ lỗi thật bên dưới.
Ví dụ lỗi thật nếu chọn sai: nếu mot_booking_id_co_that lỡ dùng scope="session", nó chỉ lấy 1 id DUY NHẤT ngay từ đầu rồi dùng chung cho mọi test cả phiên chạy. Tới Chương 12, khi có test XOÁ booking đó, các test chạy SAU cũng cố dùng đúng id đã bị xoá → lỗi 404 dây chuyền, dù bản thân các test đó chẳng viết sai gì. Để mặc định function giúp mỗi test tự lấy 1 id "tươi mới", không phụ thuộc lẫn nhau.

Tóm lại: mặc định (function) là lựa chọn AN TOÀN — chỉ đổi sang session khi chắc chắn tài nguyên đó dùng chung được mà không gây rủi ro gì.

pytest còn vài mức scope khác (class, module, package) — nằm giữa functionsession. Sách chỉ cần 2 mức trên là đủ, không phải sách bỏ sót.