Souci Scenario via API en ERROR

les parenthèses fermante semble aussi posé problème ?

On ne se comprend pas, je m’exprime mieux :slight_smile:

Considérons le scénario suivant (qui ne fait qu’une chose, charger la page en.wikipedia.org)

{
  "id": "39429fc5-89ab-4270-bb0f-640c5c9390b3",
  "version": "2.0",
  "name": "Wikipedia homepage",
  "url": "https://en.wikipedia.org",
  "tests": [{
    "id": "9d3869a0-60ac-4a1b-bd3f-0f0f65f302d4",
    "name": "Basic search : web accessibility",
    "commands": [{
      "id": "48d5b89b-1421-416e-a029-bb1c208221ef",
      "comment": "",
      "command": "open",
      "target": "/wiki/Main_Page",
      "targets": [],
      "value": ""
    }]
  }],
  "suites": [{
    "id": "34095dff-101a-4db9-a045-bbfe6a7c9c44",
    "name": "Default Suite",
    "persistSession": false,
    "parallel": false,
    "timeout": 300,
    "tests": ["9d3869a0-60ac-4a1b-bd3f-0f0f65f302d4"]
  }],
  "urls": ["https://en.wikipedia.org/"],
  "plugins": []
}

Pour lancer ce scénario depuis l’API, il faut échaper la totalité du scénario. Pour cela je le passe dans JSON-escape, ce qui me donne :

{\n  \"id\": \"39429fc5-89ab-4270-bb0f-640c5c9390b3\",\n  \"version\": \"2.0\",\n  \"name\": \"Wikipedia homepage\",\n  \"url\": \"https://en.wikipedia.org\",\n  \"tests\": [{\n    \"id\": \"9d3869a0-60ac-4a1b-bd3f-0f0f65f302d4\",\n    \"name\": \"Basic search : web accessibility\",\n    \"commands\": [{\n      \"id\": \"48d5b89b-1421-416e-a029-bb1c208221ef\",\n      \"comment\": \"\",\n      \"command\": \"open\",\n      \"target\": \"/wiki/Main_Page\",\n      \"targets\": [],\n      \"value\": \"\"\n    }]\n  }],\n  \"suites\": [{\n    \"id\": \"34095dff-101a-4db9-a045-bbfe6a7c9c44\",\n    \"name\": \"Default Suite\",\n    \"persistSession\": false,\n    \"parallel\": false,\n    \"timeout\": 300,\n    \"tests\": [\"9d3869a0-60ac-4a1b-bd3f-0f0f65f302d4\"]\n  }],\n  \"urls\": [\"https://en.wikipedia.org/\"],\n  \"plugins\": []\n}

De là, j’ai ma commande à passer à l’API Asqatasun, qui est au final :

{
  "name": "My Wikipedia scenario",
  "scenario": "{\n  \"id\": \"39429fc5-89ab-4270-bb0f-640c5c9390b3\",\n  \"version\": \"2.0\",\n  \"name\": \"Wikipedia homepage\",\n  \"url\": \"https://en.wikipedia.org\",\n  \"tests\": [{\n    \"id\": \"9d3869a0-60ac-4a1b-bd3f-0f0f65f302d4\",\n    \"name\": \"Basic search : web accessibility\",\n    \"commands\": [{\n      \"id\": \"48d5b89b-1421-416e-a029-bb1c208221ef\",\n      \"comment\": \"\",\n      \"command\": \"open\",\n      \"target\": \"/wiki/Main_Page\",\n      \"targets\": [],\n      \"value\": \"\"\n    }]\n  }],\n  \"suites\": [{\n    \"id\": \"34095dff-101a-4db9-a045-bbfe6a7c9c44\",\n    \"name\": \"Default Suite\",\n    \"persistSession\": false,\n    \"parallel\": false,\n    \"timeout\": 300,\n    \"tests\": [\"9d3869a0-60ac-4a1b-bd3f-0f0f65f302d4\"]\n  }],\n  \"urls\": [\"https://en.wikipedia.org/\"],\n  \"plugins\": []\n}",
  "referential": "RGAA_4_0",
  "level": "AA",
  "contractId": 1,
  "tags": [
    "string"
  ]
}

Est-ce plus clair ? :slight_smile:

Complément : Swagger fait tous les échappements supplémentaires pour la ligne de commande curl

curl \
  -X POST "http://127.0.0.1:8081/api/v1/audit/runS" \
  -H  "accept: */*" \
  -H  "Content-Type: application/json" \
  -d "{  \"name\": \"string\",  \"scenario\": \"{\  \\\"id\\\": \\\"39429fc5-89ab-4270-bb0f-640c5c9390b3\\\",\  \\\"version\\\": \\\"2.0\\\",\  \\\"name\\\": \\\"Wikipedia homepage\\\",\  \\\"url\\\": \\\"https://en.wikipedia.org\\\",\  \\\"tests\\\": [{\    \\\"id\\\": \\\"9d3869a0-60ac-4a1b-bd3f-0f0f65f302d4\\\",\    \\\"name\\\": \\\"Basic search : web accessibility\\\",\    \\\"commands\\\": [{\      \\\"id\\\": \\\"48d5b89b-1421-416e-a029-bb1c208221ef\\\",\      \\\"comment\\\": \\\"\\\",\      \\\"command\\\": \\\"open\\\",\      \\\"target\\\": \\\"/wiki/Main_Page\\\",\      \\\"targets\\\": [],\      \\\"value\\\": \\\"\\\"\    }]\  }],\  \\\"urls\\\": [\\\"https://en.wikipedia.org/\\\"],\  \\\"plugins\\\": []\}\",  \"referential\": \"RGAA_4_0\",  \"level\": \"AA\",  \"contractId\": 1,  \"tags\": [    \"string\"  ]}"

oui oui votre exemple doit fonctionner ?

car j’ai cela

Bonjour @jonathan

oui l’exemple de @mfaure fonctionne.
Il est possible que le copier-coller du forum introduise certains caractères problématiques.
Le mieux c’est de poster sur le forum à la place des fichiers pour éviter ce souci.

le scénario Selenium IDE
via un copier-coller du message de @mfaure
test_wikipedia_matthieu.side.json (740 Bytes)
—> testé dans la webapp Asqatasun —> cela fonctionne

La version du scénario échappé avec l’outil en ligne json-escape
test_wikipedia_matthieu.side_escaped.txt (843 Bytes)

le JSON à utiliser dans le Swagger
il faut remplacer la valeur de contractId, actuellement j’ai mis 999999
test_wikipedia_matthieu_Asqatasun-API_request.json (993 Bytes)
—> testé dans le Swagger de l’API Asqatasun —> cela fonctionne

Par contre je n’arrive pas à utiliser la commande CURL produite par Swagger. D’une manière générale, CURL n’est pas adapté pour lancer ce type de requête JSON contenant du JSON échappé. Il faut mieux se tourner vers un langage de programmation plus souple. J’ai un POC en cours, mais il n’est pas fini.

à noter que pour certains scénarios, un outil en ligne comme json-escape n’est pas toujours suffisant. Exemple : si un sélecteur de type texte est utilisé et contient [ \n ], il faut ruser un peu.

Nota @mfaure / @koj : un endpoint supplémentaire à l’API pour jouer un scénario préalablement ajouté à la webapp serait plus pratique pour beaucoup de monde.

Bonjour à tous

Je pense qu’effectivement, l’ajout de endpoint pour gerer les scenarios (CRUD) serait tres pratique, et permettrait ensuite de lancer les audits en referencant uniquement le scenario par son ID.

Hello @jonathan, comment ça se passe de ton côté ? Arrives-tu à jouer le scenario ?

j’ai réussie a passe ton Scenario en swagger API,

mais j’ai pas eu le temps encore de faire les tests via jenkins, et mes scenarios encore
je vais faire cela la semaine prochain normalement

1 Like

Super ! Tiens-nous au courant :slight_smile:

Salut, j’ai eu un peu de temps pour tester ton scenario en mode jenkins, j’ai eu de petits soucis
mais au final j’ai réussi à le faire passer, en prenant ce que swagger envoie avec la double protection (copie écran)

Bon la prochaine étape c’est nos propres scenarios :wink:

Excellent ! Bravo !

Content que tu aies réussi à faire fonctionner ça. C’est un bel exemple :slight_smile: