Tradefed의 옵션 처리

옵션 처리는 Trade Federation의 모듈식 접근 방식의 중심에 있습니다. 특히 옵션은 개발자, 통합자와 테스트 실행자가 서로의 작업을 복제하지 않고도 함께 작업할 수 있게 해주는 메커니즘입니다. 간단히 말해 옵션 처리 구현은 개발자가 자바 클래스 멤버를 구성 가능한 것으로 표시하고, 이때 해당 멤버의 값을 통합자가 늘리거나 재정의하고, 이어서 테스트 실행자가 이를 늘리거나 재정의할 수 있게 해줍니다. 이 메커니즘은 모든 자바 고유 유형은 물론 고유 유형의 Map 또는 Collection에도 작동합니다.

참고: 옵션 처리 메커니즘은 테스트 수명 주기에 포함된 인터페이스 중 하나를 구현하는 클래스에 대해서만 작동하며, 해당 클래스가 수명 주기 머신에 의해 인스턴스화된 경우에만 작동합니다.

개발자

우선 개발자는 멤버를 @Option 주석으로 표시합니다. 개발자는 최소 해당 옵션과 관련된 인수 이름을 지정하는 namedescription 값, 그리고 명령어를 --help 또는 --help-all로 실행하면 표시되는 설명을 지정합니다.

예를 들어 다양한 전화번호에 전화를 걸고, 연결된 후에 각 번호에서 DTMF 톤의 시퀀스를 수신할 것으로 예상하는 전화 기능 테스트를 빌드하고 싶다고 가정해 보겠습니다.

    public class PhoneCallFuncTest extends IRemoteTest {
        @Option(name = "timeout", description = "How long to wait for connection, in millis")
        private long mWaitTime = 30 * 1000;  // 30 seconds

        @Option(name = "call", description = "Key: Phone number to attempt.  " +
                "Value: DTMF to expect.  May be repeated.")
        private Map<String, String> mCalls = new HashMap<String, String>;

        public PhoneCallFuncTest() {
            mCalls.add("123-456-7890", "01134");  // default
        }
    

여기서 개발자는 해당 테스트와 관련된 구성의 두 지점만 설정하면 됩니다. 그런 다음에는 mWaitTimemCalls를 평상시처럼 사용할 수 있으며, 둘이 구성 가능하다는 사실에는 크게 주목할 필요가 없습니다. @Option 필드는 클래스가 인스턴스화된 이후, 하지만 run 메서드가 호출되기 전에 설정됩니다. 따라서 구현자는 어렵지 않게 MapCollection 필드에 대한 기본값을 설정하거나 필터링을 수행할 수 있습니다. 이 경우가 아니라면 추가만 가능합니다.

통합자

통합자는 XML로 작성된 구성 환경에서 일합니다. config 형식은 통합자가 모든 @Option 필드에 값을 설정하거나 추가할 수 있게 해줍니다. 예를 들어 통합자가 기본 숫자를 호출하는 저지연 테스트와 다양한 숫자를 호출하는 길게 실행되는 테스트를 정의하고 싶어한다고 가정해 보겠습니다. 이 경우에는 다음과 같은 형식을 취할 수 있는 구성 쌍을 생성할 수 있습니다.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration description="low-latency default test; low-latency.xml">
        <test class="com.example.PhoneCallFuncTest">
            <option name="timeout" value="5000" />
        </test>
    </configuration>
    <?xml version="1.0" encoding="utf-8"?>
    <configuration description="call a bunch of numbers; many-numbers.xml">
        <test class="com.example.PhoneCallFuncTest">
            <option name="call" key="111-111-1111" value="#*#*TEST1*#*#" />
            <option name="call" key="222-222-2222" value="#*#*TEST2*#*#" />
            <!-- ... -->
        </test>
    </configuration>
    

테스트 실행자

테스트 실행자 역시 Trade Federation 콘솔을 통해 이러한 구성 지점에 액세스할 수 있습니다. 가장 중요한 점은 테스트 실행자가 run command <name> 지침(줄여서 run <name>)을 포함하는 명령어(즉, config 및 모든 관련 인수)를 실행한다는 것입니다. 더 나아가 테스트 실행자는 원하는 인수 목록을 명령어의 일부로 지정할 수도 있습니다. 이는 각 config 내의 수명 주기 개체에 의해 지정된 필드를 대체하거나 필드에 추가될 수 있습니다.

many-numbers 전화번호로 저지연 테스트를 실행하려는 경우 테스트 실행자는 다음을 실행할 수 있습니다.

    tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
    

아니면 반대 방향에서 유사한 효과를 얻으려면 테스트 실행자가 many-numbers 테스트의 대기 시간을 줄일 수 있습니다.

    tf> run many-numbers.xml --timeout 5000

옵션 순서 지정

구현의 기본이 되는 call 옵션은 Map입니다. 따라서 명령줄에서 반복되는 --call은 저장됩니다.

long의 기본 구현을 포함하는 옵션 timeout은 하나의 값만 저장할 수 있습니다. 따라서 지정된 마지막 값만 저장됩니다. --timeout 5 --timeout 10은 10을 포함하는 timeout으로 이어집니다.

List 또는 Collection이 기본 구현인 경우에는 모든 값이 명령줄에 지정된 순서대로 저장됩니다.