Um conversor de pacotes transforma um fluxo de pacotes de gravadores. Use os conversores de pacotes para adaptar os dados brutos que os gravadores capturam em um formato adequado para uso pelos geradores de teste.
Um conversor geralmente segue um dos seguintes padrões:
- Um conversor de filtragem remove pacotes de entrada que não atendem a um critério específico. Ele não modifica pacotes nem apresenta novos pacotes no fluxo de saída. O produto é fornecido com um conversor genérico, com o ID com.ibm.rational.test.lt.testgen.core3.filter. Você pode incluir parâmetros nesse conversor com condições.
- Um conversor de anotador não remove ou modifica pacotes do fluxo de entrada, mas apresenta pacotes adicionais no fluxo de saída. Esses são pacotes de anotações que transmitem informações adicionais deduzidas de outros pacotes. Por exemplo, um conversor pode procurar por limites de sessão, conexão ou página em um fluxo de pacotes e depois incluir um pacote limite sempre que um limite for detectado no fluxo de entrada. Isso ajuda o gerador de testes a identificar limites sem a necessidade de prever o fluxo de pacotes.
- Um conversor de reclassificação não inclui, altera ou remove pacotes do fluxo de entrada, mas faz a saída deles em uma ordem diferente. Um exemplo típico é o classificador de pacotes fornecido com o produto, que efetua a saída dos pacotes classificados por seus registros de data e hora de início. O ID do classificador é com.ibm.rational.test.lt.testgen.core3.packetSorter.
- Um conversor agregador tem tipos de pacotes de entrada e saída diferentes. Ele agrega vários pacotes de entrada em um pacote de saída.
O conversor geralmente converte um protocolo de nível inferior em um protocolo de nível superior. Por exemplo, o produto é fornecido com um conversor que transforma dados brutos em um fluxo de bytes trocado entre um cliente e um servidor HTTP em pacotes HTTP agregados (pares de solicitações/respostas).
Para definir um novo conversor, você deve concluir estes procedimentos:
- Declare um novo tipo de conversor de pacotes no arquivo plugin.xml, usando o ponto de extensão com.ibm.rational.test.lt.testgen.core3.
packetConverter.
- Designe ao conversor de pacotes um ID exclusivo e um nome.
- Declare as propriedades necessárias do fluxo de entrada de pacotes recebido pelo conversor. A estrutura inclui os conversores necessários no estágio de conversão, portanto, essas propriedades são verificadas quando os pacotes chegam ao conversor. Por exemplo, se o conversor exigir que os pacotes de entrada sejam classificados de acordo com seus registros de data e hora de início, especifique o parâmetro sorted.
- Declare quais propriedades esse conversor inclui no fluxo de saída ou remove do fluxo de saída, em comparação com as propriedades do fluxo de entrada. Por exemplo, um conversor pode interromper a propriedade ordered do fluxo de entrada; nesse caso, o parâmetro sorted deve ser incluído na classe removedProperties.
- Se o conversor tiver tipos de pacotes de entrada e saída diferentes e puder ser considerado um conversor de tipo de pacotes, declare que ele contribui para as conversões de tipo de pacotes e especifique os tipos de pacotes de entrada e saída que o conversor produz.
- Defina uma classe de implementação que implemente a interface com.ibm.rational.test.lt.testgen.core.conversion.IPacketConverter.
Considere estes fatores sobre as implementações de IPacketConverter:
- Geralmente, você estende a classe com.ibm.rational.test.lt.testgen.core.conversion.BasePacketConverter, que
fornece uma implementação básica e requer apenas a substituição dos métodos necessários.
- Um conversor de pacotes é uma interface IPacketReferenceOutputStream que é gravada em outra interface IPacketReferenceOutputStream. Ou seja, um conversor de pacotes tem um método writePacket(), que é chamado pela estrutura para cada pacote de entrada que ele processa. O conversor de pacotes é responsável por chamar o método getContext().getOutputStream().writePacket() sempre
que precisa enviar um pacote para sua saída.
- Um conversor de pacotes pode ter opções. As opções estão disponíveis usando o método getContext().getConfiguration(), que geralmente é chamado no método initialize().
- Um conversor de pacotes pode enviar pacotes adicionais para sua saída no método complete(). Esse método é chamado quando não há mais pacotes de entrada para usar.
- Use o método getContext().logMessage() para relatar mensagens do gerador de teste para o usuário, inclusive mensagens de erro. Se a mensagem pertencer a um erro irrecuperável, a estrutura parará o processo de geração de teste.
Por razões de escalabilidade, os conversores manipulam objetos IRecorderPacketReference em vez de objetos IRecorderPacket. Siga estes procedimentos para obter os melhores resultados ao gravar o código do conversor de pacotes:
- Uma interface IRecorderPacket pode ser obtida de uma referência que usa o método IRecorderPacketReference.getRecorderPacket().
- Um conversor que precisa do eco do mesmo pacote para sua saída, como o recebido, deve gravar a mesma instância de referência que o conversor recebeu.
- Quando um conversor instancia um novo pacote de gravador, o conversor pode agrupar o pacote em uma nova referência usando o método getContext().createPacketReference() para que o pacote possa ser enviado como saída.
- Assim como os gravadores podem produzir anexos de pacotes, os conversores também podem fazê-lo. Para criar um novo anexo, use o método getContext().createPacketAttachment().
- Se o conversor precisar manter um pacote por um longo tempo antes que ele seja enviado como saída, ele poderá descarregar o pacote e manter apenas uma referência dele. Para fazer isso, chame o método unload() na referência de pacotes.
- Os conversores são fornecidos com um recurso para acumular eficientemente um grande número de pacotes e descartá-los ou limpá-los automaticamente para a saída. Consulte a classe com.ibm.rational.test.lt.testgen.core.store.IPacketReferenceStore
para obter mais informações. Um armazenamento de pacotes pode ser criado usando o método getContext().createPacketStore().