샤딩 구성

이 페이지에서는 샤딩을 통해 도구 모음 모듈(AndroidTest.xml)의 어떤 부분을 조정할 수 있는지, 실습 과정의 계속적인 실행 도중 어떻게 해야 가장 빠른 성능을 얻을 수 있는지에 대해 설명합니다. 옵션을 일반적인 방식으로 설명하고 각 옵션에 대한 합리적인 설명을 제공할 수 있도록 노력해 보겠습니다.

실습에서 계속적으로 시행되는 도구 모음은 보통 전반적인 완료 시간을 줄이기 위해 여러 기기에 걸쳐 샤딩됩니다. 일반적으로 하네스는 각 샤드의 실행 시간을 조정하여 전체 완료 시간(마지막 샤드가 완료되는 시점)을 최소화하려고 하지만 일부 테스트의 특성으로 인해 충분한 검사가 이루어지지 않고 모듈 소유자가 일부 동작을 조정해야 하는 경우도 있습니다.

샤딩 가능 여부

모듈(AndroidTest.xml)에 <option name="not-shardable" value="true" />로 태그를 지정하여 샤딩하면 안 된다는 내용을 하네스에 알릴 수 있습니다.

일반적인 모듈에서는 모듈이 하네스에 의해 샤딩되도록 하는 것이 좋습니다(기본 동작). 하지만 경우에 따라서는 이러한 동작을 재정의해야 할 수도 있습니다.

  • 모듈 설정 비용이 높은 경우:

모듈을 샤딩하면 준비의 결과로 이어지며(APK 설치, 파일 푸싱 등), 관련 기기당 한 번씩 실행해야 할 수도 있습니다. 모듈 설정 시간이 길고 비용이 높고 테스트 런타임 대비 복제할 만한 가치가 없는 경우에는 모듈에 샤딩이 불가하다는 태그를 지정해야 합니다.

  • 모듈의 테스트 수가 적은 경우:

모듈을 샤딩하면 모든 테스트 사례가 다른 기기에서 개별적으로 실행될 수 있습니다. 이는 첫 번째 요점과 관련이 있습니다. 테스트 수가 적으면 일부 샤드에서 한 개의 테스트만 실행되거나 아예 테스트가 실행되지 않을 수도 있습니다. 이 경우에는 모든 준비 단계에 높은 비용이 발생하게 됩니다. 예를 들어 단일 테스트 사례에는 APK를 설치할 만한 가치가 없는 것이 일반적입니다.

계측 테스트: 최대 샤드 수?

AndroidJUnitTest를 통해 실행되는 계측 테스트는 실제로 APK를 설치하고 실행할 때까지 몇 개의 테스트가 계측의 일부인지 하네스에 노출시키지 않습니다. 이러한 작업에는 높은 비용이 발생하며, 도구 모음의 모든 모듈 부분에 대해 샤딩 시간에 실행할 수 없습니다.

하네스는 계측 테스트에 대한 과도한 샤딩을 수행할 수 있으며 이 경우 샤드가 빌 수 있습니다. 6개의 샤드에서 5개의 테스트로 계측 테스트를 샤딩하면 테스트가 1개인 5개의 샤드와 테스트가 없는 1개의 샤드로 결과로 주어집니다. 이러한 각 샤드에는 값비싼 APK 설치가 요구됩니다.

따라서 계측 테스트 APK의 테스트 수가 적은 경우에는 모듈에 <option name="not-shardable" value="true" />로 태그를 지정하여 하네스가 해당 모듈을 샤딩할 만한 가치가 없음을 인식하도록 만들 수 있습니다.

AndroidJUnitTest 실행기에는 <option name="ajur-max-shard" value="5" />로 샤딩 가능한 최대 샤드 수를 지정할 수 있는 특수 옵션이 있습니다.

이 옵션을 사용하면 호출 수준에서 요청된 샤드 수와 상관없이 계측을 샤딩할 수 있는 최대 횟수를 지정할 수 있습니다. 기본적으로 계측은 호출에 요청된 샤드 수로 샤딩됩니다.

예를 들어 계측 테스트 APK에 2개의 테스트 사례만 포함되었지만 계속해서 이를 샤딩하고 싶은 경우에는 ajur-max-shard 값으로 2를 취하여 빈 샤드가 생성되지 않도록 할 수 있습니다.