web-dev-qa-db-ja.com

ROBOTでのJSON処理

私はJsonファイルを持っていますが、そこには次の使用のためにファイルを編集して保存する必要があるフィールドがあります。

しかし、私が編集する必要があるフィールドは以下のとおりです、

フィールドを評価する必要があるvalは、実行時にランダムに生成されます。これは変数でキャプチャし、このjson固有のキー「dp」に渡してjsonを保存します。

保存されたjsonはREST POST url。

            {
                "p": "10",
                "v": 100,
                "vt": [
                    {
                        "dp": "Field to be edited"(integer value) , 
                  ]          
            }

私を助けてください、私はROBOTフレームワークを使用しています、実行時にjsonフィールドを更新する必要があります。

13
Vidya S

最も簡単な解決策は、値を変更できるpythonキーワードを記述することです。ただし、次の手順を実行することでロボットキーワードでこれを解決できます。

  1. jSON文字列を辞書に変換します
  2. 辞書を修正する
  3. 辞書をJSON文字列に戻す

JSON文字列を辞書に変換します

Pythonには、JSONデータを操作するためのモジュール( json )があります。 評価 キーワードを使用して、そのモジュールの loads (文字列のロード)メソッドを使用してJSON文字列をpython辞書に変換します。

JSONデータが${json_string}という名前のロボット変数にあると仮定すると、次のようにpython辞書に変換できます。

${json}=    evaluate    json.loads('''${json_string}''')    json

上記により、${json}はすべてのjsonデータを含む辞書への参照を保持するようになりました。

辞書を修正する

コレクション ロボットに付属するライブラリには、 辞書に設定 という名前のキーワードがあり、これを使用して辞書要素の値を設定できます。この場合、JSONオブジェクトのvt要素内にネストされた辞書の値を変更する必要があります。ロボットの 拡張変数構文 を使用して、ネストされた辞書を参照できます。

例えば:

set to dictionary    ${json["vt"]}    dp=the new value

これにより、${json}に新しい値が追加されました。ただし、まだJSONデータではなくpython辞書であるため、もう1つのステップがあります。

辞書をJSONに戻す

辞書をJSONに戻すことは、最初のステップの逆です。つまり、jsonモジュールの dumps (dump string)メソッドを使用します。

${json_string}=    evaluate    json.dumps(${json})    json

これにより、${json_string}には、変更されたデータを含む有効なJSON文字列が含まれます。


完全な例

以下は完全な実例です。 json文字列は、新しい値の置換の前後に印刷されます。

*** 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}
24
Bryan Oakley

ファイルとの間でデータを読み書きするには、OperatingSystemライブラリを使用しています

${json} Get Binary File ${json_path}nameOfJsonFile.json

ここでのように、.jsonとPOSTを読み取ることは、APIテストで機能します

*** 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
2
idomoni