Test Optimization은 테스트의 중요한 메트릭과 결과를 표시하여 CI 상태를 테스트 중심의 관점에서 제공합니다. 이를 통해 테스트를 실행하는 파이프라인이 아니라, 코드에 초점을 맞춰 현재 작업과 가장 관련성이 높은 성능 문제와 테스트 실패를 조사할 수 있습니다.
설정
Datadog에서 Test Optimization을 구성할 옵션을 선택하세요.
테스트와 더불어, Test Optimization은 프로젝트 전체 테스트 단계에 대한 가시성을 제공합니다.
지원되는 기능
.NET
Java/JVM 기반
Javascript
Python
Ruby
Swift
Go
JUnit Xml
정확한 시간/지속 시간 결과
마이크로초 단위로 정밀하게 테스트 시작 시간과 지속 시간을 제공합니다.
통합 테스트에서의 분산 트레이스
Datadog으로 계측된 외부 서비스에 대한 호출을 수행하는 테스트는 테스트 세부 정보에 전체 분산 트레이스를 표시합니다.
에이전트 기반 보고
Datadog Agent를 통해 테스트 정보를 보고할 수 있는 기능입니다.
에이전트 없는 보고
Datadog Agent 없이 테스트 정보를 보고할 수 있는 기능입니다.
테스트 모음 수준 가시성
세션, 모듈, 스위트 및 테스트를 포함한 전체 테스트 프로세스에 대한 가시성을 제공합니다.
수동 API
Datadog의 자동 계측으로 지원되지 않는 테스트 프레임워크에 대해 프로그래밍 방식으로 CI Visibility 이벤트를 생성할 수 있는 기능입니다.
테스트별 코드 소유자
CODEOWNERS 파일을 기반으로 테스트 파일의 소유자를 자동으로 감지합니다.
(부분적으로)
소스 코드 시작/종료
테스트의 시작 및 종료 라인을 자동으로 보고합니다.
(시작만)
(시작만)
CI 및 git 정보
CI 제공자, git 커밋 SHA 또는 파이프라인 URL과 같은 git 및 CI 환경 메타데이터를 자동으로 수집합니다.
테스트는 주어진 조건 집합에 대한 코드의 동작을 평가합니다. 이 조건 중 일부는 테스트가 실행되는 환경과 관련이 있으며, 운영 체제나 사용되는 런타임 등이 포함됩니다. 다른 조건 집합에서 실행된 동일한 코드는 다르게 동작할 수 있으므로, 개발자는 일반적으로 테스트가 다양한 조건 집합에서 실행되도록 구성하고 모든 조건에 대해 동작이 예상대로인지 검증합니다. 이 특정 조건 집합을 구성이라고 합니다.
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.orientation
UI가 실행되는 방향입니다.
ui.localization
애플리케이션의 언어입니다.
파라미터화된 테스트 구성
파라미터화된 테스트를 실행할 때, 라이브러리는 사용된 파라미터에 대한 정보를 감지하고 보고합니다. 파라미터는 테스트 구성의 일부이므로, 서로 다른 파라미터로 실행된 동일한 테스트 케이스는 Test Optimization에서 두 개의 서로 다른 테스트로 간주됩니다.
테스트 파라미터가 비결정적이고 테스트가 실행될 때마다 다른 값을 가지면, 각 테스트 실행은 Test Optimization에서 새로운 테스트로 간주됩니다. 그 결과, 일부 제품 기능은 실행 기록, 불안정성 감지, Test Impact Analysis 등의 테스트에 대해 올바르게 작동하지 않을 수 있습니다.
비결정적 테스트 파라미터의 몇 가지 예는 다음과 같습니다.
현재 날짜
무작위 값
테스트 실행 환경에 따라 달라지는 값(예: 절대 파일 경로 또는 현재 사용자 이름)
결정적인 문자열 표현이 없는 값(예: toString() 메서드가 오버라이드되지 않은 Java 클래스 인스턴스)
비결정적 테스트 파라미터를 사용하지 마세요. 이를 피할 수 없는 경우, 일부 테스트 프레임워크에서는 비결정적 파라미터에 대한 결정론적 문자열 표현을 지정하는 방법을 제공합니다(예: 파라미터 표시 이름 재정의).
사용자 정의 구성
일부 설정은 환경 변수, 테스트 실행 인수 또는 개발자가 사용하는 접근 방식에 따라 달라질 수 있으므로 직접 식별하고 보고할 수 없습니다. 이러한 경우 Test Optimization에서 올바르게 설정을 식별할 수 있도록 라이브러리에 세부 정보를 제공해야 합니다.
이 태그를 DD_TAGS 환경 변수의 일부로 정의하고 test.configuration 접두사를 사용하세요.
예를 들어, 다음 테스트 구성 태그는 디스크 응답 시간이 느리고 사용 가능한 메모리가 낮은 테스트 구성을 식별합니다.