↓ Télécharger Obtenir ma clé
✦ Nouveau dans MyToolKit 1.6

La recette SAP qui se rejoue toute seule, et qui vous dit ce qui a changé.

Vous décrivez un parcours SAP une fois. MyToolKit le rejoue, vérifie, et produit un rapport.

La démo : deux commandes de vente, de la création au contrôle de la liste

Un scénario de 19 étapes, un CSV de deux lignes : commande, livraison, contrôle de la liste.

1 min 19 · captures réelles, sans retouche · sous-titré, sans voix off.

Comment ça marche

  1. Un scénario = un fichier Le même format que les guides du Coach.
  2. Les données à part, dans un CSV Une ligne par exécution, aucune valeur métier dans le scénario.
  3. Le moteur rejoue et attend l'écran Il attend que les conditions deviennent vraies au lieu de compter des secondes.
  4. Le rapport dit quoi, où, et montre l'écran La condition qui a manqué, l'écran, et une piste de correction.
🔁

Après chaque transport

Les régressions se voient le jour même, avec la preuve datée.

🎓

Le même fichier guide les humains

En mode Coach, le scénario devient un guide pas à pas.

📊

Partir de votre cahier Excel

Le bouton « Depuis Excel… » en fait un squelette de scénario.

🤖

L'Automate : des campagnes, une barre par étape

Des campagnes par domaine, une barre de progression par étape, un bilan en un clic.

🧩

Rien côté serveur

Aucun composant ABAP, aucun transport.

Les garde-fous, avant la vitesse

Un outil qui écrit dans SAP à votre place doit d'abord être incapable de le faire là où il ne faut pas.

Créer un scénario, sans coder

Un scénario est un simple fichier texte, plus un petit CSV. Vous n'avez pas à l'écrire à la main.

⏺

Le plus simple : faites-le une fois dans SAP

Alt+F12 dans SAP GUI, vous déroulez votre parcours, et le fichier obtenu devient un scénario complet.

📊

Vous avez un cahier de recette Excel

Bouton « Depuis Excel… » : MyToolKit crée le scénario depuis vos colonnes.

✨

Vous avez une procédure (Word, wiki, mail, notes)

Copiez le prompt universel dans l'IA de votre choix, collez votre procédure : elle rend le scénario et le CSV.

🎬

Vous avez le geste, pas le document

Notez chaque geste en une ligne, puis donnez la liste à l'IA avec le même prompt.

Le chemin le plus court, en quatre étapes

  1. Enregistrer dans SAP, ou copier le prompt Le prompt, puis votre procédure. L'IA rend deux blocs : le scénario et le CSV.
  2. Enregistrer les deux fichiers « Mes guides » ouvre le dossier : un .json et un .csv du même nom.
  3. Compléter les champs marqués À VÉRIFIER Pour les champs marqués, « Voir les éléments de l'écran » donne l'identifiant à copier.
  4. Essayer en mode Coach, puis lancer D'abord comme un guide, sous vos yeux. Puis « Lancer », et lisez le rapport.

Le prompt universel

Il fonctionne avec n'importe quelle IA et contient toutes les règles du format.

Tu es un expert SAP GUI. Tu transformes une procédure SAP en scénario de test automatisé pour MyToolKit (fonction Recette). Je vais te donner la procédure à la fin de ce message. Respecte strictement les règles ci-dessous.

CE QUE TU RENDS
- D'abord, si la procédure est ambiguë (transaction inconnue, champ non nommé, résultat attendu absent, valeurs manquantes), pose-moi tes questions en une liste courte et attends mes réponses. Sinon, écris directement.
- Ensuite, exactement deux blocs de code : un bloc JSON (le scénario) et un bloc CSV (les données de test). Puis une liste de 5 lignes maximum : les champs marqués À_VERIFIER et les valeurs du CSV à remplacer. Rien d'autre.

FORMAT DU JSON
{
  "Id": "identifiant-court-sans-espace",
  "Mode": "both",
  "Title": "Recette : titre lisible",
  "Description": "une phrase qui dit ce que le scénario vérifie",
  "Data": "identifiant-court-sans-espace.csv",
  "Start": "id_de_la_premiere_etape",
  "Steps": { ... }
}
Chaque étape de "Steps" est un objet nommé par un id court (lettres, chiffres, _) et contient :
- "Question" : ce que fait l'étape, en une phrase pour un humain ;
- "ElementId" : le champ ou le bouton concerné, seulement pour les actions set et press ;
- "Do" : l'action (une seule) ;
- "Expect" : la liste des vérifications qui doivent être vraies APRÈS l'action (facultatif : sans Expect, MyToolKit vérifie par défaut que la transaction s'ouvre ou que SAP ne renvoie pas d'erreur) ;
- "TimeoutMs" : 15000 seulement si l'action lance un traitement ou une sauvegarde (sinon ne pas mettre) ;
- "Choices": [ { "Label": "Suivant", "Next": "id_de_l_etape_suivante" } ].
La dernière étape contient uniquement "Conclusion": "phrase de fin", sans Do ni Expect.

ACTIONS AUTORISÉES DANS "Do"
tcode:/nXXXX (lancer une transaction) · set:VALEUR (écrire dans ElementId ; case à cocher : X ou vide) · press (cliquer le bouton ElementId) · key:Enter, key:F8, key:F3, key:F11, key:Ctrl+S, key:Shift+F12 (touche) · select:auto:grid[COLONNE=VALEUR] (sélectionner une ligne d'une liste ALV) · dblclick:auto:grid[COLONNE=VALEUR] · wait:2000 (dernier recours, à éviter).

IDENTIFIANTS DE CHAMPS ("ElementId")
- Si je te donne des identifiants SAP GUI exacts (forme wnd[0]/usr/ctxtVBAK-AUART), utilise-les tels quels.
- Pour un écran de sélection ou un programme Z : auto:field:NOM_DU_PARAMETRE (par exemple auto:field:P_KUNNR, auto:field:SO_MATNR-LOW).
- auto:okcode désigne le champ de commande ; auto:firstInput le premier champ de saisie de l'écran ; auto:grid la première liste ALV.
- Si tu n'es pas certain de l'identifiant (transactions standard avec sous-écrans comme VA01, ME21N, MIGO), écris "À_VERIFIER: description du champ" : je le remplacerai avec l'outil de MyToolKit qui liste les éléments de l'écran. N'invente jamais un identifiant.

VÉRIFICATIONS AUTORISÉES DANS "Expect"
tcode:XXXX (la transaction courante) · screen:ID (l'élément existe) · gone:ID (il a disparu) · filled:ID (le champ est rempli) · value:ID=TEXTE (valeur exacte) · value~:ID=TEXTE (contient) · status:TEXTE (la barre de statut contient) · status!:TEXTE (ne contient pas) · statustype:S (message de succès ; E erreur, W avertissement) · popup:TEXTE · nopopup · row:auto:grid[COL=VAL] · cell:auto:grid[COL=VAL].COL2=VALEUR · rowcount:auto:grid>=1 · text:TEXTE (la sortie de liste ou l'écran contient TEXTE ; text!: ne contient pas ; text#: expression régulière) · capture:NOM=sbar#(\d{10}) (mémorise le numéro de document lu dans la barre de statut) · capture:NOM=text#REGEX (mémorise un numéro lu dans la sortie de liste) · capture:NOM=ID (mémorise la valeur d'un champ).
Règles : vérifie le RÉSULTAT de l'action, jamais l'action. Après une sauvegarde : ["statustype:S", "capture:NUMDOC=sbar#(\d{10})"] plutôt que le texte exact du message (il dépend de la langue). Après une touche qui change d'écran : tcode: ou screen: de l'écran suivant. Après une saisie : value: du champ.

DONNÉES ET VARIABLES
Toute valeur métier (client, article, quantité, type de document, société, magasin, dates) s'écrit ${NOM} dans le JSON et va dans le CSV, jamais en dur. Le CSV a une première ligne avec les noms séparés par des points-virgules, puis une ligne par cas de test tiré de la procédure ; si la procédure ne donne aucune valeur, mets une ligne d'exemple avec des valeurs À_REMPLACER. Un numéro de document créé pendant le scénario est capturé (capture:) puis réutilisé avec ${NOM} dans les étapes suivantes.

DÉCOUPAGE
Une étape = un geste : une saisie, une touche, un bouton. La première étape lance la transaction (tcode:/n…) et vérifie tcode:. Quand SAP peut afficher une fenêtre de confirmation, ajoute une étape key:Enter avec Expect ["nopopup"]. Les textes "Question" sont courts, en français, à l'impératif ("Saisir le client ${CLIENT}.").

Voici la procédure :
[COLLER ICI VOTRE PROCÉDURE]
You are an SAP GUI expert. You turn an SAP procedure into an automated test scenario for MyToolKit (Recette feature). I will give you the procedure at the end of this message. Follow the rules below strictly.

WHAT YOU RETURN
- First, if the procedure is ambiguous (unknown transaction, unnamed field, missing expected result, missing values), ask me your questions as a short list and wait for my answers. Otherwise, write directly.
- Then exactly two code blocks: a JSON block (the scenario) and a CSV block (the test data). Then a list of at most 5 lines: the fields marked TO_CHECK and the CSV values to replace. Nothing else.

JSON FORMAT
{
  "Id": "short-id-without-spaces",
  "Mode": "both",
  "Title": "Test: readable title",
  "Description": "one sentence saying what the scenario verifies",
  "Data": "short-id-without-spaces.csv",
  "Start": "id_of_first_step",
  "Steps": { ... }
}
Each step in "Steps" is an object named by a short id (letters, digits, _) and contains:
- "Question": what the step does, one sentence for a human;
- "ElementId": the field or button involved, only for set and press actions;
- "Do": the action (one only);
- "Expect": the list of checks that must be true AFTER the action (optional: without Expect, MyToolKit checks by default that the transaction opens or that SAP returns no error);
- "TimeoutMs": 15000 only if the action triggers processing or a save (otherwise omit);
- "Choices": [ { "Label": "Next", "Next": "id_of_next_step" } ].
The last step contains only "Conclusion": "closing sentence", no Do or Expect.

ALLOWED ACTIONS IN "Do"
tcode:/nXXXX (run a transaction) · set:VALUE (write into ElementId; checkbox: X or empty) · press (click the ElementId button) · key:Enter, key:F8, key:F3, key:F11, key:Ctrl+S, key:Shift+F12 (key) · select:auto:grid[COLUMN=VALUE] (select a row in an ALV list) · dblclick:auto:grid[COLUMN=VALUE] · wait:2000 (last resort, avoid).

FIELD IDS ("ElementId")
- If I give you exact SAP GUI ids (form wnd[0]/usr/ctxtVBAK-AUART), use them as is.
- For a selection screen or a Z program: auto:field:PARAMETER_NAME (e.g. auto:field:P_KUNNR, auto:field:SO_MATNR-LOW).
- auto:okcode is the command field; auto:firstInput the first input field of the screen; auto:grid the first ALV list.
- If you are not certain of the id (standard transactions with subscreens such as VA01, ME21N, MIGO), write "TO_CHECK: description of the field": I will replace it with the MyToolKit tool that lists screen elements. Never invent an id.

ALLOWED CHECKS IN "Expect"
tcode:XXXX (current transaction) · screen:ID (element exists) · gone:ID (it disappeared) · filled:ID (field is filled) · value:ID=TEXT (exact value) · value~:ID=TEXT (contains) · status:TEXT (status bar contains) · status!:TEXT (does not contain) · statustype:S (success message; E error, W warning) · popup:TEXT · nopopup · row:auto:grid[COL=VAL] · cell:auto:grid[COL=VAL].COL2=VALUE · rowcount:auto:grid>=1 · text:TEXT (the list output or screen contains TEXT; text!: does not contain; text#: regular expression) · capture:NAME=sbar#(\d{10}) (stores the document number read from the status bar) · capture:NAME=text#REGEX (stores a number read from the list output) · capture:NAME=ID (stores a field value).
Rules: check the RESULT of the action, never the action. After a save: ["statustype:S", "capture:DOCNO=sbar#(\d{10})"] rather than the exact message text (it depends on the language). After a key that changes screen: tcode: or screen: of the next screen. After an entry: value: of the field.

DATA AND VARIABLES
Every business value (customer, material, quantity, document type, company code, store, dates) is written ${NAME} in the JSON and goes into the CSV, never hard-coded. The CSV has a first line with names separated by semicolons, then one line per test case taken from the procedure; if the procedure gives no values, put one example line with TO_REPLACE values. A document number created during the scenario is captured (capture:) then reused with ${NAME} in later steps.

SPLITTING
One step = one gesture: one entry, one key, one button. The first step runs the transaction (tcode:/n…) and checks tcode:. When SAP may show a confirmation window, add a key:Enter step with Expect ["nopopup"]. "Question" texts are short, in English, imperative ("Enter customer ${CUSTOMER}.").

Here is the procedure:
[PASTE YOUR PROCEDURE HERE]

Dans MyToolKit, « Créer un guide depuis un document » fait la même chose avec votre clé. L'IA écrit, n'exécute jamais.

Le test ne fait pas tout à fait ce qu'il faut : corriger le scénario

Normal au premier passage. Le rapport donne l'étape, la vérification manquante, le message SAP et la capture. La correction tient en une ligne.

Ce que dit le rapportCe que ça veut direCe qu'on corrige
Élément introuvable L'identifiant du champ n'est pas le bon. « Voir les éléments de l'écran », copiez le bon identifiant.
Condition non remplie, écran correct Trop stricte, ou trop tôt. statustype:S, value~:, ou TimeoutMs 15000.
Une popup est affichée SAP a posé une question inattendue. Une étape key:Enter avec nopopup juste avant.
Message d'erreur SAP (type E) Le plus souvent, c'est la donnée. La cellule du CSV. Sinon, c'est peut-être une vraie régression.
Saute une étape ou boucle Un Next pointe au mauvais endroit. Le Next de l'étape précédente ; « Vérifier » signale les étapes inaccessibles.
N'apparaît pas, ou fichier illisible Une virgule ou un guillemet manque. Collez le fichier et l'erreur à l'IA, puis « Actualiser ».

Le geste, concrètement

« Mes guides », Bloc-notes, Ctrl+F sur l'id de l'étape, enregistrer, « Actualiser », « Lancer ».

En mode Coach, vous voyez en direct quelle vérification ne passe pas.

Ou faites corriger par l'IA

Le bouton « Expliquer l'échec (IA) » le fait dans MyToolKit. Sinon, ce prompt :

Voici mon scénario MyToolKit (JSON ci-dessous) et ce que dit le rapport d'exécution :
- étape : [ID DE L'ÉTAPE]
- action : [Do de l'étape]
- vérification attendue : [la condition qui a manqué]
- message SAP (barre de statut) : [texte]
- ce que l'écran affichait : [en une phrase, d'après la capture]
Propose la correction de cette étape uniquement, dans le même format, et explique en deux lignes pourquoi. Si la cause est probablement une donnée du CSV, dis-le au lieu de modifier le scénario.

[COLLER ICI LE JSON]
Here is my MyToolKit scenario (JSON below) and what the run report says:
- step: [STEP ID]
- action: [the step's Do]
- expected check: [the condition that failed]
- SAP message (status bar): [text]
- what the screen showed: [one sentence, from the screenshot]
Propose the fix for this step only, in the same format, and explain why in two lines. If the cause is probably a CSV data value, say so instead of changing the scenario.

[PASTE THE JSON HERE]
Pour aller plus loin : la référence complète du format
{
  "Id": "recette-commande-vente",
  "Mode": "both",                       // both : guide humain et recette
  "Title": "Recette : commande client",
  "Data": "recette-commande-vente.csv",   // une ligne du CSV = une exécution
  "Start": "ouvrir_va01",
  "Steps": {
    "ouvrir_va01": {
      "Question": "Ouvrir VA01.",
      "Do": "tcode:/nVA01",
      "Expect": ["tcode:VA01"],
      "Choices": [ { "Label": "Suivant", "Next": "type_commande" } ]
    },
    "type_commande": {
      "Question": "Type de commande ${TYPE}.",
      "ElementId": "wnd[0]/usr/ctxtVBAK-AUART",
      "Do": "set:${TYPE}",
      "Expect": ["value:wnd[0]/usr/ctxtVBAK-AUART=${TYPE}"],
      "Choices": [ { "Label": "Suivant", "Next": "valider" } ]
    },
    "valider": {
      "Question": "Entrée : l'écran de la commande s'ouvre.",
      "Do": "key:Enter",
      "Expect": ["screen:wnd[0]/usr/subSUBSCREEN_HEADER:SAPMV45A:4021/ctxtKUAGV-KUNNR"],
      "Choices": [ { "Label": "Suivant", "Next": "fin" } ]
    },
    "fin": { "Conclusion": "Commande ${TYPE} ouverte." }
  }
}

Les actions (Do)

ÉcritureEffet
tcode:/nVA01lance une transaction
set:VALEURécrit dans le champ ElementId
press / press:IDclique le bouton
key:Enter, key:F8, key:Shift+F12touche de fonction
select:GRILLE[COL=VAL]sélectionne une ligne ALV
dblclick:GRILLE[COL=VAL]double-clique une ligne
wait:2000attend 2 secondes

Les éléments (ElementId)

L'id exact du scripting SAP, ou auto:field:NOM, auto:okcode, auto:firstInput, auto:grid.

Les vérifications (Expect)

ÉcritureVraie quand
tcode:VA01la transaction courante est VA01
screen:ID / gone:IDl'élément existe / a disparu
filled:IDle champ n'est pas vide
value:ID=TEXTEle champ vaut TEXTE
status:TEXTE / status!:TEXTEla barre de statut contient / ne contient pas
statustype:Smessage de type S, E, W, I ou A
noerror:pas d'erreur SAP ; vérification par défaut
popup:TEXTE / nopopupune popup est affichée / aucune popup
row:GRILLE[COL=VAL]une ligne de la grille a COL = VAL
cell:GRILLE[COL=VAL].COL2=ATTENDUsur cette ligne, COL2 vaut ATTENDU
rowcount:GRILLE>=1nombre de lignes de la grille
capture:NOM=sbar#(\d{10})mémorise le numéro lu dans la barre de statut
capture:NOM=IDmémorise la valeur d'un champ ou d'une cellule

Toutes les conditions doivent devenir vraies dans le délai (8 s par défaut).

Les variables et le jeu de données

${NOM} partout. Deux sources : le jeu de données, et les captures.

CLIENT;ARTICLE;QTE
HQPARIS;ART102;3
DUPONT01;ART104;2
La méthode qui marche. Écrivez le parcours à la main, vérifiez le résultat de l'action, capturez les numéros, tout dans le CSV.
Quand une étape échoue. Le moteur prend une capture, note le verdict, puis remet SAP en état avant le scénario suivant.

Rapports, preuves, tickets

Chaque exécution crée un dossier daté : rapport HTML, résultat JSON, captures.

📁

Publier dans le dossier d'équipe

Le bouton Publier copie le dossier complet dans le dossier partagé.

📄

Prouver : capture à chaque étape, PDF

Capture à chaque étape, PDF horodaté prêt à joindre au procès-verbal.

🎫

Signaler : un ticket pré-rempli

Jira, ServiceNow, Azure DevOps : formulaire pré-rempli, vous relisez, vous validez.

💡

Comprendre : pistes de correction

Une piste pour chaque échec classique ; l'IA explique en option, n'exécute jamais.

Questions fréquentes

Le scripting SAP GUI est verrouillé chez mon client.

La recette ne peut pas fonctionner sans. Demandez l'activation sur le système de test uniquement.

Et Fiori ?

Pas dans cette version : la recette pilote SAP GUI for Windows.

Le scénario a passé hier et échoue aujourd'hui : régression ?

Le rapport montre l'étape et l'écran. Souvent c'est une donnée.

Peut-on planifier une exécution la nuit ?

Non, volontairement.

Faut-il installer quelque chose sur le serveur SAP ?

Rien. Aucun composant ABAP, aucun transport.

Essayer sur votre système de test

MyToolKit est gratuit pendant l'early access. Un scénario d'exemple est inclus.

Une campagne de recette à outiller ? Écrivez-moi via la page contact.