
Expresiones Java
En la tabla de datos de prueba del editor de suites de pruebas, puede definir el formato de los valores de variables como expresiones Java. El tipo de las expresiones debe ser el compatible con el tipo de las variables. El contexto Java son las propias variables y las importaciones definidas en la página Importaciones de la vista Tabla de datos de prueba.
Preguntas y respuestas sobre expresiones Java
Esta sección incluye algunas preguntas y respuestas sobre la utilización de expresiones Java en la tabla de datos de prueba del editor de suites de pruebas.
Pregunta: ¿Por qué hay un valor nulo para una variable utilizada en una expresión Java?
Respuesta: La variable no se está inicializando en el mensaje de solicitud porque no se está utilizando en una invocación. Debe utilizar la variable en un paso de prueba para que se inicialice correctamente, por ejemplo en el paso Invocación, Esperar a, o Esperar.
- Enviar una solicitud para un ID de cliente nuevo.
- Recibir una respuesta con un ID de cliente nuevo.
- Enviar una nueva solicitud utilizando el ID de cliente recibido en el paso 2.
Respuesta: Sí, esta es la manera habitual de reutilizar las variables en la tabla de datos de prueba. En este caso, el ID de cliente se expresa como una variable esperada en la tabla de datos de prueba, y la variable se puede utilizar en la solicitud siguiente.
Pregunta: Tengo una respuesta devuelta que incluye un valor ID de cliente. Deseo llenar un parámetro de entrada de una solicitud nueva con el ID de cliente. Entiendo que esta acción requiere una expresión Java en la solicitud nueva para llenar un valor con el valor ID de cliente de la respuesta inicial, pero no está claro la forma en que una expresión Java se utiliza para realizar esta tarea. Esta tabla de datos de prueba define la respuesta como un tipo Documento DOM y parece que no hay forma sencilla de escribir una única expresión Java para obtener una referencia al ID de cliente incluido en uno de los nodos del Documento DOM: ¿Hay alguna forma de conseguirlo con una expresión Java?
Respuesta: Sí. Existe una clase de programa de utilidad llamado com.ibm.wbit.comptest.ctnative.runtime.utils.DOMHelper que se utiliza internamente para extraer los valores en un objeto de tipo Documento DOM. Puede utilizar el método de programa de utilidad getSelectedNode(target, xpathExpr, nsInfo) para extraer el campo al que desee hacer referencia en otras variables. En su caso, el destino devolverá su objeto Documento DOM y la xpathExpr será la XPath al valor ID de cliente. nsInfo no es relevante en su caso y puede simplemente definirla como nulo. El siguiente fragmento de código muestra cómo utiliza la clase de programa de utilidad:
DOMHelper.getSelectedNode(responseDocument,
"soap:Envelope/soap:Body/ns5:operation1/input1/field1", null)
Tenga en cuenta que el prefijo de espacio de nombres de la XPath debe coincidir con el prefijo de espacio de nombres del mensaje de respuesta. Para utilizar la clase Helper, debe importarla en la suite de prueba a través de la página Importar de la vista Tabla de datos de prueba. Puede simplemente cambiar a la página Importar y añadir la clase DOMHelper a la lista. Ello le permite hacer referencia a la clase de programa de utilidad en las variables utilizando en formato de expresión Java.
Como alternativa, también puede crear usted mismo un método de programa de utilidad que toma un tipo Documento DOM como parámetro para extraer el valor que desee y guardar la clase Java en su proyecto de prueba de componentes. Puede cambiar entonces a la página Importar de la vista Tabla de datos de prueba, y añadir su clase Java personalizada a la lista. Ahora puede hacer referencia a su clase Java en las variables utilizando el formato de expresión Java.
Pregunta: He observado que DOMHelper.getSelectedNode devuelve un objeto Java. ¿Representa el objeto el valor String del valor de elemento o es un nodo a partir del cual debo extraer String? Por ejemplo, pongamos que el mensaje tiene el aspecto del siguiente fragmento de código:
<soap:Envelope>
<soap:Body>
<ns5:operation1>
<input1>
<field1>hello world</field>
Devuelve la llamada a DOMHelper.getSelectedNode un objeto Java que puedo convertir a una String que contenga "hello world"? ¿O bien se trata de un objeto de nodo de algún tipo en el que debo realizar más operaciones?
Respuesta: Devuelve una String o bien un nodo DOM. En su ejemplo, devuelve la String "hello world" y devolverá un tipo Nodo, en caso de que el nodo no tenga un valor de texto (como input1 en su ejemplo). Si desea obtener la String "hello world", debe añadir "/text()" al final de la XPath. De lo contrario, obtendrá el tipo Nodo DOM en su lugar. De forma similar, si el campo que desea extraer es un atributo, deberá insertar "@" antes del nombre de nodo en la XPath.
Pregunta: ¿Qué debo hacer si necesito varias expresiones Java para determinar si una prueba se ha superado?
- Cree una clase Java en el proyecto de prueba (si desea, puede estar en un paquete Java nuevo).
- Cree un método estático público que devuelva un booleano que ejecutará la lógica de verificación.
- Normalmente, la lógica necesitará la variable de la tabla de datos, por lo que el argumento de método será generalmente un DataObject.
- Escriba la lógica de verificación.
- En la tabla de datos de prueba, pulse la variable con el botón derecho del ratón y seleccione Añadir operador > Condición.
- Edite la expresión de manera que llame al método de prueba.
myVar:MyVar
-- myData:MyData
----data1:String
----data2:String
Desea comprobar si el valor de data2 es el esperado, dependiendo del valor de data1. - En un proyecto de prueba de componentes, cree una clase
mytestpackage.Tester:
package mytestpackage; import commonj.sdo.DataObject; public class Tester { public static boolean checkValues(DataObject dObj) { boolean isPassed = true; System.out.println("Comprobando valores"); String d1 = dObj.getDataObject("myData").getString("data1"); String d2 = dObj.getDataObject("myData").getString("data2"); if (d1.startsWith("a123")) { if (s.equals("b456")) isPassed = true; else isPassed = false; } return isPassed } } - Guarde la clase y asegúrese de que no haya errores de compilación.
- En la tabla de datos de prueba, pulse la variable myVar con el botón derecho del ratón y seleccione Añadir operación > Condición.
- Edite la condición (el valor predeterminado es la expresión, true), de modo que llame a Tester.
mytestpackage.Tester.checkValues(myVar)
Pregunta: ¿Cómo puedo determinar si una matriz tiene el número de elementos necesario?
- En la tabla de datos, bajo bo1, pulse bo2 con el botón derecho del ratón y seleccione Añadir operador > Condición.
- Pulse la casilla esperada para situarla en modalidad de edición y cambie el valor nulo por bo1.getList("bo2").size() == 5.
- Opcional: especifique los valores esperados para los campos de hasta cinco elementos bo2. La comprobación de los valores de los datos de matriz anidados puede llevarse a cabo además de establecer una condición en el tamaño de la matriz.