Introduction
Un grand nombre d'actions comme le passage d'un cas de test à l’état réussi ou la création d’un nouveau build peuvent être automatisées via l’utilisation d’une api intégrée à TestLink. Dans cet article, nous évoquerons le fonctionnement de cet api et quelques exemples d’utilisation.
Fonctionnement
L’api fournit par TestLink utilise le protocole xml-rpc. Elle fait office d’interface de communication entre un programme et TestLink.
Le protocole xml-rpc permet d'appeler une fonction sur un serveur distant depuis n'importe quel environnement et avec n'importe quel langage de programmation. Ce processus utilise le protocole HTTP pour le transfert des données et la norme XML pour la structuration des données.
Téléchargement d’un client
La première étape consiste à télécharger un client pour utiliser les fonctionnalités offerte par l’api TestLink. Généralement, il existe un client pour chaque langage de programmation.
- Créer des cas de test et les associés à une campagne de test.
- Installer le module php7.0-xml si besoin
Environnement
Système d'exploitation | Debian 9.6 |
Serveur web | Apache/2.4.25 |
Version PHP | PHP 7.0.30 |
Système de gestion de base de données | MariaDB 10.1.26 |
Libraries
- Client java: testlink-java-api
- Dépencences: liste des librairies
Mise en oeuvre
- Connexion à TestLink
public static void connect() throws TestLinkAPIException, MalformedURLException { String url = "http://127.0.0.1/lib/api/xmlrpc/v1/xmlrpc.php"; String key = "dafcda34e47f414ea42f1e2f7c422cf5"; testLinkAPI = new TestLinkAPI(new URL(url), key); }
- Création d'un build
public static String createTestLinkBuild(String testProjectName, String testPlanName) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss"); String timeStamp = dateFormat.format(new Date()); Integer testPlanId = testLinkAPI.getTestPlanByName(testPlanName, testProjectName).getId(); testLinkAPI.createBuild(testPlanId, timeStamp, "Ceci est un commentaire"); return timeStamp; }
- Passage d’un cas de test à l’état réussi
private static void pass(String testCaseName, String testProjectName, String testPlanName, String buildName){ Integer testCaseId = testLinkAPI.getTestCaseIDByName(testCaseName, null, testProjectName, null); Integer testPlanId = testLinkAPI.getTestPlanByName(testPlanName, testProjectName).getId(); testLinkAPI.reportTCResult(testCaseId , null, testPlanId, ExecutionStatus.PASSED, null, null, buildName, "Test OK", null, null, null, null, null, null); }
- Passage d’un cas de test à l’état en échec
public static void fail(String testCaseName, String testProjectName, String testPlanName, String buildName){ Integer testCaseId = testLinkAPI.getTestCaseIDByName(testCaseName, null, testProjectName, null); Integer testPlanId = testLinkAPI.getTestPlanByName(testPlanName, testProjectName).getId(); testLinkAPI.reportTCResult(testCaseId , null, testPlanId, ExecutionStatus.FAILED, null, null, buildName, "Test OK", null, null, null, null, null, null); }
- Passage d’un cas de test à l’état bloqué
public static void block(String testCaseName, String testProjectName, String testPlanName, String buildName){ Integer testCaseId = testLinkAPI.getTestCaseIDByName(testCaseName, null, testProjectName, null); Integer testPlanId = testLinkAPI.getTestPlanByName(testPlanName, testProjectName).getId(); testLinkAPI.reportTCResult(testCaseId , null, testPlanId, ExecutionStatus.BLOCKED, null, null, buildName, "Test OK", null, null, null, null, null, null); }
- Afficher les résultats de l'exécution d’une campagne de test
public static void displayResults(String testProjectName, String testPlanName, String buildName){ Integer testPlanId = testLinkAPI.getTestPlanByName(testPlanName, testProjectName).getId(); Build build = testLinkAPI.getLatestBuildForTestPlan(testPlanId); TestCase[] testCase = testLinkAPI.getTestCasesForTestPlan(testPlanId, null, build.getId(), null, null, null, null, null, null, null, null); System.out.println("Resultat de la campagne de test demo"); System.out.println("Titre du build: " + build.getName() + "\n"); for(int i=0; i < testCase.length; i++){ String testCaseResult = testCase[i].getName() +": " + testCase[i].getExecutionStatus().name(); System.out.println(testCaseResult); } }Un exemple d'utilisation permettant de consigner dans TestLink les résultats d'une campagne de test.
public class TestReports { private static TestLinkAPI testLinkAPI; public static void main(String [] args) throws Exception { String testProjectName = "Projet de test demo"; String testPlanName = "Campagne de test demo"; connect(); String buildName = createTestLinkBuild(testProjectName, testPlanName); pass("Cas de test A", testProjectName, testPlanName, buildName); fail("Cas de test B", testProjectName, testPlanName, buildName); block("Cas de test C", testProjectName, testPlanName, buildName); displayResults(testProjectName, testPlanName, buildName); } public static void connect() throws TestLinkAPIException, MalformedURLException { String url = "http://127.0.0.1/lib/api/xmlrpc/v1/xmlrpc.php"; String key = "dafcda34e47f414ea42f1e2f7c422cf5"; testLinkAPI = new TestLinkAPI(new URL(url), key); } public static String createTestLinkBuild(String testProjectName, String testPlanName) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss"); String timeStamp = dateFormat.format(new Date()); Integer testPlanId = testLinkAPI.getTestPlanByName(testPlanName, testProjectName).getId(); testLinkAPI.createBuild(testPlanId, timeStamp, "Ceci est un commentaire"); return timeStamp; } public static void pass(String testCaseName, String testProjectName, String testPlanName, String buildName){ Integer testCaseId = testLinkAPI.getTestCaseIDByName(testCaseName, null, testProjectName, null); Integer testPlanId = testLinkAPI.getTestPlanByName(testPlanName, testProjectName).getId(); testLinkAPI.reportTCResult(testCaseId , null, testPlanId, ExecutionStatus.PASSED, null, null, buildName, "Test OK", null, null, null, null, null, null); } public static void fail(String testCaseName, String testProjectName, String testPlanName, String buildName){ Integer testCaseId = testLinkAPI.getTestCaseIDByName(testCaseName, null, testProjectName, null); Integer testPlanId = testLinkAPI.getTestPlanByName(testPlanName, testProjectName).getId(); testLinkAPI.reportTCResult(testCaseId , null, testPlanId, ExecutionStatus.FAILED, null, null, buildName, "Test OK", null, null, null, null, null, null); } public static void block(String testCaseName, String testProjectName, String testPlanName, String buildName){ Integer testCaseId = testLinkAPI.getTestCaseIDByName(testCaseName, null, testProjectName, null); Integer testPlanId = testLinkAPI.getTestPlanByName(testPlanName, testProjectName).getId(); testLinkAPI.reportTCResult(testCaseId , null, testPlanId, ExecutionStatus.BLOCKED, null, null, buildName, "Test OK", null, null, null, null, null, null); } public static void displayResults(String testProjectName, String testPlanName, String buildName){ Integer testPlanId = testLinkAPI.getTestPlanByName(testPlanName, testProjectName).getId(); Build build = testLinkAPI.getLatestBuildForTestPlan(testPlanId); TestCase[] testCase = testLinkAPI.getTestCasesForTestPlan(testPlanId, null, build.getId(), null, null, null, null, null, null, null, null); System.out.println("Resultat de la campagne de test demo"); System.out.println("Titre du build: " + build.getName() + "\n"); for(int i=0; i < testCase.length; i++){ String testCaseResult = testCase[i].getName() +": " + testCase[i].getExecutionStatus().name(); System.out.println(testCaseResult); } } }
Liste des librairies utilisées
Tags: - How to Update TestLink Test Case Execution Status Remotely ? - Report test steps results with JAVA API.
A lire aussi:
Références: