1
votes

Ajouter plusieurs objets json à un json sur Robotframework

modifier un fichier JSON dans Robot Framework

Supposons le même problème ci-dessus mais si j'ai besoin d'ajouter plusieurs objets et qu'il doit être passé comme variable. Comment pouvons-nous faire cela?

json objects(key value pair)

{
"drive": 1,
"case_ids": [1419]
}


*** Settings ***
Documentation    Library with keywords
Library          Collections
Library          DateTime
Library          OperatingSystem
Library          JSONLibrary


Robot file
    *** Keywords ***
    ################################## New Functions Introduced       #########################################
    Add KeyValue To Json
    [Arguments]  ${config_file}  ${key}  ${value}  ${address}=$

    ${json_obj}=    Load JSON From File  ${config_file}
    ${object_to_add}=    Create Dictionary  ${key}=${value}
    ${json_obj}=    Add Object To Json  ${json_obj}  ${address}  ${object_to_add}

    [return]  ${json_obj}

Je pense que nous ne pouvons pas attribuer une clé et une valeur à une seule variable la dernière fois que je l'ai vérifié.

toutes les idées seraient appréciées.


0 commentaires

3 Réponses :


0
votes

Vous pouvez créer une extension Python pour ce problème.

Le nom de fichier doit être le même que le nom de la classe, sinon le framework Robot ne trouvera pas la fonction.

Nom de fichier: JsonExtender.py p>

Contenu:

*** Settings ***
Library    ../path_to_file/JsonExtender.py

*** Test Cases ***
my test
     ${json_obj}=           Load JSON From File  ${config_file}
     ${extended_json_obj}=  Extend Json Obj      ${json_obj}        key_name    value

Fichier de la suite de tests: mytest.robot

contenu:

#!/usr/bin/env python
# -*- coding: utf-8 -*-


class JsonExtender(object):
    def extend_json_obj(self, json_obj, key, value):
        json_obj[key]=value
        return json_obj

Gardez à l'esprit que ce script n'est qu'un exemple, a besoin d'un peu d'adaptation, car cette version acceptera le dict normal, pas json.


4 commentaires

Existe-t-il un autre moyen improvisé d'utiliser un module de bibliothèque existant pour y parvenir? La solution ci-dessus est-elle testée par rapport à la question?


Non testé, comme vous pouvez le voir la note en bas. Ce serait tes devoirs.


Juste un petit mot. Le framework Robot est un framework de test, pas un langage de programme. L'un des principes fondamentaux "simplifie les choses". Si vous avez besoin de quelque chose de complexe, créez un module externe. C'est pourquoi c'est un bon exemple. Il donne également un exemple simple, comment créer un module externe.


seriez-vous en mesure d'expliquer un peu plus sur le module externe JsonExtender.py



2
votes

Comme mentionné dans l'un des commentaires (à juste titre), ne passez pas de temps à trouver quelque chose comme dans un "langage", même si c'est parfaitement bien de le faire (mais, ce serait comme concevoir une roue et ensuite tester le même - ne pas le réinventer), veuillez envisager d'installer le module suivant pip install robotframework-jsonlibrary et résoudre le problème auquel vous êtes confronté et passer au suivant.

l'exemple est montré ci-dessous Exemple de scénario de test

*** Settings ***                
Library JSONLibrary         
*** Test Cases ***              
${json_obj}=    Load JSON From File example.json        
${object_to_add}=   Create Dictionary   country=Thailand        
**${json_obj}=  Add Object To Json  ${json_obj} $..address  ${object_to_add}**
${value}=   Get Value From Json ${json_obj} $..country  
Should Be Equal As Strings  ${value[0]} Thailand        
${value_to_update}= Set Variable    Japan       
${json_obj}=    Update Value To Json    ${json_obj} $..country  ${value_to_update}
Should Be Equal As Strings  ${json_obj['country']   ${value_to_update}      
Documentation


4 commentaires

J'utilise le module, mais laissez-moi vous montrer ce que j'ai fait. C'est quand je passe plusieurs objets json, je ne sais pas comment le gérer. Je pourrais voir que vous l'avez manipulé avec des objets statiques country = Thailand étant passé. Mais ma question est de dire si plus d'un objet json doit être passé en tant que variable comme dans la question comment pouvons-nous boucler le dictionnaire ou une liste et y parvenir?


ma question est d'avoir 2 objets ajoutés à un json, mais c'est un exemple. Comment pouvons-nous itérer et ajouter tous les objets dans la même adresse sur le json


relisez simplement vos questions, je comprends ce que vous voulez dire. ne le compliquez pas trop car ce n'est pas une langue


vous ajoutez simplement des valeurs à une seule clé, cela devient compliqué lorsque vous souhaitez ajouter plusieurs objets à un seul json.



0
votes

Je l'ai gardé aussi simple que cela. Il me suffit d'appeler à nouveau le mot-clé pour les ajouter dans un objet. Réutilisez le même mot clé pour atteindre les deux.

Add KeyValue To JsonFile and JsonObject
    [Arguments]  ${key}  ${value}  ${config_file}=None  ${json_arg}=None  ${address}=$
    ${json_obj} =  Run Keyword If  '${config_file}' != 'None'    Load JSON From File  ${config_file}
    ${object_to_add}=    Create Dictionary  ${key}=${value}
    ${json_obj}=    Add Object To Json  ${json_obj}  ${address}  ${object_to_add}
    Return From Keyword If    ${json_obj} is not ${None}    ${json_obj}

    ${json_obj}=  Run Keyword    Create Dictionary
    ${json_obj}=    Add Object To Json  ${json_arg}  ${address}  ${object_to_add}
    Log    ${json_obj}
    [return]  ${json_obj}


0 commentaires