Démarrer avec SAPFX

Du pip install au premier test SAP, en dix minutes.

Présentation de SAPFX · Démarrer · Référence des keywords

1. Installer

pip install robotframework-sapfx

Robot Framework est tiré comme dépendance. Si vous préférez ne rien installer à la main, un pack Windows autonome est livré à chaque release : une commande, sans cloner le dépôt.

SAPFX apporte trois bibliothèques, une par canal :


2. Activer SAP GUI Scripting

Cette étape ne concerne que le canal SAP GUI. Les canaux Fiori et API n'en ont pas besoin, et c'est d'ailleurs par eux qu'il est le plus simple de commencer si vous n'avez pas encore la main sur le serveur.

Ensuite, deux façons d'attaquer une session : lancer le Logon Pad à la main puis appeler Connect To Session, ou laisser la bibliothèque le démarrer elle-même avec Open Sap Logon.


3. Premier test sur SAP GUI

*** Settings ***
Library    SapEccLibrary    default_timeout=30s

*** Test Cases ***
Créer une commande client
    Open Connection      Mon Système SAP [PRD]
    Connect To Session
    Run Transaction      VA01
    Fill Field By Label  Type de commande    OR
    Send Vkey            0                   # Entrée
    Status Message Should Be Success
    [Teardown]    Close Sap Session

Deux choses méritent d'être remarquées ici. D'abord Fill Field By Label : le test désigne le champ par son libellé visible, pas par un identifiant technique. C'est ce qui permet à un testeur fonctionnel de lire le test, et c'est ce qui évite de tout réécrire quand SAP renumérote ses écrans.

Ensuite Status Message Should Be Success : l'assertion porte sur la barre de statut de SAP, indépendamment de la langue de l'interface. Un test écrit ainsi ne casse pas parce qu'on l'a rejoué sur un système en allemand.

Les identifiants techniques restent disponibles quand vous en avez besoin (Input Text prend un id de la forme wnd[0]/usr/txtRSYST-BNAME). Pour les capturer, le dépôt fournit un outil d'inspection sous tools/recorder, et le recorder intégré à SAP GUI fonctionne aussi.


4. Premier test sur Fiori

SapFioriLibrary s'appuie sur la bibliothèque Browser et réutilise sa page active : les deux doivent donc être importées dans la même suite.

*** Settings ***
Library    Browser
Library    SapFioriLibrary    ui5_timeout=15s

*** Test Cases ***
Rechercher une commande dans Fiori
    Open Fiori App       SalesOrder-manage
    Wait For Ui5 Idle
    Fill Ui5 Input       4711              controlType=SearchField
    Click Ui5 Control    controlType=Button    properties=Go
    Ui5 Text Should Be   Sales Order 4711      controlType=Title

Open Fiori App prend une intention sémantique de la forme SemanticObject-action, celle-là même que le launchpad utilise, plutôt qu'une URL qui changerait d'un environnement à l'autre.

Wait For Ui5 Idle attend le repos réel de la page : plus aucune requête réseau en vol, plus d'animation en cours. C'est la réponse à la fragilité classique des tests UI5, où l'on finit par saupoudrer des attentes fixes qui ralentissent la suite sans la fiabiliser.

Les contrôles se désignent par leur type et leurs propriétés (controlType, properties, id, bindingPath, viewId, idSuffix), jamais par les identifiants générés par UI5, qui changent d'une exécution à l'autre. Quand plusieurs contrôles correspondent, le nombre de correspondances est journalisé : un sélecteur ambigu reste visible au lieu d'être silencieusement tronqué.


5. Premier appel OData

*** Settings ***
Library    SapApiLibrary
Suite Setup    Gateway Should Be Active

*** Test Cases ***
Lire les cinq premières commandes
    Open Api Session    https://mon-sap.exemple/sap/opu/odata/sap/API_SALES_ORDER_SRV
    ...                 user=RFCUSER    sap_client=100
    ${commandes}=       Get Odata    A_SalesOrder    top=5
    Log                 ${commandes}

Gateway Should Be Active en Suite Setup est le genre de détail qui fait gagner des heures : si le Gateway OData n'est pas opérationnel, la suite échoue tout de suite avec un message qui nomme la remédiation, au lieu de laisser vingt tests tomber un par un sur des erreurs incompréhensibles.

Les arguments nommés deviennent des paramètres de requête : top=5 est envoyé comme $top=5, le préfixe des options système OData étant ajouté automatiquement aux noms connus.


6. Brancher en intégration continue

Une nuance par canal, et elle compte au moment de dimensionner vos agents :

En pratique, les équipes font tourner les deux familles sur deux agents différents dans la même chaîne. Le rapport Robot Framework reste unique, quel que soit le canal parcouru.


Et ensuite

La référence complète des keywords documente les trois bibliothèques, générée avec Libdoc depuis le code publié : SapEccLibrary, SapFioriLibrary et SapApiLibrary.

Ces pages documentent les keywords de bas niveau. Le dépôt livre en plus une couche de keywords métier prêts à l'emploi (le répertoire resources/) : c'est elle que les suites appellent en pratique, pour qu'aucun localisateur brut ne traîne dans un test.

Pour essayer sans système sous la main : la partie Fiori se teste sans aucun SAP, et la partie SAP GUI se valide contre l'ABAP Platform Trial gratuit en Docker.

Un vrai système SAP à couvrir ?

SAPFX est gratuit et le restera. Pour cadrer une stratégie complète, parlons-en.

Nous écrire

ou directement :