Yocto 프로젝트에서 기본적인 이미지 생성 이외에도 자동화된 테스트 환경을 구축하는 것은 매우 중요한 작업이다. 이는 소프트웨어의 안정성을 보장하고 일관된 테스트를 통해 발생할 수 있는 문제를 신속하게 식별하고 해결하기 위함이다. 아래에서는 이러한 자동화된 테스트 환경 구축에 필요한 주요 요소와 방법론을 상세하게 설명한다.
테스트 프레임워크 선택
자동화된 테스트 환경을 구축하기 위해서는 적절한 테스트 프레임워크를 선택하는 것이 필요하다. Yocto 프로젝트에서 주로 사용되는 테스트 프레임워크는 다음과 같다:
- pTest (Package Test Infrastructure): pTest는 Yocto 프로젝트에서 기본적으로 제공하는 테스트 프레임워크로, 각 패키지의 테스트 스위트를 설정하고 실행할 수 있다.
- kselftest: Linux 커널의 자체 테스트 프레임워크로, 커널 관련 기능을 테스트하는데 주로 사용된다.
- LTP (Linux Test Project): 다양한 분야에 걸친 폭넓은 테스트 케이스를 제공하는 프로젝트이며, 커널, 라이브러리 및 사용자 공간을 테스트하는데 사용된다.
pTest 설정
지역 구성
pTest를 사용하여 패키지 테스트를 수행하려면 먼저 로컬 환경에서 이를 설정해야 한다. local.conf
파일에 다음 설정을 추가하여 pTest 기능을 활성화한다:
EXTRA_IMAGE_FEATURES += "ptest"
패키지 구성
각 패키지의 레시피 파일에서도 pTest 설정이 필요하다. 이는 보통 ptest-enabled
클래스를 상속하고, 추가된 테스트를 정의하는 방식으로 이루어진다. 예를 들어, 아래는 sample 패키지의 레시피이다:
inherit ptest
SRC_URI += "file://run-ptest"
do_compile() {
# Custom compile instructions
}
do_install() {
# Custom install instructions
}
do_compile_ptest() {
# Compile instructions specifically for test cases
}
do_install_ptest() {
# Install instructions specifically for test cases
install -d ${D}${PTEST_PATH}
install -m 755 ${B}/tests/*${D}${PTEST_PATH}
}
이러한 설정은 Yocto 빌드 시스템이 pTest 환경을 인식하고 빌드 시 테스트를 포함하도록 돕는다.
자동화된 테스트 실행
테스트 실행 스크립트 작성
자동화된 테스트 실행을 위해서는 실행 스크립트를 작성하여 여러 패키지의 테스트를 일관되게 실행할 수 있다. 예를 들어, 다음과 같은 Bash 스크립트를 작성할 수 있다:
#!/bin/bash
run_ptests() {
local image=$1
local target=$2
# Boot the image on the target
deploy_image $image$target
# Run ptests on the target
ssh root@${target} "ptest-runner"
}
run_ptests "core-image-minimal" "192.168.0.100"
CI/CD 통합
자동화된 테스트 환경을 효과적으로 운영하기 위해서는 CI/CD(Continuous Integration/Continuous Deployment) 파이프라인에 통합하는 것이 중요하다. Jenkins, GitLab CI, Travis CI 등 다양한 CI 툴을 사용할 수 있다.
Jenkins 설정
Jenkins를 사용하여 Yocto 프로젝트의 빌드와 테스트를 자동화할 수 있는 파이프라인 예시는 다음과 같다:
- Jenkinsfile 작성
groovy
pipeline {
agent any
stages {
stage('Clone Repository') {
steps {
git 'https://your-repo-url'
}
}
stage('Build Yocto Image') {
steps {
sh '''
source oe-init-build-env
bitbake core-image-minimal
'''
}
}
stage('Deploy Image') {
steps {
sh '''
# Custom script to deploy the built image to target
./deploy_image.sh core-image-minimal
'''
}
}
stage('Run Tests') {
steps {
sh '''
# Custom script to run pTests on the target
./run_tests.sh
'''
}
}
}
}
- 배포 스크립트 (
deploy_image.sh
) 작성
```bash #!/bin/bash
IMAGE=$1 TARGET_IP="192.168.0.100"
scp tmp/deploy/images/qemux86-64/{IMAGE}.wic root@{TARGET_IP}:/path/to/deploy/ ssh root@{TARGET_IP} "dd if=/path/to/deploy/{IMAGE}.wic of=/dev/sdX bs=4M && sync && reboot" ```
- 테스트 스크립트 (
run_tests.sh
) 작성
```bash #!/bin/bash
TARGET_IP="192.168.0.100"
ssh root@${TARGET_IP} "ptest-runner" ```
테스트 결과 보고
자동화된 테스트를 실행한 후에는 테스트 결과를 수집하고 이를 보고하는 과정이 필요하다. 대부분의 CI 툴은 자동화된 테스트 결과를 시각화하고 이를 대시보드 형태로 제공하는 기능을 갖추고 있다.
Jenkins 테스트 결과 처리
Jenkins에서는 JUnit 플러그인을 사용하여 테스트 결과를 보고할 수 있다:
-
JUnit 플러그인 설치 Jenkins 관리(Manage Jenkins) -> 플러그인 관리(Manage Plugins) -> "JUnit" 검색 및 설치.
-
Jenkinsfile 수정
groovy
pipeline {
agent any
stages {
stage('Clone Repository') {
steps {
git 'https://your-repo-url'
}
}
stage('Build Yocto Image') {
steps {
sh '''
source oe-init-build-env
bitbake core-image-minimal
'''
}
}
stage('Deploy Image') {
steps {
sh '''
./deploy_image.sh core-image-minimal
'''
}
}
stage('Run Tests') {
steps {
sh '''
./run_tests.sh
'''
}
post {
always {
junit 'path/to/test-results.xml'
}
}
}
}
}
run_tests.sh
스크립트를 조정하여 ptest-runner
의 출력을 JUnit 호환 XML 형식으로 저장해야 한다. 이렇게 하면 Jenkins가 이러한 파일을 읽어들이고 대시보드에 테스트 결과를 표시할 수 있다.
자동화된 테스트 환경을 통해 Yocto 프로젝트의 품질을 유지하고 지속적으로 개선할 수 있다. 적절한 테스트 프레임워크와 CI/CD 통합을 통해 개발 과정의 효율성을 극대화할 수 있다.