Quản lý phiên làm việc và trạng thái đăng nhập bền vững trong Playwright

Trong quy trình kiểm thử tự động hóa ứng dụng web, việc lặp lại thao tác đăng nhập ở mỗi lần chạy kịch bản thường gây lãng phí thời gian và tài nguyên hệ thống. Playwright hỗ trợ cơ chế lưu trữ trạng thái phiên làm việc (storage state), bao gồm cookies và local storage, cho phép tái sử dụng phiên đã xác thực mà không cần thực hiện lại quy trình đăng nhập thủ công.

Nguyên lý hoạt động của Storage State

Khác với việc chỉ trích xuất cookie riêng lẻ, phương thức storage_state trong Playwright cho phép lưu trữ toàn bộ ngữ cảnh duyệt web hiện tại. Dữ liệu này được mã hóa vào file JSON và có thể được nạp lại khi khởi tạo trình duyệt mới, giúp duy trì trạng thái đăng nhập xuyên suốt các lần thực thi script khác nhau.

Quy trình lưu trữ trạng thái sau khi xác thực

Bước đầu tiên là thực hiện đăng nhập bình thường trên ứng dụng mục tiêu. Ngay sau khi xác thực thành công, gọi phương thức lưu trữ để ghi lại thông tin phiên làm việc vào tệp tin cục bộ.

from playwright.sync_api import sync_playwright

def thuc_hien_dang_nhap_va_luu():
    with sync_playwright() as p:
        # Khởi tạo trình duyệt ở chế độ hiển thị để quan sát thao tác
        trinh_duyet = p.chromium.launch(headless=False)
        nguoc_canh = trinh_duyet.new_context()
        trang = nguoc_canh.new_page()
        
        # Truy cập vào trang quản trị yêu cầu xác thực
        trang.goto("https://example-automation-target.com/dashboard")
        
        # Điền thông tin xác thực vào form
        trang.fill("#field-username", "admin_account")
        trang.fill("#field-password", "secure_pass_123")
        trang.click("#button-login-submit")
        
        # Đợi trang tải hoàn tất các yêu cầu mạng
        trang.wait_for_load_state("networkidle")
        
        # Lưu trữ toàn bộ trạng thái bao gồm cookie vào file JSON
        nguoc_canh.storage_state(path="trang_thai_phien.json")
        
        trinh_duyet.close()

if __name__ == "__main__":
    thuc_hien_dang_nhap_va_luu()

Đoạn mã trên sẽ sinh ra file trang_thai_phien.json chứa dữ liệu phiên làm việc. Lưu ý rằng các selector như #field-username cần được điều chỉnh phù hợp với cấu trúc DOM của ứng dụng thực tế mà bạn đang kiểm thử.

Tái sử dụng trạng thái để truy cập nhanh

Ở các lần chạy script tiếp theo, thay vì thực hiện lại các thao tác điền form, ta chỉ cần nạp file trạng thái đã lưu vào ngữ cảnh trình duyệt ngay khi khởi tạo. Điều này giúp trang web tự động nhận diện người dùng đã đăng nhập mà không cần tương tác thêm.

from playwright.sync_api import sync_playwright

def xac_thuc_truy_cap_nhanh():
    with sync_playwright() as p:
        # Khởi tạo trình duyệt và nạp trạng thái lưu trữ trước đó
        trinh_duyet = p.chromium.launch(headless=False)
        nguoc_canh = trinh_duyet.new_context(storage_state="trang_thai_phien.json")
        trang = nguoc_canh.new_page()
        
        # Truy cập thẳng vào trang yêu cầu quyền hạn
        trang.goto("https://example-automation-target.com/dashboard")
        
        # Chụp ảnh màn hình để xác minh giao diện đã đăng nhập
        trang.screenshot(path="anh_man_hinh_kiem_tra.png")
        
        trinh_duyet.close()

if __name__ == "__main__":
    xac_thuc_truy_cap_nhanh()

Việc xác minh thành công có thể thực hiện thông qua kiểm tra URL hiện tại, sự hiện diện của các phần tử dành riêng cho user đã đăng nhập, hoặc chụp ảnh màn hình như ví dụ trên. Phương pháp này đặc biệt hữu ích khi chạy hàng loạt test case yêu cầu quyền truy cập đã xác thực mà không muốn duy trì session quá lâu gây rủi ro bảo mật.

Thẻ: Playwright python automation-testing storage-state web-testing

Đăng vào ngày 20 tháng 8 lúc 01:08