Bob Belderbos: Playwright를 이용한 모든 Rust Exercise의 End-to-End 테스트
Rust 플랫폼에는 수많은 연습 문제가 있으며, 각 문제는 사용자가 편집기를 로드하고 코드를 작성한 후 Rust 백엔드를 통해 검증해야 합니다. 이 과정은 업데이트가 기존 기능을 손상시키지 않도록 엔드투엔드 테스트를 필요로 합니다. 수동 테스트는 비효율적이며 로그인부터 피드백 수신까지 전체 사용자 루프를 다루지 못합니다. Django 앱과 Rust 검증기를 위한 단위 테스트는 존재하지만, 연습 문제의 통합된 경험을 테스트하지는 않습니다. Playwright는 pytest와 결합하여 이 엔드투엔드 테스트를 위한 간결한 솔루션을 제공합니다. 단일 Python 테스트 함수는 데이터베이스에서 모든 공개 연습 문제와 해당 솔루션을 가져와 매개변수화됩니다. 각 매개변수화된 테스트는 연습 문제로 이동하여 편집기에 올바른 솔루션을 주입하고 제출을 검증합니다. 테스트는 수신된 피드백이 성공적인 완료를 나타내는지 확인합니다.pytest의 세션 범위 fixture는 모든 테스트에 대해 브라우저를 한 번만 실행하고 로그인하여 성능을 최적화하는 데 사용됩니다. Playwright 테스트의 중요한 측면은 CodeMirror 편집기의 요소 타이밍을 처리하는 것으로, 요소의 가시성과 JavaScript 인스턴스의 초기화를 명시적으로 기다리는 것을 사용합니다. 테스트 사용자를 생성할 때 Django의 비동기 컨텍스트 트랩을 피하기 위해 django_db_blocker를 활용하여 Playwright fixture보다 먼저 실행되는 별도의 fixture를 사용하여 해결책이 구현되었습니다. 엔드투엔드 테스트는 실제 데이터베이스와 실제 Rust 검증기를 대상으로 실행되도록 설계되어 현실적인 통합 테스트를 보장합니다. 이러한 테스트는 주요 푸시 전에 로컬에서 실행되는 반면, CI 환경은 주로 더 빠른 단위 테스트를 실행합니다. 이 접근 방식은 새로운 테스트 코드를 요구하지 않고 새로 추가된 연습 문제를 자동으로 테스트하며, 모든 프론트엔드 수정은 이 통합 회귀 스위트에 대해 검증됩니다. Playwright는 현대적이고 인체공학적인 인터페이스로 인해 Selenium보다 선호되며, 요소 타이밍은 관리 가능한 도전 과제입니다.
django_db_blocker를 활용하여 Playwright fixture보다 먼저 실행되는 별도의 fixture를 사용하여 해결책이 구현되었습니다. 엔드투엔드 테스트는 실제 데이터베이스와 실제 Rust 검증기를 대상으로 실행되도록 설계되어 현실적인 통합 테스트를 보장합니다. 이러한 테스트는 주요 푸시 전에 로컬에서 실행되는 반면, CI 환경은 주로 더 빠른 단위 테스트를 실행합니다. 이 접근 방식은 새로운 테스트 코드를 요구하지 않고 새로 추가된 연습 문제를 자동으로 테스트하며, 모든 프론트엔드 수정은 이 통합 회귀 스위트에 대해 검증됩니다. Playwright는 현대적이고 인체공학적인 인터페이스로 인해 Selenium보다 선호되며, 요소 타이밍은 관리 가능한 도전 과제입니다.