박종훈 기술블로그

Playwright 로그인 재활용하기 - 세션 관리 (cookie, local storage, session storage)

이 글은 인증정보에 접근하고 보관하고 재사용하는 방법에 대해 다룹니다. (cookie, local storage, session storage)

auth

일반적으로 로그인을 하였을 때 cookie나 local storage나 session storage를 통해 클라이언트의 브라우저에 인증정보(혹은 세션에 해당하는 키 값)를 보관합니다.

이러한 특성을 이용하여 테스트시에 인증정보를 보관하고 있다가 다시 로드하게 된다면, 각각의 테스트에서 인증할 필요가 없어지기 때문에 테스트 실행 속도를 단축시킬 수 있습니다.

이 글은 파이썬 playwright를 기반으로 작성되었으나. 기본적으로 node.js와 크게 다르지 않기 때문에 참고해주시면 감사하겠습니다.

방법 1 : 수동으로 값 가져오기

page 객체를 중심으로 각각의 저장소에 접근할 수 있는 방법에 대해 설명함.

cookie 값은 page.context.cookies() 함수를 통해 조회 가능하고 page.context.add_cookies(cookies) 함수를 통해 입력 가능하다.

이를 아래와 같이 응용할 수 있다.

# 저장하기
with open("{0}/{1}".format(pathlib.Path(__file__).parent.resolve(), "cookies.json"), "w") as json_file:
    json.dump(await page.context.cookies(), json_file)
# 불러오기
with open("{0}/{1}".format(pathlib.Path(__file__).parent.resolve(), "cookies.json")) as json_file:
    await page.context.add_cookies(json.load(json_file))

local storage 및 session storage

evaluate를 통해 아래와 같이 local storage 및 session storage 값에 접근 가능하다.

import os

# Get session storage and store as env variable
session_storage = await page.evaluate("() => JSON.stringify(sessionStorage)")
os.environ["SESSION_STORAGE"] = session_storage

# Set session storage in a new context
session_storage = os.environ["SESSION_STORAGE"]

방법 2 : Playwright에서 제공하는 storage

# Save storage state into the file.
storage = context.storage_state(path="state.json")

# Create a new context with the saved storage state.
context = browser.new_context(storage_state="state.json")

playwright에서 cookie와 local storage 데이터를 관리한다.

단 이 방법으로는 session storage는 관리되지 않음.

주의사항

인증정보를 별도로 관리할때는 해당 정보가 유출되지 않을 수 있도록 유의하자 (ex. git을 통한 버전관리에 포함되지 않도록 처리해야 함)

참고

https://playwright.dev/python/docs/auth

categories: 개발 , Playwright

tags: Playwright , token , session , cookie , local storage , session storage , state , python , login , auth