Manejo de opciones en Tradefed

El manejo de opciones se encuentra en el centro del enfoque modular de la Federación de Comercio. En particular, las opciones son el mecanismo mediante el cual el desarrollador, el integrador y el ejecutor de pruebas pueden trabajar juntos sin tener que duplicar el trabajo de cada uno. En pocas palabras, nuestra implementación del manejo de opciones permite que la Desarrollador para marcar un miembro de la clase Java como configurable, momento en el cual el valor de ese miembro puede ser aumentada o anulada por el integrador y, posteriormente, puede ser aumentada o anulada por el ejecutor de pruebas. Este mecanismo funciona con todos los tipos intrínsecos de Java, así como con cualquier Map o Collection de tipos intrínsecos.

Nota: El mecanismo de control de opciones solo funciona para las clases que implementan uno de los interfaces de usuario incluidas en el ciclo de vida de la prueba, y solo cuando esa clase se instancia de la maquinaria del ciclo de vida.

Desarrollador

Para comenzar, el desarrollador marca a un miembro con el @Option. Especifican (como mínimo) los valores name y description, que especifica el nombre del argumento asociado con esa opción y la descripción que se mostrará la consola de TF cuando el comando se ejecuta con --help o --help-all.

A modo de ejemplo, supongamos que queremos crear una prueba de teléfono funcional que realice llamadas en varios números de teléfono y espera recibir una secuencia de tonos DTMF de cada número que le sigue se conecta.

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
    }

Eso es todo lo que se requiere para que el desarrollador establezca dos puntos de configuración para ese la prueba. Entonces, podrían salir y usar mWaitTime y mCalls como de costumbre, sin prestar mucha atención al hecho de que son configurables. Debido a que el Los campos @Option se establecen después de que se crea una instancia de la clase, pero antes de la Se llama al método run, que proporciona a los implementadores una forma sencilla de establecer valores predeterminados para o aplicar algún tipo de filtrado en los campos Map y Collection, que son de lo contrario, solo permite adjuntar.

Empresa integradora

El integrador funciona en el mundo de las configuraciones, que están escritas en XML. El formato de configuración permite que el integrador establezca (o agregue) un valor para cualquier campo @Option. Por ejemplo: supongamos que el integrador quisiera definir una prueba de latencia más baja que llame al número predeterminado, además de como una prueba de larga duración que llama a una variedad de números. Podría crear un par de parámetros de configuración el aspecto podría ser de la siguiente manera:

<?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>

Ejecutor de pruebas

El ejecutor de pruebas también tiene acceso a estos puntos de configuración a través de la consola de la Federación de Comercio. En primer lugar, ejecutarán un comando (es decir, un archivo de configuración y todos sus argumentos) con el Instrucción run command <name> (o run <name> para abreviar). Más allá de eso, pueden especificar cualquier lista de argumentos que formen parte del comando, que puede reemplazar o adjuntar a los campos especificados por los objetos del ciclo de vida dentro de cada configuración.

Para ejecutar la prueba de latencia baja con los números de teléfono many-numbers, el ejecutor de pruebas podría ejecutar:

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

O, para obtener un efecto similar desde la dirección opuesta, el ejecutor de pruebas podría reducir el tiempo de espera Para la prueba many-numbers, haz lo siguiente:

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

Orden de opciones

Puedes notar que la implementación subyacente de la opción call es una Map. por lo que, si se repite --call en la línea de comandos, se almacenarán.

La opción timeout, que tiene una implementación subyacente de long, solo puedes almacenar un valor. Por lo tanto, solo se almacenará el último valor especificado. --timeout 5 --timeout 10 dará como resultado que timeout contenga 10.

En el caso de una List o Collection como implementación subyacente, se almacenarán en el orden especificado en la línea de comandos.

Opciones booleanas

Las opciones del tipo booleano subyacente se pueden establecer en true pasando directamente el el nombre de la opción, por ejemplo, --[option-name], y se puede establecer en false usando la sintaxis --no-[option-name].

Consulta también

Cómo pasar opciones al paquete y los módulos