🧵 Automation Testing · Chương 15 · Mục 15.1
Fixture cho Restful-Booker Platform
Vì sao cần fixture mới, không dùng lại api_context? Từ Chương 7 tới giờ, mọi test đều gọi API của restful-booker.herokuapp.com qua fixture api_context. Nhưng trang UI dùng ở Chương 4-6 (automationintesting.online) là một ứng dụng hoàn toàn khác, có API riêng của nó. api_context cũ đã gắn cứng địa chỉ restful-booker.herokuapp.com nên không gọi được sang trang kia — cần tạo 1 fixture mới, trỏ đúng địa chỉ mới.
Tệp tests/conftest.py (thêm hằng số và fixture):
FILE tests/conftest.py
RESTFUL_BOOKER_PLATFORM_URL = "https://automationintesting.online"
@pytest.fixture(scope="session")def rbp_api_context(playwright):"""APIRequestContext rieng cho Restful-Booker Platform (automationintesting.online) -day la 1 app KHAC voi Restful-Booker, dung cho phan ket hop UI + API."""context = playwright.request.new_context(base_url=RESTFUL_BOOKER_PLATFORM_URL)yield contextcontext.dispose()
Giải thích từng dòng lệnh:
| Dòng | Giải thích |
|---|---|
| RESTFUL_BOOKER_PLATFORM_URL = "..." | Khai báo địa chỉ gốc của trang UI thành 1 hằng số, để không phải gõ lại chuỗi này nhiều lần |
| @pytest.fixture(scope="session") | Đánh dấu đây là fixture, chỉ tạo 1 lần dùng chung cho cả phiên chạy test (khái niệm scope đã học ở Chương 9) |
| def rbp_api_context(playwright): | Tên hàm = tên fixture. Nhận playwright — fixture gốc có sẵn, điểm khởi đầu để tạo mọi context (đã học ở Chương 7) |
| playwright.request.new_context(base_url=...) | Tạo 1 context gọi API mới, gắn sẵn địa chỉ gốc là trang UI — y hệt cách tạo api_context ở Chương 7, chỉ khác địa chỉ |
| yield context | Trả context cho test nào cần dùng (khai báo tham số rbp_api_context) |
| context.dispose() | Dọn dẹp context sau khi hết phiên test |
Nói ngắn gọn: đây chỉ là bản sao của kỹ thuật tạo fixture api_context ở Chương 7, áp dụng cho 1 trang web khác — đặt tên rbp_api_context (rbp = Restful-Booker Platform) để phân biệt rõ với api_context cũ, tránh nhầm lẫn gọi nhầm API.