Open2
CircleCIでテストを並列実行する
parallelismを利用する
CircleCIにはparallelismという仕組みがあり、これを使うことでテストを分割実行し並列実行させることができる。
テスト分割実行を可能としているのが、circleci tests glob
とcircleci tests split
の2つの組み込みスクリプト。
circleci tests glob
へ実行したテストファイルを取得し、パイプでcircleci tests split
へ渡すことで分割する。--split-by
オプションがあり、指定できる値はtymings
とfinalize
の2つ。
今回はtymings
を指定する。tymings
を指定された場合、tyming-data
というものを参照して、適切に全テストが均等に終了するように振り分けてくれる。
参照するtyming-data
の出力先としてstore-results-option
も合わせて指定する必要がある。
job:
test:
docker:
- image: circleci/node:14
parallelism: 2
steps:
- checkout
- run:
name: Parallel Jest
command: |
TESTFILES=$(circleci tests glob "src/**/*.test.ts" | circleci tests split --split-by=timings)
yarn jest $TESTFILES
- store_test_results:
path: test-results
テスト用のジョブを複数作成して並列実行させる
parallelismを利用する方法とは別に複数のテストジョブを定義してワークフローで並列実行させる。
workflows:
version: 2
build_accept_deploy:
jobs:
- build
- acceptance_test_1:
requires:
- build
- acceptance_test_2:
requires:
- build
- acceptance_test_3:
requires:
- build
- acceptance_test_4:
requires:
- build
- deploy:
requires:
- acceptance_test_1
- acceptance_test_2
- acceptance_test_3
- acceptance_test_4