Cómo integrar los servicios de TestLink desde JAVA (Parte 1)
Cómo crear un pequeño programa/plugin Java para interactuar con los servicios de TestLink, en está primera parte del blog, que he decidido separar en dos para no hacer muy larga la lectura, analizaremos las posibilidades de conexión y comunicación con el gestor de test y requisitos TestLink.

Cuando Micael Gallego (Director de mi T.F.G.) me comentó que sería interesante poder integrar los servicios de TestLink desde Java lo primero que hice fue investigar sobre las posibles formas de conexión que ofrece TestLink. Entrando en la estructura de carpetas de la aplicación encontramos una sección destinada a librerías (lib), y dentro de está última encontramos otra destinada a la API (api), por lo que parece que es posible conectar con la instancia de TestLink que se ejecuta en nuestro servidor.


De hecho dentro de la carpeta destinada a la API encontramos dos nuevas opciones:

API REST (Representational State Transfer - Transferencia de Estado Representacional): Cualquier interfaz entre sistemas que use HTTP para obtener datos o generar operaciones sobre esos datos en todos los formatos posibles, como XML y JSON […]
API XML-RPC (XML Remote Procedure Call — LLamada a procedimiento remoto): es una forma de describir un mecanismo que le permite llamar a un procedimiento en otro proceso e intercambiar datos mediante el paso de mensajes […]
Partiendo de mi desconocimiento en el protocolo RPC decidí comenzar a buscar información, manuales o ejemplos para el uso de la API REST (hemos trabajado mucho durante el último año con las APIs REST y me parecía razonable), aunque uno de nuestros principales objetivos desde el principio era evitar PHP en la medida de lo posible (Java y Typescript son nuestros “aliados”).
Poco después, y debido a la falta de información sobre la API REST, la utilización de PHP en la mayoría de ella y la aparición de un nuevo horizonte gracias a Bruno P. Kinoshita y a sus innumerables aportaciones a la comunidad JAVA, aparece TestLink JAVA API.
Antes de empezar a utilizar la API de Java me parecía prudente analizar la posibilidad de mantener una aplicación/plugin en producción con esa API, es decir, verificar la estabilidad en producción de la misma. Lo cierto es que Bruno P. Kinoshita tiene numerosas colaboraciones en proyectos grandes y relevantes en el mundo del software, entre los que destacan:
Pero el hecho decisivo para verificar la estabilidad de TestLink JAVA API fue encontrar que el propio JenkinsCI lo utiliza para su plugin con TestLink:
Además es el propio Bruno P. Kinoshita (Kinow en GitHub) el principal desarrollador de este plugin, por lo que si llegamos a entender su código, podremos aprender bastante sobre el uso de la API JAVA.
Llegados a este punto es importante establecer qué es y como funciona la API de Java para TestLink y ésto lo podemos leer en el propio README del proyecto en GitHub o en la web de la API:
TestLink Java API is a Java API that interfaces TestLink XML-RPC API. This API lets you call TestLink internal methods such as createTestProject, uploadAttachment, getTestProjectByName among others.
Our aim with this project is always release one version of this API after a new version of TestLink has been released. So if, for instance, TestLink releases version 2.0, we will release testlink-java-api-2.0.
One fact to keep in mind is that TestLink Java API can’t assure you Backward Compabitility among its versions. It occurs because TestLink XML-RPC API is constantly changing. Even some methods are renamed. So trying to keep Backward Compatibility would be really cumbersome.
Another important thing is that behind the scenes we are using xml-rpc to communicate with TestLink. However you won’t see any xml or even a Map/HashMap when using TestLink Java API (ok, maybe in only one method :-).
If you call the method getTestPlanPlatforms it will return an array of Platform (an object in TestLink Java API). This way you won’t need handle Maps :-) And in case of any error, the message will come to you in a nice TestLinkAPIException. This is the basic concepts to get the gist of the TestLink Java API.
De aquí podemos extraer que utiliza el protocolo RPC del que hablamos antes, y que nos permite llamar a métodos internos de TestLink para crear proyectos, casos de usos, subir archivos, consultar datos, etc.. También nos advierte sobre la intención de sacar una versión de la API Java por cada versión del propio TestLink ,ya que no puede asegurar compatibilidad entre versiones, y sobre la falta de xml, o cualquier tipo de Map o HashMap.
La forma de utilización es mediante matrices de objetos de la propio API Java no utilizando mapas (a veces incómodos para Javeros) y recibiendo mensajes de error mediante excepciones de la propia API Java (TestLinkAPIException).
Cabe destacar el esfuerzo del creador por realizar una buena documentación basada en Javadoc la cuál nos está siendo muy útil para utilizar la API correctamente.
La API Java consta de 4 paquetes:
br.eti.kinoshita.testlinkjavaapi:
br.eti.kinoshita.testlinkjavaapi.constants
br.eti.kinoshita.testlinkjavaapi.model
br.eti.kinoshita.testlinkjavaapi.util
La mayor parte del sistema gira en torno a la clase TestLinkAPI (contenida en el paquete br.eti.kinoshita.testlinkjavaapi), ésta nos permite instanciar los servicios de TestLink en un objeto de dichas clase y es ese objeto el que nos permite realizar la mayoría de “transacciones” o paso de mensajes a través de diferentes métodos:

En la segunda parte comenzaremos a utilizar la API desde Java y a probar algunas de las funciones de la misma para verificar la compatibilidad de TestLink 1.9.16(Moka Pot) y Testlink Java API 1.9.16–1.