Rust로 개발된 Offload, 테스트 속도 6배 향상!

by DD
1개월 전
조회수 6

Offload는 원격 샌드박스(Remote Sandbox)를 활용하여 테스트 실행 시간을 획기적으로 단축하는 CLI 도구임

병렬 테스트 실행(Parallel Test Execution)을 통해 테스트 시간을 최대 6배까지 단축하며, Modal을 활용한 샌드박스 환경을 제공함

Rust로 개발되어 높은 성능과 안정성을 보장하며, pytest, cargo-nextest, vitest 등 다양한 테스트 프레임워크 지원

테스트 ID 중복 문제(Test ID Duplication)와 같은 잠재적 문제에 대한 해결 방안 제시 및 에이전트 기반 코드 수정(Agent-based Code Modification)을 통한 자동화 시도

테스트 프레임워크 통합 및 확장성

Offload는 다양한 테스트 프레임워크를 지원하기 위해 TestFramework 트레이트(Trait)를 제공한다. 이 트레이트를 구현함으로써, 개발자는 자신만의 테스트 프레임워크(Test Framework)를 Offload에 통합할 수 있다. 특히, `discover` 함수를 통해 테스트 ID를 수집하고, `produce_test_execution_command` 함수를 통해 테스트 실행 명령을 생성한다. 이러한 유연성은 Offload가 다양한 환경에서 사용될 수 있도록 하는 핵심 요소이다. 또한, Rust의 강력한 타입 시스템(Type System)은 코드의 안정성을 높이는 데 기여한다.

원격 샌드박스(Remote Sandbox) 아키텍처

Offload는 Modal을 사용하여 원격 샌드박스를 생성하고, 각 샌드박스에서 테스트를 병렬로 실행한다. 샌드박스는 격리된 환경을 제공하여 테스트 간의 간섭을 방지하고, 테스트 실행 시간(Test Execution Time)을 단축한다. Offload는 테스트 실행 전에 필요한 이미지 준비 및 샌드박스 생성을 자동화하며, 캐싱(Caching)을 통해 이미지 빌드 시간을 최소화한다. 이러한 아키텍처는 대규모 테스트 스위트(Large Test Suite)를 효율적으로 관리하는 데 중요한 역할을 한다.

병렬 테스트 실행 및 스케줄링

Offload는 LPT(Longest Processing Time) 스케줄링을 사용하여 테스트를 샌드박스에 할당하고, Flaky 테스트(Flaky Test)를 여러 번 실행하여 안정성을 확보한다. 테스트는 배치(Batch) 단위로 묶여 실행되며, 각 배치의 결과는 하나의 JUnit XML 보고서로 통합된다. Rust의 tokio 크레이트(Tokio Crate)를 활용하여 비동기 및 멀티스레드 환경을 구축, 병렬 처리의 효율성을 극대화한다. 이러한 접근 방식은 테스트 실행 시간을 줄이고, 전체적인 테스트 프로세스의 속도를 향상시킨다.

테스트 ID 관리 및 에이전트 활용

Offload는 테스트 ID의 중복 문제를 해결하기 위해 에이전트(Agent)를 활용하여 테스트 이름을 수정하는 방법을 제시한다. 이는 코드베이스(Codebase)에 대한 잠재적인 변경을 수반하지만, 테스트 ID의 일관성을 유지하고, 테스트 실행의 안정성을 높이는 데 기여한다. 테스트 ID(Test ID)는 테스트 결과를 정확하게 식별하고, 보고서 생성에 필수적인 요소이다. 또한, Offload는 JUnit XML 보고서(JUnit XML Report)를 통해 테스트 결과를 시각화하고, 분석할 수 있도록 지원한다.

Technical teardown of the Rust CLI that speeds up our tests by 6x