Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

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이 기본 구현인 경우에는 모든 값이 명령줄에 지정된 순서대로 저장됩니다.