Circleci를 사용하여 병렬 테스트를 실행하는 방법

7932 단어
통상적으로 테스트 인원은 수백, 심지어 수천 개의 테스트로 구성된 대형 코드 라이브러리를 처리해야 한다.대부분의 웹 사이트나 응용 프로그램 기능을 검증하는 테스트는 서로 다른 플랫폼(장치, 브라우저, 운영체제)에서 다시 실행되어야 한다.
그러나 정확한 전략과 기술이 없다면 서로 다른 플랫폼에서 이렇게 많은 테스트를 실행하는 것은 매우 어려울 것이다. 번거롭고 틀리기 쉽다는 것은 말할 것도 없다. 이런 상황에서 가장 좋고 가장 간단한 테스트 방법은 병행 테스트를 사용하는 것이다.
본고는 Circleci 등 유행하고 유용한 CI/CD 도구를 사용하여 병행 테스트를 어떻게 실행하는지 연구하고자 한다.
하지만 첫 번째는 첫 번째다.

카탈로그

  • 병행 테스트는 무엇입니까?
  • Circleci
  • 와 테스트 실행 방법
  • Circleci에서 병행성을 설정하는 방법
  • 테스트 파일 버스트 방법
  • 테스트를 글로벌화
  • 버스트 테스트
  • 시간대별
  • 환경 변수 버스트 테스트 사용 방법
  • 버스트 테스트 실행 방법
  • 병렬 테스트란?


    parallel testing에서 여러 브라우저 장치 운영체제 조합에서 서로 다른 모듈이나 응용 프로그램을 동시에 테스트할 수 있습니다. 하나하나 테스트하는 것이 아니라.한 장면에서 우리는 두 개의 사용 가능한 소프트웨어 버전이 있고 이 두 버전에 대해 반드시 검사를 해서 안정성과 호환성을 확보해야 한다. 그러면 두 버전에서 동시에 테스트를 실행하고 결과를 얻으며 오류를 더욱 빨리 검출하는 것이 더욱 쉽다.
    병행 테스트는 집행 시간과 작업량을 줄여 교부 시간을 가속화시켰다.그것은 cross browser testing, compatibility testing, 현지화, internalization testing의 상황에서 특히 유용하다.

    Circleci와 테스트를 병행하는 방법


    Circleci를 사용하여 병행 테스트를 탐색하기 전에 왜 진정한 브라우저와 장치에서 병행 테스트를 실행하는지 신속하게 설명하는 것이 중요하다.
    emulators and simulators에서 다운로드와 테스트는 더 쉬운 것 같지만 부족한 점이 많아 신뢰할 수 있는 테스트 환경을 제공하지 못한다.예를 들어, 그들은 낮은 네트워크 조건, 낮은 배터리 전량, 또는 전보를 시뮬레이션할 수 없다.일반적으로 실제 브라우저와 장치의 모든 기능을 복제할 수 없기 때문에, 그것들에서 실행된 테스트 결과에 심각한 오류가 발생하기 쉽다.
    이제 Circleci로 이동합니다.
    CircleciCI는 테스트를 동시에 실행하고 더 빨리 완료할 수 있는 기능을 제공합니다.
    Circleci를 사용하여 테스트를 실행하면 일반적으로 단일 VM에서 실행됩니다.지금은 테스트가 많을수록 한 기계에서 완성하는 데 필요한 시간이 많아진다.이 시간을 줄이기 위해서, 테스트를 여러 개의 단독 실행기에 분포해서 동시에 실행할 수 있습니다.
    이 점을 위해서, 작업에 몇 개의 단독 실행기를 회전시켜야 하는지를 정의하기 위해 병렬 단계를 지정해야 합니다.그런 다음 테스트 파일을 분리하기 위해 Circleci CLI 또는 환경 변수를 사용하여 각 시스템을 개별적으로 구성할 수 있습니다.

    Circleci에서 병행성을 설정하는 방법


    테스트 세트는 일반적으로 작업 단계에서 정의된다.circleci/config.yml 파일.따라서 우선 프로필에 병렬 단계를 설정합니다.
    이 병렬 키는 테스트를 실행하기 위해 Circleci가 얼마나 많은 독립된 실행기를 만들지 정의합니다.이 점을 하려면 테스트를 실행하기 전에 이 키를 추가하십시오.
    Circleci의 가격 계획에 따라 병렬 값은 사용자의 요구를 충족시키기 위해 증가할 수 있습니다.
    작업을 병렬로 실행하려면 parallelism 키를 1보다 큰 값으로 설정하십시오.
    # ~/.circleci/config.yml
    
    version: 2
    
    jobs:
    
      test:
    
        docker:
    
          - image: cimg/<language>:<version TAG>
    
            auth:
    
              username: yourdockerhub-user
    
              password: $DOCKERHUB_PASSWORD  
    
        parallelism: 4
    
    이제 실제 테스트를 버스트하기 위해 Circleci CLI(명령줄 인터페이스)를 사용하여 다른 명령을 호출하여 테스트를 버스트합니다.

    CirclecICI CLI를 사용하여 테스트 파일 버스트 방법


    Circleci는 용기 간 자동 할당 테스트를 지원합니다.파일 이름이나 클래스 이름을 기반으로 하는 분배는 우리가 사용하는 테스트 실행 프로그램의 요구에 따라 결정됩니다.CirclecICI CLI가 필요하며 런타임 시 자동으로 빌드에 적용됩니다.
    테스트 파일을 분할하는 명령은glob과 split입니다.
  • glob는 기본적으로 파일 이름 목록을 지정한 특정 모델과 일치시키는 모델이다.
  • 기본적으로 split 명령은 파일 이름 목록에 따라 테스트를 분할하지만, 시간 데이터나 파일 크기에 따라 테스트를 분할할 수 있습니다.
    이 두 명령을 사용하면 테스트를 서로 독립된 여러 실행기로 나눌 수 있습니다. 위의 그림과 같습니다.
  • 세계 일주 시험


    CircleciCI CLI는 테스트 키트를 정의하는 데 도움을 주기 위해 다음 모드를 사용하여 테스트 파일을 전역적으로 바인딩할 수 있습니다.
  • * 모든 문자 시퀀스와 일치(경로 구분자 제외)
  • **모든 문자 시퀀스 일치(경로 구분자 포함)
  • ? 단일 문자 일치(경로 구분자 제외)
  • [abc]는 모든 문자(경로 구분자 포함하지 않음)와 괄호
  • 의 문자를 일치시킨다
  • {foo,bar,...} 괄호의 대체 항목이 일치하면 문자 서열과 일치합니다
    따라서 glob 테스트 파일을 만들려면 Circleci tests glob 명령에 하나 이상의 모드를 전달하십시오.
  • 이제 프로필에서 이 점을 어떻게 실현하는지 봅시다.
    circleci tests glob "tests/unit/*.java" "tests/functional/*.java"
    
    다음과 같이 구성 파일의 glob 명령과 echo 명령을 사용하여 패턴이 일치하는 결과를 확인할 수 있습니다.
    # ~/.circleci/config.yml
    
    version: 2
    
    jobs:
    
      test:
    
        docker:
    
          - image: cimg/<language>:<version TAG>
    
            auth:
    
              username: mydockerhub-user
    
              password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference
    
        parallelism: 4
    
        steps:
    
          - run:
    
              command: |
    
                echo $(circleci tests glob "foo/**/*" "bar/**/*")
    
                circleci tests glob "foo/**/*" "bar/**/*" | xargs -n 1 echo
    

    버스트 테스트


    기본적으로 split 명령은 파일 이름 목록에 따라 테스트를 분할하지만, 시간 데이터나 파일 크기에 따라 테스트를 분할할 수도 있습니다.우리 모든 분할 기술에 대해 토론합시다.

    이름별로 나누다


    기본 버스트 기술입니다.따라서 – split by 로고 지정 방법을 사용하지 않으면Circleci는 파일 이름/클래스 이름 목록을 필요로 하고 테스트 이름의 알파벳 순서에 따라 분리해야 한다.
    다음과 같은 몇 가지 방법이 있습니다.
  • 테스트 파일 이름으로 텍스트 파일 만들기
  • circleci tests split test_filenames.txt
    
  • 테스트 파일의 경로 제공
  • circleci tests split < /path/to/items/to/split
    
  • 파이프로 대량의 테스트 파일 수송
  • circleci tests glob "test/**/*.java" | circleci tests split
    
    이름 목록이 제공되면 CLI는 사용 가능한 컨테이너의 수와 현재 컨테이너 인덱스를 검색한 다음 확인 버스트 알고리즘을 사용하여 테스트 파일을 사용 가능한 모든 컨테이너에 버스트합니다.

    시간 분할


    이것은 한 세트의 병렬 실행기를 뛰어넘어 테스트 세트를 최적화하는 가장 좋은 방법이다.이것은 테스트가 가장 균일한 방식으로 진행되는 것을 확보하여 전체적으로 테스트 시간을 단축시켰다.
    테스트 타이밍에 따라 분할하려면 - split by 로고를 타이밍 분할 유형과 함께 사용합니다.그리고 사용 가능한 시간 데이터를 분석하고 가능한 한 병행 운행하는 용기에서 테스트를 균등하게 분리한다.
    circleci tests glob "**/*.go" | circleci tests split --split-by=timings
    
    테스트 세트가 성공적으로 실행될 때마다 시간 계산 데이터는 store_test_results 단계에서 경로가 지정한 디렉터리에서 저장됩니다.이 시간 데이터는 모든 파일 이름이나 클래스가 테스트를 완성하는 데 필요한 시간을 나타냅니다. 이것은 사용하는 언어에 달려 있습니다.
    고려해야 할 것은 store test results를 사용하지 않으면 분해 테스트에 사용할 시간 데이터가 없습니다.
    CLI는 테스트 키트에서 생성된 타이머 데이터에 파일 이름과 클래스 이름을 모두 표시하기를 원합니다.기본적으로 분할은 기본적으로 파일 이름이지만 -timings 형식 로고를 사용하여 클래스 이름을 지정할 수 있습니다.
    cat my_java_test_classnames | circleci tests split --split-by=timings --timings-type=classname
    
    부분적으로 찾은 테스트 결과에 대해, 우리는 자동으로 시간 데이터를 찾지 못한 모든 테스트에 무작위 작은 값을 분배할 것이다.- time default 플래그를 사용하여 이 지정된 값을 특정 값으로 대체할 수 있습니다.
    circleci tests glob "**/*.rb" | circleci tests split --split-by=timings --time-default=10s
    
    또한 타이밍 데이터를 수동으로 저장하고 검색하려면 store_artifacts 절차를 사용합니다.

    파일 크기별로 분할


    파일 크기별로 테스트를 분할할 수도 있다.이를 위해 – split by 플래그를 filesize split 유형과 함께 사용하십시오.
    circleci tests glob “**/*.go” | circleci tests split –split-by=filesize
    

    환경 변수 버스트 테스트 사용 방법


    Circleci는 CLI 대신 각 컨테이너를 개별적으로 구성하는 데 사용할 수 있는 두 가지 환경 변수를 제공합니다.
    총 원 노드 수 ** 및 ** 원 노드 인덱스입니다.
    **CIRCLE NODE TOTAL**은 작업을 실행하는 데 사용되는 병렬 컨테이너의 총 수입니다.
    **CIRCLE NODE INDEX**는 현재 실행 중인 특정 컨테이너의 인덱스입니다.환경 변수는 우리가 병행성을 완전히 통제할 수 있도록 보장한다.

    버스트 테스트 실행 방법


    이제 테스트를 전체적으로 구분하고 분리한 후에 그것을 실행할 때가 되었다.테스트 그룹과 테스트 실행을 결합시키려면, 그룹의 테스트를 파일에 저장한 다음, 이 파일을 테스트 실행 프로그램에 전달하는 것을 고려할 수 있다.
    circleci tests glob "test/**/*.rb" | circleci tests split > /tmp/tests-to-run
    
    bundle exec rspec $(cat /tmp/tests-to-run)
    
    $CIRCLE NODE INDEX 및 $CIRCLE NODE TOTAL에 따라 각 컨테이너에서 실행할 파일/tmp/테스트의 내용이 다릅니다.

    결론


    Circleci 응용 프로그램을 사용하여 병행성을 테스트합니다. 기본적인 기술 방법이 무엇이든지 간에 전체적인 실행 시간을 가속화하고, 어떤 경우에는 시간을 절반으로 줄일 수 있기 때문입니다.
    본고의 절차를 이용하여Circleci에서 병행 테스트를 실행하여 더욱 빠른 결과를 얻고 속도를 CI/CD 파이프에 쉽게 집적할 수 있다.

    좋은 웹페이지 즐겨찾기