OpenStack Integration Test Suite 가이드

Red Hat OpenStack Platform 16.1

OpenStack Integration Test Suite 소개

OpenStack Documentation Team

초록

배포를 검증할 수 있도록 Red Hat OpenStack Platform 환경에서 OpenStack Integration Test Suite(tempest)를 설치, 구성 및 관리합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

Red Hat 문서에 관한 피드백 제공

문서 개선을 위한 의견을 보내 주십시오. Red Hat이 어떻게 이를 개선하는지 알려주십시오.

DDF(직접 문서 피드백) 기능 사용

특정 문장, 단락 또는 코드 블록에 대한 직접 주석은 피드백 추가 DDF 기능을 사용하십시오.

  1. 다중 페이지 HTML 형식으로 설명서를 봅니다.
  2. 문서 오른쪽 상단에 Feedback (피드백) 버튼이 표시되는지 확인합니다.
  3. 주석 처리하려는 텍스트 부분을 강조 표시합니다.
  4. 피드백 추가를 클릭합니다.
  5. 주석을 사용하여 Add Feedback (피드백 추가) 필드를 작성합니다.
  6. 선택 사항: 설명서 팀이 문제에 대한 자세한 내용을 문의할 수 있도록 이메일 주소를 추가하십시오.
  7. Submit(제출)을 클릭합니다.

1장. OpenStack Integration Test Suite(tempest) 검증

RHOSP(Red Hat OpenStack Platform)는 다양한 프로젝트로 구성되므로 RHOSP 클러스터 내의 프로젝트의 상호 운용성을 테스트하는 것이 중요합니다. OpenStack Integration Test Suite는 RHOSP 배포를 위한 통합 테스트를 자동화합니다. 테스트를 실행하여 클러스터가 예상대로 작동하는지 확인할 수 있습니다. 특히 업그레이드 후 잠재적인 문제에 대한 조기 경고를 제공하기 위해 출력을 테스트합니다.

Integration Test Suite에는 OpenStack API 검증 및 시나리오 테스트와 자체 검증을 위한 단위 테스트가 포함되어 있습니다. Integration Test Suite는 테스트 러너로 tempest와 함께 OpenStack 공용 API를 사용하여 블랙박스 테스트를 수행합니다.

OpenStack Integration Test Suite(tempest)는 RHOSP(Red Hat OpenStack Platform) 핵심 프로젝트에 대한 커밋의 게이트 역할을 하며 클라우드 배포에 부하를 생성하는 스트레스 테스트를 수행할 수 있으며 CLI 테스트를 수행하여 명령줄의 응답 형식을 확인할 수 있습니다. RHOSP 클라우드 배포에 대해 시나리오 테스트API 테스트를 실행할 수 있습니다.

시나리오 테스트

시나리오 테스트는 일반적인 최종 사용자 작업 워크플로를 시뮬레이션하여 서비스 간 통합 지점을 테스트합니다. 테스트 프레임워크는 구성을 수행하고 서비스 간 통합을 테스트한 다음 자동으로 제거됩니다. 테스트에서 사용하는 클라이언트 라이브러리를 명확히 설명하는 서비스로 테스트에 태그를 지정합니다.

다음 시나리오는 사용 사례를 기반으로 합니다.

  • 이미지 서비스에 이미지 업로드
  • 이미지에서 인스턴스 배포
  • 인스턴스에 볼륨 연결
  • 인스턴스의 스냅샷 생성
  • 인스턴스에서 볼륨 분리

API 테스트

API 테스트는 OpenStack API를 검증합니다. 테스트에서는 OpenStack API의 OpenStack Integration Test Suite 구현을 사용합니다. 유효한 JSON과 유효하지 않은 JSON을 둘 다 사용하여 오류 응답이 유효한지 확인할 수 있습니다. 테스트를 개별적으로 실행할 수 있으며 이전 테스트 상태를 사용하지 않아도 됩니다.

2장. Integration Test Suite(tempest) 설치

director 또는 수동 설치와 함께 Integration Test Suite를 설치할 수 있습니다.

2.1. 사전 요구 사항

2.2. Director와 Integration Test Suite 설치

RHOSP(Red Hat OpenStack Platform) director를 사용하여 테스트 모음을 자동으로 설치합니다.

사전 요구 사항

절차

  1. 언더클라우드 호스트에 stack 사용자로 로그인합니다.
  2. stack 사용자의 홈 디렉터리에 있는 undercloud.conf 파일을 편집합니다.
  3. enable_tempest 매개 변수를 true로 설정합니다.

    enable_tempest = true
  4. openstack undercloud install 명령을 실행하여 언더클라우드에 추가 설정을 포함합니다.

    $ openstack undercloud install

2.3. 수동으로 Integration Test Suite 설치

director를 사용하여 자동으로 Integration Test Suite(tempest)를 설치하지 않으려면 나중에 수동으로 설치를 수행할 수 있습니다. 기본 네트워크 구성이 있는지 확인하고 Integration Test Suite 패키지를 설치하고, OpenStack 서비스 및 기타 테스트 동작 스위치에 대한 세부 정보가 포함된 구성 파일을 생성해야 합니다.

절차

  1. RHOSP(Red Hat OpenStack Platform) 환경에서 다음 네트워크를 사용할 수 있는지 확인합니다.

    • 유동 IP를 제공할 수 있는 외부 네트워크입니다.
    • 사설 네트워크.

      라우터를 통해 이러한 네트워크를 연결합니다.

      1. 사설 네트워크를 생성하려면 네트워크 배포에 따라 다음 옵션을 지정합니다.

        $ openstack network create <network_name> --share
        $ openstack subnet create <subnet_name> --subnet-range <address/prefix> \
          --network <network_name>
        $ openstack router create <router_name>
        $ openstack router add subnet <router_name> <subnet_name>
      2. 공용 네트워크를 생성하려면 네트워크 배포에 따라 다음 옵션을 지정합니다.

        $ openstack network create <network_name> --external \
          --provider-network-type flat \
          --provider-physical-network datacentre
        $ openstack subnet create <subnet_name> --subnet-range <address/prefix> \
          --gateway <default_gateway> --no-dhcp --network <network_name>
        $ openstack router set <router_name> --external-gateway <public_network_name>
  2. Integration Test Suite와 관련된 패키지를 설치합니다.

    $ sudo dnf -y install openstack-tempest

    이 명령은 Tempest 플러그인을 설치하지 않습니다. RHOSP 설치에 따라 플러그인을 수동으로 설치해야 합니다.

  3. 환경에 있는 각 구성 요소에 적절한 Tempest 플러그인을 설치합니다. 예를 들어 keystone, neutron, cinder, telemetry 플러그인을 설치하려면 다음 명령을 입력합니다.

    $ sudo dnf install python3-keystone-tests-tempest python3-neutron-tests-tempest python3-cinder-tests-tempest python3-telemetry-tests-tempest

    전체 패키지 목록은 Integration Test Suite 패키지를 참조하십시오.

참고

openstack-tempest-all 패키지를 설치할 수도 있습니다. 이 패키지에는 모든 tempest 플러그인이 포함되어 있습니다.

2.3.1. Integration Test Suite 패키지

dnf 검색을 사용하여 tempest 테스트 패키지 목록을 검색합니다.

$ sudo dnf search $(openstack service list -c Name -f value) 2>/dev/null | grep test | awk '{print $1}'
구성 요소패키지 이름

Barbican

python3-barbican-tests-tempest

cinder

python3-cinder-tests-tempest

designate

python3-designate-tests-tempest

ec2-api

python3-ec2api-tests-tempest

Heat

python3-heat-tests-tempest

Ironic

python3-ironic-tests-tempest

Keystone

python3-keystone-tests-tempest

Kuryr

python3-kuryr-tests-tempest

Manila

python3-manila-tests-tempest

mistral

python3-mistral-tests-tempest

networking-bgvpn

python3-networking-bgpvpn-tests-tempest

networking-l2gw

python3-networking-l2gw-tests-tempest

Neutron

python3-neutron-tests-tempest

nova-join

python3-novajoin-tests-tempest

Octavia

python3-octavia-tests-tempest

patrole

python3-patrole-tests-tempest

telemetry

python3-telemetry-tests-tempest

tripleo-common

python3-tripleo-common-tests-tempest

Zaqar

python3-zaqar-tests-tempest

참고

python3-telemetry-tests-tempest 패키지에는 aodh, panko, gnocchi 및 ceilometer 테스트용 플러그인이 포함되어 있습니다. python3-ironic-tests-tempest 패키지에는 ironic 및 ironic-inspector용 플러그인이 포함되어 있습니다.

3장. Integration Test Suite(tempest) 구성

Integration Test Suite로 환경 검증을 시작하기 전에 작업 영역을 생성하고 /etc/tempest.conf 구성 파일을 생성해야 합니다.

3.1. 사전 요구 사항

3.2. 작업 공간 생성

Integration Test Suite(tempest) 구성 및 출력을 위한 작업 영역을 만듭니다.

절차

  1. 대상 배포의 자격 증명을 가져옵니다.

    • 대상이 언더클라우드에 있는 경우 언더클라우드의 인증 정보를 가져옵니다.

      # source stackrc
    • 대상이 오버클라우드에 있는 경우 오버클라우드의 인증 정보를 가져옵니다.

      # source overcloudrc
  2. Tempest 초기화 :

    # tempest init mytempest
    # cd mytempest

    이 명령은 mytempest 라는 Tempest 작업 공간을 생성합니다.

  3. 선택 사항: 기존 작업 영역 목록을 보려면 다음 명령을 입력합니다.

    # tempest workspace list
  4. etc/tempest.conf 파일을 생성합니다.

    # discover-tempest-config --deployer-input ~/tempest-deployer-input.conf \
    --debug --create --network-id <UUID>

    UUID 를 외부 네트워크의 UUID로 바꿉니다.

    discover-tempest-config 이전의 config_tempest.py 는 동일한 매개 변수를 사용합니다. python-tempestconfopenstack-tempest 의 종속성이며 discover-tempest-config 를 제공합니다.

    참고

    언더클라우드에 대한 etc/tempest.conf 파일을 생성하려면 tempest-deployer-input.conf 파일의 지역 이름이 Undercloud 배포의 이름과 동일해야 합니다. 이러한 이름이 일치하지 않는 경우 언더클라우드의 지역 이름과 일치하도록 tempest-deployer-input.conf 파일의 지역 이름을 업데이트합니다.

  5. 언더클라우드의 지역 이름을 검사하려면 다음 명령을 입력합니다.

    $ source stackrc
    $ openstack region list
  6. 오버클라우드의 지역 이름을 검사하려면 다음 명령을 입력합니다.

    $ source overcloudrc
    $ openstack region list

환경에 맞게 기본 tempest.conf 파일을 수정해야 할 수 있습니다. 자세한 내용은 확장 목록 구성 및 heat_plugin 구성을 참조하십시오.

검증

  • 현재 Tempest 구성을 확인합니다.

    # tempest verify-config -o <output>

출력 값은 Integration Test Suite가 업데이트된 구성을 작성하는 출력 파일입니다. 원본 구성 파일과는 다릅니다.

3.3. Integration Test Suite를 수동으로 구성

discover-tempest-config 명령은 tempest.conf 파일을 자동으로 생성합니다. 그러나 tempest.conf 파일이 환경 구성에 해당하는지 확인해야 합니다.

3.3.1. Integration Test Suite 확장 목록 수동 구성

기본 tempest.conf 파일에는 각 구성 요소에 대한 확장 기능 목록이 포함되어 있습니다. tempest.conf 파일의 각 구성 요소에 대한 api_extensions 속성을 검사하고 확장 기능 목록이 배포에 해당하는지 확인합니다.

배포에서 사용할 수 있는 확장 기능이 tempest.conf 파일의 api_extensions 속성의 확장 목록에 해당하지 않으면 구성 요소가 Tempest 테스트에 실패합니다. 이 실패를 방지하려면 배포에 사용할 수 있는 확장 프로그램을 확인하고 api_extensions 매개변수에 포함해야 합니다. 배포에서 Network, Compute, Volume 또는 Identity 확장 목록을 가져오려면 다음 명령을 실행합니다.

절차

  • 배포에서 Network, Compute, Volume 또는 Identity 확장 목록을 검색하려면 다음 명령을 입력합니다.

    $ openstack extension list [--network] [--compute] [--volume] [--identity]

3.3.2. heat_plugin을 수동으로 설정

tempest.conf 파일에서 heat_plugin 을 수동으로 구성할 수 있습니다.

절차

  • 다음 예제를 사용하여 배포에 따라 heat_plugin 을 구성합니다.

    [service_available]
    heat = True
    
    [heat_plugin]
    username = demo
    password = ***
    project_name = demo
    admin_username = admin
    admin_password = ****
    admin_project_name = admin
    auth_url = http://10.0.0.110:5000//v3
    auth_version = 3
    user_domain_id = default
    project_domain_id = default
    user_domain_name = Default
    project_domain_name = Default
    region = regionOne
    fixed_network_name = demo_project_network
    network_for_ssh = public
    floating_network_name = nova
    instance_type = m1.nano
    minimal_instance_type = m1.micro
    image_ref = 7faed41e-a56c-4971-bf48-24e4e23e69a5
    minimal_image_ref = 7faed41e-a56c-4971-bf48-24e4e23e69a5

openstack network list 명령을 사용하여 fixed_network_name,network_for_ssh, floating_network_name 매개변수의 네트워크를 식별합니다.

참고

tempest.conf 파일의 [service_available] 섹션에서 heatTrue 로 설정해야 하며 [heat_plugin] 섹션의 username 속성에 역할 멤버가 있어야 합니다. 예를 들어 다음 명령을 입력하여 demo 사용자에 member 역할을 추가합니다.

$ openstack role add --user demo --project demo member

3.4. Integration Test Suite 로깅 구성

Tempest 작업 영역 내의 logs 디렉터리에 있는 로그 파일의 기본 위치를 변경할 수 있습니다.

절차

  1. tempest.conf[DEFAULT] 섹션의 log_dir 을 원하는 디렉터리로 설정합니다.

    [DEFAULT]
    log_dir = <directory>
  2. tempest.conf[DEFAULT] 섹션 아래에 고유한 로깅 구성 파일이 있는 경우 log_config_append 를 파일로 설정합니다.

    [DEFAULT]
    log_config_append = <file>

log_config_append 특성을 설정하면 Integration Test Suite에서 log_dir 속성을 포함하여 tempest.conf 의 기타 모든 로깅 구성을 무시합니다.

3.5. Integration Test Suite 마이크로버전 테스트 구성

Integration Test Suite(tempest)는 안정적인 인터페이스를 제공하여 API 마이크로버전을 테스트합니다. 이러한 인터페이스를 사용하여 마이크로버전 테스트를 구현하려면 다음 단계를 완료합니다.

절차

  1. 대상 마이크로버전을 지정하도록 tempest.conf 구성 파일에서 옵션을 구성합니다. 지원되는 마이크로 버전이 OpenStack 클라우드의 마이크로 버전에 해당하는지 확인하도록 이러한 옵션을 구성합니다.
  2. 단일 통합 테스트 제품군 작업에서 여러 마이크로버전 테스트를 실행할 대상 마이크로버전 범위를 지정할 수 있습니다.

    예를 들어 구성 파일의 [compute] 섹션에서 계산 서비스의 마이크로버전 범위를 제한하려면 min_microversion 및 max_microversion 매개 변수에 값을 할당합니다.

    [compute]
    min_microversion = 2.14
    max_microversion = latest

4장. Integration Test Suite(tempest) 리소스 정리

OpenStack Integration Test Suite(tempest)를 사용하여 배포를 확인하기 전에 --init-saved-state 플래그와 함께 cleanup 명령을 실행합니다. 이 명령은 환경을 검사하여 네트워크, 볼륨, 이미지, 플레이버, 프로젝트 및 사용자와 같은 리소스를 검색합니다. 검색된 리소스는 saved_state.json 이라는 파일에 저장됩니다. tempest cleanup 명령을 실행하면 saved_state.json 파일에 기록되지 않은 모든 리소스가 삭제됩니다.

사전 요구 사항

4.1. 예행 연습

정리를 실행하기 전에 예행 연습을 수행합니다. 예행 연습에는 실제로 파일을 삭제하지 않고 통합 테스트 제품군이 정리에 의해 삭제되는 파일이 나열됩니다. dry_run.json 파일에는 정리가 삭제되는 파일 목록이 포함되어 있습니다.

절차

  1. 예행 연습을 완료합니다.

    # tempest cleanup --dry-run
  2. dry_run.json 파일을 검토하여 정리해도 환경에 필요한 파일이 삭제되지 않는지 확인합니다.

4.2. Tempest 정리를 수행합니다.

Tempest 테스트를 실행하기 전에 저장된 상태를 초기화해야 합니다. 이렇게 하면 saved_state.json 파일이 생성되어 정리에서 유지해야 하는 오브젝트를 삭제할 수 없습니다.

주의

--init-saved-state 플래그를 사용하여 cleanup 명령을 실행하지 않으면 RHOSP 오브젝트가 삭제됩니다.

--init-saved-state 를 사용하여 cleanup 명령을 실행한 후 오브젝트를 생성하는 경우 후속 tempest 명령으로 해당 오브젝트를 삭제할 수 있습니다.

절차

  1. saved_state.json 파일을 생성하도록 저장된 상태를 초기화합니다.

    # tempest cleanup --init-saved-state
  2. 정리를 수행합니다.

    # tempest cleanup

tempest cleanup 명령은 tempest 리소스를 삭제하지만 프로젝트 또는 tempest 관리자 계정을 삭제하지 않습니다.

참고

유지하거나 제거하려는 오브젝트를 포함하거나 제외하도록 stored _state.json 파일을 수정할 수 있습니다.

5장. Integration Test Suite(tempest)를 사용하여 OpenStack 클라우드 검증

tempest run 명령을 사용하여 여러 가지 방법으로 Integration Test Suite 검증을 실행할 수 있습니다. 단일 tempest run 명령에서 여러 옵션을 결합할 수도 있습니다.

5.1. 사전 요구 사항

5.2. 사용 가능한 테스트 나열

--list-tests 옵션을 사용하여 사용 가능한 모든 테스트를 나열합니다.

절차

  • 사용 가능한 tempest 테스트 목록을 보려면 --list-tests 또는 -l 옵션과 함께 tempest run 명령을 입력합니다.

    # tempest run -l

5.3. 스모크 테스트 실행

스모크 테스트는 가장 중요한 기능만 포함하는 예비 테스트의 유형입니다. 이러한 테스트는 포괄적이지 않지만 스모크 테스트를 실행하면 문제를 식별하는 시간을 절약할 수 있습니다.

절차

  • 허용 목록 파일을 사용하려면 --whitelist-file 옵션과 함께 tempest run 명령을 입력합니다.

    # tempest run --smoke

5.4. 허용 목록 파일을 사용하여 테스트 전달

허용 목록 파일은 포함할 테스트를 선택하는 정규 표현식이 포함된 파일입니다. 하나 이상의 정규 표현식을 사용하는 경우 각 표현식을 별도의 행에 지정합니다.

절차

  • allowlist 파일을 사용하려면 --whitelist-file 또는 -w 옵션을 사용하여 tempest run 명령을 입력합니다.

    # tempest run -w <whitelist_file>

5.5. 블록 목록 파일을 사용하여 테스트 건너뛰기

blocklist 파일은 제외하려는 테스트를 선택하는 정규 표현식이 포함된 파일입니다. 하나 이상의 정규 표현식을 사용하는 경우 각 표현식을 별도의 행에 지정합니다.

절차

  • blocklist 파일을 사용하려면 --blacklist-file 또는 -b 옵션을 사용하여 tempest run 명령을 입력합니다.

    # tempest run -b <blacklist_file>

5.6. 병렬 또는 시리즈로 테스트 실행

테스트를 병렬로 실행하거나 연속해서 실행할 수 있습니다. 병렬 테스트를 실행할 때 사용할 작업자 수를 정의할 수도 있습니다. 기본적으로 Integration Test Suite는 사용 가능한 각 CPU에 하나의 작업자를 사용합니다.

테스트를 직렬 또는 병렬로 실행하도록 선택합니다.

  • 테스트를 직렬로 실행합니다.

    # tempest run --serial
  • 테스트를 병렬로 실행합니다(기본값).

    # tempest run --parallel
  • 테스트를 병렬로 실행할 때 사용할 작업자 수를 지정하려면 --concurrency 또는 -c 옵션을 사용합니다.

    # tempest run --concurrency <workers>

5.7. 특정 테스트 실행

regex 옵션을 사용하여 특정 테스트를 실행합니다. 정규 표현식은 Python 정규식이어야 합니다.

절차

  • 다음 명령을 실행합니다.

    # tempest run --regex <regex>
  • 예를 들어 다음 예제 명령을 사용하여 tempest.scenario로 시작하는 이름이 있는 모든 테스트를 실행합니다.

    # tempest run --regex ^tempest.scenario

5.8. Integration Test Suite 오브젝트 삭제

tempest cleanup 명령을 입력하여 모든 Integration Test Suite(tempest) 리소스를 삭제합니다. 이 명령은 프로젝트도 삭제하지만 명령은 관리자 계정을 삭제하지 않습니다.

절차

  • tempest 리소스를 삭제합니다.

    # tempest cleanup --delete-tempest-conf-objects

법적 공지

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.