私はJsonファイルを持っていますが、そこには次の使用のためにファイルを編集して保存する必要があるフィールドがあります。
しかし、私が編集する必要があるフィールドは以下のとおりです、
フィールドを評価する必要があるvalは、実行時にランダムに生成されます。これは変数でキャプチャし、このjson固有のキー「dp」に渡してjsonを保存します。
保存されたjsonはREST POST url。
{
"p": "10",
"v": 100,
"vt": [
{
"dp": "Field to be edited"(integer value) ,
]
}
私を助けてください、私はROBOTフレームワークを使用しています、実行時にjsonフィールドを更新する必要があります。
最も簡単な解決策は、値を変更できるpythonキーワードを記述することです。ただし、次の手順を実行することでロボットキーワードでこれを解決できます。
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モジュールの 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}
ファイルとの間でデータを読み書きするには、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