J'ai un fichier Json, dans lequel il y a un champ dont j'ai besoin pour modifier et enregistrer le fichier pour la prochaine utilisation.
Mais le champ que je dois modifier est comme indiqué ci-dessous,
La valeur dont j'ai besoin pour évaluer le champ est générée aléatoirement au moment de l'exécution que je vais capturer dans une variable et la transmettre à cette clé spécifique json "dp" puis enregistrer le json.
Le json enregistré sera utilisé pour REST POST url.
{
"p": "10",
"v": 100,
"vt": [
{
"dp": "Field to be edited"(integer value) ,
]
}
S'il vous plaît, aidez-moi, j'utilise le cadre ROBOT, j'ai besoin de mettre à jour le champ json en cours d'exécution.
La solution la plus simple serait d'écrire un mot clé python qui peut changer la valeur pour vous. Cependant, vous pouvez résoudre ce problème avec des mots clés de robot en effectuant les étapes suivantes:
Python possède un module ( json ) pour travailler avec les données JSON. Vous pouvez utiliser le mot clé évaluer pour convertir votre chaîne JSON en un dictionnaire python) à l'aide de la méthode charges (chaîne de chargement) de ce module.
En supposant que vos données JSON se trouvent dans une variable de robot nommée ${json_string}
, vous pouvez le convertir en un dictionnaire python comme celui-ci:
${json}= evaluate json.loads('''${json_string}''') json
Avec ce qui précède, ${json}
contient maintenant une référence à un dictionnaire qui contient toutes les données json.
La bibliothèque Collections fournie avec le robot a un mot-clé nommé défini sur dictionnaire qui peut être utilisé pour définir la valeur d'un élément de dictionnaire. Dans ce cas, vous devez modifier la valeur d'un dictionnaire imbriqué dans l'élément vt
de l'objet JSON. Nous pouvons référencer ce dictionnaire imbriqué en utilisant le robot syntaxe variable étendue .
Par exemple:
set to dictionary ${json["vt"]} dp=the new value
Avec ça, ${json}
a maintenant la nouvelle valeur. Cependant, il s'agit toujours d'un dictionnaire python plutôt que de données JSON, il y a donc une étape de plus.
La reconversion du dictionnaire en JSON est l'inverse de la première étape. À savoir, utilisez la méthode dumps (dump string) du module json:
${json_string}= evaluate json.dumps(${json}) json
Avec ça, ${json_string}
contiendra une chaîne JSON valide avec les données modifiées.
Voici un exemple de travail complet. La chaîne json sera imprimée avant et après la substitution de la nouvelle valeur:
*** Settings ***
Library Collections
*** Test Cases ***
Example
${json_string}= catenate
... {
... "p": "10",
... "v": 100,
... "vt": {
... "dp": "Field to be edited"
... }
... }
log to console \nOriginal JSON:\n${json_string}
${json}= evaluate json.loads('''${json_string}''') json
set to dictionary ${json["vt"]} dp=the new value
${json_string}= evaluate json.dumps(${json}) json
log to console \nNew JSON string:\n${json_string}
Pour lire et écrire des données vers et depuis un fichier, j'utilise la bibliothèque OperatingSystem
${json} Get Binary File ${json_path}nameOfJsonFile.json
Cela fonctionne pour moi sur les tests API, pour lire .json et POST, comme ici
*** Settings ***
Library Collections
Library ExtendedRequestsLibrary
Library OperatingSystem
*** Variables ***
${uri} https://blabla.com/service/
${json_path} C:/home/user/project/src/json/
*** Test Cases ***
Robot Test Case
Create Session alias ${uri}
&{headers} Create Dictionary Content-Type=application/json; charset=utf-8
${json} Get Binary File ${json_path}nameOfJsonFile.json
${resp} Post Request alias data=${json} headers=${headers}
Should Be Equal As Strings ${resp.status_code} 200