[Flutter] concurrency 옵션을 통해 테스트 속도 개선하기

2024-01-28 hit count image

Flutter에서 테스트 코드를 실행할 때, concurrency 옵션을 통해 테스트 실행 속도를 개선하는 방법에 대해서 알아보겠습니다.

개요

Flutter에서 앱을 개발할 때, 테스트 코드를 작성하고 이를 실행하여 서비스의 안정성을 높이게 됩니다. 하지만, 프로젝트의 규모가 커지면 테스트 코드량도 많아지게 되고, 이에 따라 테스트 코드를 실행하는데 걸리는 시간도 증가하게 됩니다.

이번 블로그 포스트에서는 concurrency 옵션을 사용하여 테스트 코드를 병렬로 실행하여 테스트 속도를 개선하는 방법에 대해서 알아보도록 하겠습니다.

concurency 옵션

Flutter에서 test를 실행할 때 concurrency 옵션을 사용하여 테스트 코드를 병렬로 실행할 수 있습니다. 이를 통해 테스트 코드를 실행하는데 걸리는 시간을 줄일 수 있습니다.

다음 명령어를 실행하면 Flutter의 test 명령어에서 사용할 수 있는 옵션을 확인할 수 있습니다.

flutter test -h

여러 옵션중에 다음과 같이 concurrency 옵션을 확인할 수 있습니다.

-j, --concurrency=<jobs>
The number of concurrent test processes to run. This will be ignored when running integration tests.

공식 문서에서도 concurrency 옵션을 확인할 수 있습니다.

코어 수 확인

Flutter의 Test 명령어는 기본적으로 호스트 CPU 코어의 절반을 사용하도록 설정되어 있습니다.

Test suites run concurrently by default, using half of the host’s CPU cores.

그러므로 머신의 코어 수의 절반 이하를 concurrency 옵션에 설정하면 concurrency 옵션을 설정하지 않고 실행할 때 보다 성능이 떨어질 수 있습니다.

그러므로 현재 머신의 코어수를 확인하고, 적절한 코어수를 설정할 필요가 있습니다. 다음 명령어를 실행하면 머신의 코어 수를 확인할 수 있습니다.

nproc --all

테스트 실행 속도 비교

concurrency 옵션을 통해 어느정도 테스트 코드 실행 속도가 향상되는지 확인해 봅시다. Flutter 프로젝트에서 다음 명령어를 사용하여 테스트 코드를 실행해 봅니다.

flutter test

그럼 다음과 같이 테스트 코드가 실행된 후, 테스트 코드를 실행하는데 걸린 시간을 확인할 수 있습니다.

02:10 +657: All tests passed!

concurrency 옵션없이 테스트 코드를 실행하면 2분10초 걸리는 것을 확인할 수 있습니다. 이제 다음과 같이 concurrency 옵션을 사용하여 테스트 코드를 실행해 봅니다.

flutter test --concurrency=$(nproc --all)

그럼 다음과 같이 테스트 코드가 실행된 후, 테스트 코드를 실행하는데 걸린 시간을 확인할 수 있습니다.

02:02 +657: All tests passed!

concurrency 옵션을 사용하면 8초 정도 테스트 코드를 실행하는데 걸리는 시간이 단축되는 것을 확인할 수 있습니다.

GitHub Actions에서 테스트 실행 속도 비교

제 경우는 로컬 머신의 성능(12 cores)이 워낙 좋아서 큰 효과를 확인할 수 없지만, CI/CD 환경에서는 좀 더 큰 효과를 확인할 수 있습니다. GitHub Actions에서 concurrency 옵션을 사용하지 않고 테스트 코드를 실행한 경우, 다음과 같이 7분 정도 걸리는 것을 확인할 수 있습니다.

Flutter - test without concurrency option

GitHub Actions에서 concurrency 옵션을 사용하여 테스트 코드를 실행한 경우, 다음과 같이 4분 정도 걸리는 것을 확인할 수 있습니다.

Flutter - test with concurrency option

완료

이것으로 Flutter의 테스트에서 concurrency 옵션을 사용하여 테스트 속도를 개선하는 방법에 대해서 알아보았습니다. 아직 concurrency 옵션을 사용하고 있지 않다면, concurrency 옵션을 추가하여 테스트 속도를 개선해 보시기 바랍니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts