Datadog에서의 Test Optimization

이 제품은 선택한 Datadog 사이트에서 지원되지 않습니다. ().
learning center
학습 센터에서 Test Optimization 시작하기

테스트 모니터링을 설정하고, 불안정한 테스트를 식별하며, 중요한 테스트만 실행하기 위해 Test Impact Analysis를 사용하여 CI 파이프라인을 가속화하는 방법을 배우세요.

지금 등록

개요

Test Optimization은 테스트의 중요한 메트릭과 결과를 표시하여 CI 상태를 테스트 중심의 관점에서 제공합니다. 이를 통해 테스트를 실행하는 파이프라인이 아니라, 코드에 초점을 맞춰 현재 작업과 가장 관련성이 높은 성능 문제와 테스트 실패를 조사할 수 있습니다.

설정

Datadog에서 Test Optimization을 구성할 옵션을 선택하세요.

.net
java
javascript
python
ruby
swift
go
Datadog에 junit 테스트 업로드

테스트와 더불어, Test Optimization은 프로젝트 전체 테스트 단계에 대한 가시성을 제공합니다.

지원되는 기능

.NETJava/JVM 기반JavascriptPythonRubySwiftGoJUnit Xml
정확한 시간/지속 시간 결과

마이크로초 단위로 정밀하게 테스트 시작 시간과 지속 시간을 제공합니다.

통합 테스트에서의 분산 트레이스

Datadog으로 계측된 외부 서비스에 대한 호출을 수행하는 테스트는 테스트 세부 정보에 전체 분산 트레이스를 표시합니다.

에이전트 기반 보고

Datadog Agent를 통해 테스트 정보를 보고할 수 있는 기능입니다.

에이전트 없는 보고

Datadog Agent 없이 테스트 정보를 보고할 수 있는 기능입니다.

테스트 모음 수준 가시성

세션, 모듈, 스위트 및 테스트를 포함한 전체 테스트 프로세스에 대한 가시성을 제공합니다.

수동 API

Datadog의 자동 계측으로 지원되지 않는 테스트 프레임워크에 대해 프로그래밍 방식으로 CI Visibility 이벤트를 생성할 수 있는 기능입니다.

테스트별 코드 소유자

CODEOWNERS 파일을 기반으로 테스트 파일의 소유자를 자동으로 감지합니다.

(부분적으로)
소스 코드 시작/종료

테스트의 시작 및 종료 라인을 자동으로 보고합니다.

(시작만) (시작만)
CI 및 git 정보

CI 제공자, git 커밋 SHA 또는 파이프라인 URL과 같은 git 및 CI 환경 메타데이터를 자동으로 수집합니다.

Git 메타데이터 업로드

Test Impact Analysis에 사용되는 git 트리 정보를 자동으로 업로드합니다.

Test Impact Analysis *

코드 커버리지 및 git 메타데이터를 기반으로 테스트를 지능적으로 건너뛰는 Test Impact Analysis를 활성화할 수 있는 기능입니다.

코드 커버리지 지원

총 코드 커버리지 메트릭을 보고할 수 있는 기능입니다.

(수동)
벤치마크 테스트 지원

벤치마크 테스트에 대한 성능 통계를 자동으로 감지합니다.

파라미터화된 테스트

파라미터화된 테스트를 자동으로 감지합니다.

Early Flake Detection *

자동으로 새 테스트를 재시도하여 불안정성을 감지합니다.

Auto test retries *

자동으로 실패한 테스트를 재시도하여 테스트 불안정성으로 인해 빌드가 실패하지 않도록 최대 N회까지 시도합니다.

Failed test replay *

재시도된 실패한 테스트에서 로컬 변수 정보에 액세스합니다.

Selenium RUM 통합

자동으로 브라우저 세션을 테스트 케이스에 연결하여 RUM으로 계측된 애플리케이션을 테스트합니다.

* 이 기능은 선택 사항이며, Test Optimization 설정 페이지에서 활성화해야 합니다.

기본 구성

테스트는 주어진 조건 집합에 대한 코드의 동작을 평가합니다. 이 조건 중 일부는 테스트가 실행되는 환경과 관련이 있으며, 운영 체제나 사용되는 런타임 등이 포함됩니다. 다른 조건 집합에서 실행된 동일한 코드는 다르게 동작할 수 있으므로, 개발자는 일반적으로 테스트가 다양한 조건 집합에서 실행되도록 구성하고 모든 조건에 대해 동작이 예상대로인지 검증합니다. 이 특정 조건 집합을 구성이라고 합니다.

Test Optimization에서 여러 구성의 테스트는 각 구성에 대해 별도의 테스트로 간주됩니다. 구성 중 하나가 실패하고 나머지가 통과하는 경우, 해당 특정 테스트와 구성 조합만 실패로 표시됩니다.

예를 들어, 단일 커밋을 테스트하고 세 가지 다른 Python 버전에서 실행되는 Python 테스트가 있다고 가정해 보겠습니다. 이 테스트가 그 버전 중 하나에서 실패할 경우 해당 특정 테스트는 실패로 표시되고, 다른 버전은 통과로 표시됩니다. 동일한 커밋에 대해 테스트를 다시 시도하여 이제 세 가지 Python 버전 모두 통과하면, 이전에 실패했던 버전의 테스트는 통과 및 flaky 상태로 표시되며, 나머지 두 버전은 통과 상태로 유지되고 불안정성이 감지되지 않습니다.

테스트 구성 속성

Test Optimization로 테스트를 실행하면, 라이브러리는 테스트가 실행되는 환경에 대한 정보를 테스트 태그로 감지하고 보고합니다. 예를 들어, Windows 또는 Linux와 같은 운영 체제 이름과 arm64 또는 x86_64와 같은 플랫폼의 아키텍처가 각 테스트에 태그로 추가됩니다. 이 값들은 특정 구성에서 테스트가 실패하거나 불안정할 때 커밋 및 브랜치 개요 페이지에 표시됩니다.

다음 태그는 테스트 구성을 식별하기 위해 자동으로 수집되며, 일부는 특정 플랫폼에만 적용될 수 있습니다.

태그 이름설명
os.platform테스트가 실행되는 운영 체제의 이름입니다.
os.family테스트가 실행되는 운영 체제의 계열입니다.
os.version테스트가 실행되는 운영 체제의 버전입니다.
os.architecture테스트가 실행되는 운영 체제의 아키텍처입니다.
runtime.name테스트를 위한 런타임 시스템의 이름입니다.
runtime.version런타임 시스템의 버전입니다.
runtime.vendor테스트가 실행되는 런타임 플랫폼을 구축한 벤더입니다.
runtime.architecture테스트를 위한 런타임 시스템의 아키텍처입니다.
device.model테스트를 실행하는 기기 모델입니다.
device.name기기 이름입니다.
ui.appearance사용자 인터페이스 스타일입니다.
ui.orientationUI가 실행되는 방향입니다.
ui.localization애플리케이션의 언어입니다.

파라미터화된 테스트 구성

파라미터화된 테스트를 실행할 때, 라이브러리는 사용된 파라미터에 대한 정보를 감지하고 보고합니다. 파라미터는 테스트 구성의 일부이므로, 서로 다른 파라미터로 실행된 동일한 테스트 케이스는 Test Optimization에서 두 개의 서로 다른 테스트로 간주됩니다.

테스트 파라미터가 비결정적이고 테스트가 실행될 때마다 다른 값을 가지면, 각 테스트 실행은 Test Optimization에서 새로운 테스트로 간주됩니다. 그 결과, 일부 제품 기능은 실행 기록, 불안정성 감지, Test Impact Analysis 등의 테스트에 대해 올바르게 작동하지 않을 수 있습니다.

비결정적 테스트 파라미터의 몇 가지 예는 다음과 같습니다.

  • 현재 날짜
  • 무작위 값
  • 테스트 실행 환경에 따라 달라지는 값(예: 절대 파일 경로 또는 현재 사용자 이름)
  • 결정적인 문자열 표현이 없는 값(예: toString() 메서드가 오버라이드되지 않은 Java 클래스 인스턴스)

비결정적 테스트 파라미터를 사용하지 마세요. 이를 피할 수 없는 경우, 일부 테스트 프레임워크에서는 비결정적 파라미터에 대한 결정론적 문자열 표현을 지정하는 방법을 제공합니다(예: 파라미터 표시 이름 재정의).

사용자 정의 구성

일부 설정은 환경 변수, 테스트 실행 인수 또는 개발자가 사용하는 접근 방식에 따라 달라질 수 있으므로 직접 식별하고 보고할 수 없습니다. 이러한 경우 Test Optimization에서 올바르게 설정을 식별할 수 있도록 라이브러리에 세부 정보를 제공해야 합니다.

이 태그를 DD_TAGS 환경 변수의 일부로 정의하고 test.configuration 접두사를 사용하세요.

예를 들어, 다음 테스트 구성 태그는 디스크 응답 시간이 느리고 사용 가능한 메모리가 낮은 테스트 구성을 식별합니다.

DD_TAGS=test.configuration.disk:slow,test.configuration.memory:low

test.configuration 접두사가 있는 모든 태그는 자동으로 수집된 태그와 더불어 설정 태그로 사용됩니다.

참고: 중첩된 test.configuration 태그, 예를 들어 test.configuration.cpu.memory는 지원되지 않습니다.

이러한 설정 태그를 사용하여 필터링하려면 이러한 태그에 대한 패싯을 생성해야 합니다.

개발자 워크플로 개선

Test Optimization을 코드 커버리지 데이터를 보고하는 도구와 통합하고, 브라우저 테스트에 RUM을 적용하여 개발 주기 전반에서 문제를 더욱 신속하게 식별하고 해결하며, 여러 플랫폼에 걸친 인사이트를 활용할 수 있습니다.


CI 테스트 데이터 사용

When Test Visibility is enabled, the following data is collected from your project:

  • Test names and durations.
  • Predefined environment variables set by CI providers.
  • Git commit history including the hash, message, author information, and files changed (without file contents).
  • Information from the CODEOWNERS file.

대시보드 또는 노트북을 생성하는 경우 검색 쿼리에서 CI 테스트 데이터를 사용할 수 있으며 이는 시각화 위젯 옵션을 업데이트합니다. 자세한 내용은 DashboardsNotebooks 문서를 참조하세요.

테스트 데이터에 경보 설정

실패하거나 불안정한 테스트 또는 CI 테스트의 성능을 평가할 때, 내보내기 버튼을 클릭하여 Test Optimization Explorer에서 CI Test monitor로 검색 쿼리를 내보낼 수 있습니다.

추가 자료