병렬 작업으로 CircleCI에서 빠른 RSpec 테스트를 실행하고 CircleCI 웹 UI에서 멋진 JUnit XML 보고서를 갖는 방법
12263 단어 railstestingproductivityruby
RoR 프로젝트를 구성하는 Ruby gem
필요한 핵심 요소는 다음과 같습니다.
rspec_junit_formatter - 테스트 실패에 대한 정보와 함께 실행된 테스트에 대한 XML 보고서를 생성하는 ruby gem입니다. 이 보고서는 CircleCI 웹 UI에서 표시하기 위해 CircleCI에서 자동으로 읽을 수 있습니다. 더 이상 긴 RSpec 출력을 탐색할 필요가 없습니다.
TESTS
탭에서 강조 표시된 실패한 사양을 확인하십시오 :) knapsack_pro - 병렬 CI 작업에 대한 테스트를 실행하여 모든 작업이 비슷한 시간에 작업을 완료하여 최대한 많은 시간을 절약하고 병목 현상을 제거하기 위한 Ruby gem입니다.
위의 보석을
Gemfile
에 추가하기만 하면 됩니다.group :test do
gem 'rspec'
gem 'rspec_junit_formatter'
end
group :test, :development do
gem 'knapsack_pro'
end
Knapsack Pro you will need an API token의 경우 프로젝트를 구성하려면 installation guide을 따라야 합니다.
CircleCI와 함께 대기열 모드에서
knapsack_pro
gem을 사용하는 경우 RSpec 테스트 스위트에 대한 JUnit XML 보고서와 같은 메타데이터를 수집할 수 있습니다. CircleCI의 중요한 단계는 XML 보고서를 $CIRCLE_TEST_REPORTS
디렉토리에 복사하는 것입니다. 다음은 spec_helper.rb
파일( source code from FAQ )의 전체 구성입니다.# spec_helper.rb or rails_helper.rb
# This must be the same path as value for rspec --out argument
# Note: the path should not contain '~' sign, for instance path ~/project/tmp/rspec.xml may not work.
# Please use full path instead.
TMP_RSPEC_XML_REPORT = 'tmp/rspec.xml'
# move results to FINAL_RSPEC_XML_REPORT
# so that the results won't accumulate with duplicated xml tags in TMP_RSPEC_XML_REPORT
FINAL_RSPEC_XML_REPORT = 'tmp/rspec_final_results.xml'
KnapsackPro::Hooks::Queue.after_subset_queue do |queue_id, subset_queue_id|
if File.exist?(TMP_RSPEC_XML_REPORT)
FileUtils.mv(TMP_RSPEC_XML_REPORT, FINAL_RSPEC_XML_REPORT)
end
end
실수로 XML 파일이 손상되는 것을 방지하기 위해 XML 보고서를 한 위치에서 다른 위치로 이동하려면 위의 논리가 필요합니다. 대기열 모드에서 Knapsack Pro가 테스트를 실행하면 Knapsack Pro 대기열 API에서 테스트 파일 세트를 가져와서 실행하고 XML 보고서를 생성합니다. 그런 다음 Queue API에서 다른 테스트 파일 집합을 가져오고 XML 보고서가 디스크에서 업데이트됩니다. 보고서가 디스크에 이미 있는 경우 동일한 파일을 재정의하여 보고서가 손상될 수 있습니다. 그렇기 때문에 Queue API의 각 테스트 세트가 실행된 후 파일을 다른 위치로 이동해야 합니다.
RSpec용 CircleCI YML 구성
다음은 RSpec, Knapsack Pro 및 JUnit 포맷터를 위한 완전한 CircleCI YML 구성 파일입니다.
# Ruby CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-ruby/ for more details
#
version: 2
jobs:
build:
parallelism: 10
# https://circleci.com/docs/2.0/configuration-reference/#resource_class
resource_class: small
docker:
# specify the version you desire here
- image: circleci/ruby:2.7.1-node-browsers
environment:
PGHOST: 127.0.0.1
PGUSER: my_db_user
RAILS_ENV: test
# Split slow RSpec test files by test examples
# https://knapsackpro.com/faq/question/how-to-split-slow-rspec-test-files-by-test-examples-by-individual-it
KNAPSACK_PRO_RSPEC_SPLIT_BY_TEST_EXAMPLES: true
# Specify service dependencies here if necessary
# CircleCI maintains a library of pre-built images
# documented at https://circleci.com/docs/2.0/circleci-images/
- image: circleci/postgres:10.6-alpine-ram
environment:
POSTGRES_DB: my_db_name
POSTGRES_PASSWORD: ""
POSTGRES_USER: my_db_user
# Rails verifies Time Zone in DB is the same as time zone of the Rails app
TZ: "Europe/Warsaw"
- image: redis:6.0.7
working_directory: ~/repo
environment:
TZ: "Europe/Warsaw"
steps:
- checkout
# Download and cache dependencies
- restore_cache:
keys:
- v2-dependencies-bundler-{{ checksum "Gemfile.lock" }}-{{ checksum ".ruby-version" }}
# fallback to using the latest cache if no exact match is found
- v2-dependencies-bundler-
- run:
name: install ruby dependencies
command: |
bundle install --jobs=4 --retry=3 --path vendor/bundle
- save_cache:
paths:
- ./vendor/bundle
key: v2-dependencies-bundler-{{ checksum "Gemfile.lock" }}-{{ checksum ".ruby-version" }}
# Database setup
- run: bin/rails db:prepare
- run:
name: run tests
command: |
export CIRCLE_TEST_REPORTS=/tmp/test-results
mkdir $CIRCLE_TEST_REPORTS
bundle exec rake "knapsack_pro:queue:rspec[--format documentation --format RspecJunitFormatter --out tmp/rspec.xml]"
# collect reports
- store_test_results:
path: /tmp/test-results
- store_artifacts:
path: /tmp/test-results
destination: test-results
요약
CircleCI 빌드를 훨씬 빠르게 만드는 방법을 배웠습니다! 이제 RSpec 테스트를 여러 병렬 시스템에서 자동으로 실행하여 시간을 절약할 수 있습니다. 도움이 되셨거나 궁금한 점이 있으면 알려주세요. 부담없이 sign up at Knapsack Pro 또는 아래로 내려가서 직접 해보세요.
docs.knapsackpro.com에 원래 게시됨
Reference
이 문제에 관하여(병렬 작업으로 CircleCI에서 빠른 RSpec 테스트를 실행하고 CircleCI 웹 UI에서 멋진 JUnit XML 보고서를 갖는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/arturt/how-to-run-fast-rspec-tests-on-circleci-with-parallel-jobs-and-have-nice-junit-xml-reports-in-circleci-web-ui-1912텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)