Kubernetes 이야기

playwright를 활용한 e2e 테스트 본문

개발/python

playwright를 활용한 e2e 테스트

kmaster 2023. 2. 15. 23:04
반응형

Playwright는 최신 웹 앱에 대한 신뢰할 수 있는 종단 간 테스트를 지원하는 테스트 자동화 도구이다. Playwright는 Chromium, WebKit 및 Firefox를 포함한 모든 최신 렌더링 엔진을 지원한다.

 

설치

 

설치는 npm 또는 pip, .net, java, VS Code Extension 설치 방법이 있다. pip 로 설치를 진행해 보자.

pipenv --python 3.11
pipenv shell
pipenv install pytest-playwright
playwright install

 

샘플코드

import re
from playwright.sync_api import Page, expect


def test_homepage_has_Playwright_in_title_and_get_started_link_linking_to_the_intro_page(page: Page):
    page.goto("https://playwright.dev/")

    # Expect a title "to contain" a substring.
    expect(page).to_have_title(re.compile("Playwright"))

    # create a locator
    get_started = page.get_by_role("link", name="Get started")

    # Expect an attribute "to be strictly equal" to the value.
    expect(get_started).to_have_attribute("href", "/docs/intro")

    # Click the get started link.
    get_started.click()

    # Expects the URL to contain intro.
    expect(page).to_have_url(re.compile(".*intro"))

 

[실행]

# pytest
======================================================= test session starts =======================================================
platform linux -- Python 3.11.1, pytest-7.2.1, pluggy-1.0.0
rootdir: /root/playwright
plugins: playwright-0.3.0, base-url-2.0.0
collected 1 item

test_my_application.py .                                                                                                    [100%]

======================================================== 1 passed in 1.77s ========================================================

 

액션녹화

 

record 기능을 쓰기 위해서는 다음과 같이 실행한다.

# playwright codegen demo.playwright.dev/todomvc
실행 시 timezone을 다음과 같이 옵션을 추가 할 수 있다.
--timezone="Asia/Seoul" --lang="ko-KR"

 

WSL 모드 또는 X11 모드 오류가 발생하는 경우 다음과 같이 실행한다.

[pid=5640][err] [5640:5654:0214/203111.458552:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
[pid=5640][err] [5640:5640:0214/203111.462146:ERROR:ozone_platform_x11.cc(238)] Missing X server or $DISPLAY
[pid=5640][err] [5640:5640:0214/203111.462179:ERROR:env.cc(255)] The platform failed to initialize.  Exiting.
# sudo apt install x11-apps
# sudo /etc/init.d/dbus start
# sudo apt install language-selector-gnome
# sudo gnome-language-selector -> 한글추가

# export DISPLAY=$(ip route list default | awk '{print $3}'):0
# export LIBGL_ALWAYS_INDIRECT=1
https 호출 시 Error: net::ERR_CERT_AUTHORITY_INVALID ... 오류가 발생하는 경우에는--ignore-https-errors 옵션을 추가한다.

WSL 모드 (Ubuntu) 에서 브라우저에 한글이 깨지는 경우에는 다음을 참고한다.
https://velog.io/@hephaistos53/%EC%9A%B0%EB%B6%84%ED%88%AC-%ED%81%AC%EB%A1%AC%EC%84%A4%EC%B9%98-%ED%95%9C%EA%B8%80%EC%84%A4%EC%A0%95

 

* 참고

codegen으로 녹화를 생성하면 text박스에는 fill("text") 로 자동호출된다. 하지만, fill 함수로 textbox입력 시 javascript에서 event를 발생하거나, 문자열 비교등 처리에서 값을 못 불러오는 현상이 있다.
이때는 type 함수를 써서 값을 입력받도록 한다.
page.get_by_placeholder("text").type("myvalue")​

 

Trace

 

playwright에서는 실행한 결과를 스크린샷으로 저장해 주는 기능이 있다.

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    context.tracing.start(name="trace", screenshots=True, snapshots=True)
...
    # ---------------------
    context.tracing.stop(path = "trace.zip")
    context.close()
    browser.close()

 

실행후에는 trace.zip파일이 생성된다.

playwright show-trace trace.zip

스크린샷 결과를 다음과 같이 조회할 수 있다.

 

상세한 설명은 다음을 참고한다.

 

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

 

Installation | Playwright Python

Playwright was created specifically to accommodate the needs of end-to-end testing. Playwright supports all modern rendering engines including Chromium, WebKit, and Firefox. Test on Windows, Linux, and macOS, locally or on CI, headless or headed with nativ

playwright.dev

 

반응형

'개발 > python' 카테고리의 다른 글

mitmproxy을 사용하여 K8S API Server Reverse Proxy 설정하기  (0) 2023.02.22
Playwright와 Python 사용 방법  (0) 2023.02.22
Python에서 gRPC 구현  (0) 2023.02.13
Kopf ( 예제 )  (1) 2023.02.05
Kopf (소개)  (0) 2023.02.03
Comments