Un convertidor de paquetes transforma una secuencia de paquetes de grabador. Utilice convertidores de paquetes para adaptar los datos sin formato que los grabadores capturan en un formato adecuado para que los generadores de prueba puedan utilizarlos.
Un convertidor normalmente sigue uno de los siguientes patrones:
- Un convertidor de filtrado elimina paquetes de entrada que no cumplen un criterio específico. Este convertidor no modifica ningún paquete, ni introduce paquetes nuevos en la secuencia de salida. El producto incluyo un convertidor genérico, con el ID com.ibm.rational.test.lt.testgen.core3.filter. También puede añadir parámetros a este convertido con condiciones.
- Un convertidor de anotadores no elimina ni modifica ningún paquete de la secuencia de entrada, sino que introduce paquetes adicionales en la secuencia de salida. Estos paquetes son paquetes de anotación que
transmiten información adicional inferida de otros paquetes. Por
ejemplo, un convertidor podría buscar una sesión, una conexión o límites de página en una secuencia de paquetes y, a continuación, añadir un
paquete de límite cuando se detecte un límite en la secuencia de entrada. Esto ayuda al generador de pruebas a identificar límites sin la necesidad de buscar por adelantado en la secuencia de paquetes.
- Un convertidor de reordenación no añade, cambia ni elimina paquetes de la secuencia de entrada, sino que los devuelve en un orden distinto. Un ejemplo típico es el clasificador de paquetes que se incluye con el producto, que devuelve los paquetes ordenados según la indicación de fecha y hora de inicio. El ID del clasificador es com.ibm.rational.test.lt.testgen.core3.packetSorter.
- Un convertidor de agregadores tiene diferentes tipos de paquetes de entrada y salida. Agrega múltiples paquetes de entrada en un paquete de salida.
Normalmente el convertidor convierte un protocolo de nivel inferior en un protocolo de nivel superior. Por ejemplo, el producto incluye un convertidor que transforma datos sin formato en una secuencia de bytes intercambiada entre un cliente y un servidor HTTP en paquetes HTTP agregados (pares solicitud/respuesta).
Para definir un nuevo convertidor, siga los siguientes procedimientos:
- Declare un nuevo tipo de generador de pruebas en el archivo plugin.xml mediante el punto de ampliación com.ibm.rational.test.lt.testgen.core3.
packetConverter.
- Asigne un ID exclusivo y un nombre al convertidor de paquetes.
- Declare las propiedades necesarias de la secuencia de entrada de paquetes que recibe el convertidor. La infraestructura incluye los convertidores necesarios en la etapa de conversión, de manera que las propiedades se verifican cuando los paquetes alcanzan el convertidor. Por ejemplo, si el convertidor necesita que los paquetes de entrada se ordenen de acuerdo con las indicaciones de fecha y hora de inicio, especifique el parámetro sorted.
- Declare qué propiedades añade este convertidor a la secuencia de salida o elimina de la misma, en comparación con las propiedades de la secuencia de entrada. Por ejemplo, un convertidor podría interrumpir la propiedad ordered de la secuencia de entrada; en este caso, el parámetro sorted se debe incluir en la clase removedProperties.
- Si el convertidor tiene diferentes tipos de paquetes de entrada y salida
y puede considerarse un convertidor de tipos de paquetes, declare que contribuye a la conversión de tipos de paquetes y especifique los tipos de sus paquetes de entrada y salida que genera el convertidor.
- Defina una clase de implementación que implemente la interfaz com.ibm.rational.test.lt.testgen.core.conversion.IPacketConverter.
Tenga en cuenta los hechos acerca de las implementaciones IPacketConverter:
- Normalmente, amplía la clase com.ibm.rational.test.lt.testgen.core.conversion.BasePacketConverter, que proporciona la implementación básica y sólo requiere la sustitución de los métodos necesarios.
- Un convertidor de paquetes es una interfaz IPacketReferenceOutputStream que escribe a otra interfaz IPacketReferenceOutputStream. En otras palabras, un convertidor de paquetes tiene un método writePacket() que invoca la infraestructura para cada paquete de entrada que procesa. El convertidor de paquetes se encarga de invocar el método getContext().getOutputStream().writePacket()
cuando resulta necesario para emitir un paquete de salida.
- Un convertidor de paquetes puede tener opciones. Las opciones están disponibles mediante el método getContext().getConfiguration(), normalmente llamado en el método initialize().
- Un convertidor de paquetes puede enviar paquetes adicionales a su salida en el método complete(). Se llama a este método cuando no hay más paquetes de entrada que utilizar.
- Utilice el método getContext().logMessage() para notificar mensajes del generador de pruebas al usuario, incluso los mensajes de error. Si el mensaje hace referencia a un error irrecuperable, la infraestructura detendrá el proceso de generación de pruebas.
Por motivos de escalabilidad, los convertidores manipulan objetos IRecorderPacketReference
en lugar de objetos IRecorderPacket. Siga los siguientes procedimientos para obtener resultados óptimos al escribir código de convertidor de paquetes:
- Se puede obtener una interfaz IRecorderPacket a partir de una referencia que utilice el método IRecorderPacketReference.getRecorderPacket().
- Un convertidor que necesita repetir el mismo paquete a su salida como el recibido debe escribir la misma instancia de referencia que ha recibido.
- Cuando un convertidor crea una instancia de un nuevo paquete de grabador, puede
ajustar el paquete en una nueva referencia mediante el método getContext().createPacketReference()
de manera que el paquete pueda enviarse como salida.
- Los convertidores, igual que los grabadores, pueden generar archivos adjuntos de los paquetes. Para crear un nuevo archivo adjunto, utilice el método getContext().createPacketAttachment().
- Si el convertidor tiene que guardar un paquete mucho tiempo antes de que se envíe como salida, el convertidor puede descargar el paquete y guardar sólo una referencia al paquete. Para ello, llame al método unload() en la referencia del paquete.
- Los convertidores se incluyen con la posibilidad de acumular de manera eficiente grandes cantidades de paquetes y descartarlos o vaciarlos a la salida. Consulte la clase com.ibm.rational.test.lt.testgen.core.store.IPacketReferenceStore
para obtener más información. Puede crearse un almacén de paquetes mediante el método
getContext().createPacketStore().