pythonインタフェースの自動化--json解析神器jsonpath

12733 ワード

前言
 
インタフェーステストをするとき、ほとんどの場合、jsonデータが返されます.返されたjsonを断言する必要があります.
返されるデータ量が比較的大きく、ネストされた階層が深い場合、多くの小さなパートナーは値を取らず、結果の値を返すのに多くの時間を浪費することが多い.ずっと便利なjsonのライブラリを探していましたが、今日見つけました.そこでjsonpath解析ライブラリがあり,jsonパスが深く,値を取るのが難しいという問題を専門に解決した.
 
 
 
ディクショナリ値
 
インタフェースに返されるインタフェースをdictタイプに変換し、辞書キー値で値を取ります.
   # QQ   :902061117
   # , dict
1  result = { 2 "code": 0, 3 "data": [ 4   { 5 "age": 35, 6 "create_time": "2020-07-01", 7 "id": 1, 8 "mail": "[email protected]", 9 "name": " ", 10 "sex": "Man" 11   }, 12   { 13 "age": 21, 14 "create_time": "2016-12-30", 15 "id": 2, 16 "mail": "[email protected]", 17 "name": " ", 18 "sex": "gril" 19     } 20   ], 21   "msg": "success!" 22 } 23 24 # 25 assert result["code"] == 0 26 assert result["msg"] == "success!" 27 assert result["data"][0]["name"] == " "

階層がますます深くなると、値を取るのが難しくなり、リストの内容が何番目か分からないことがよくあります.例えば、戻った結果に"name": " "があるかどうかを判断したいと思っています.dataリストの何番目かを知らないと、断言するのは複雑です.
 
jsonpath解析
次に、非常に強力で便利なjsonpathをjson解析に特化し、経路の深い老大難問題を解決します.依存パッケージのインストール
jsonpathはサードパーティモジュールで、追加のインストールが必要ですpip install jsonpath
 
result=jsonpath(obj,'jsonpath構文規則文字列')
jsonpathを学ぶにはxpathに言及せざるを得ないが,この2つの間の文法はそれほど悪くない.
Xpath
JSONPath
説明
/
$
ヒールノード
.
@
カレントノード
/
. or []
サブノードを取る
..
n/a
親ノードJsonPathはサポートされていません
//
..
相対ノードとは、位置に関係なく、条件を満たすすべての条件を選択することです.
*
*
すべての要素ノードを一致させる
[]
[]
反復器の表示(配列の下付き、内容に応じて値を選択するなど、簡単な反復操作ができます)
|
[,]
反復器での複数選択をサポート
[]
?()
フィルタ処理のサポート
n/a
()
式の計算をサポート
()
n/a
グループ化、JsonPathはサポートされていません$は検索のルートノードであり、伝達パラメータはpythonのdictタイプであり、検索したときにリスト結果を返し、検索に失敗したときにFalseを返す.
import jsonpath
# QQ   :902061117

result = {
    "code": 0,
    "data": [
        {
            "age": 35,
            "create_time": "2020-05-15",
            "id": 1,
            "mail": "[email protected]",
            "name": "    ",
            "sex": "Man"
        },
        {
            "age": 3,
            "create_time": "2016-12-30",
            "id": 2,
            "mail": "[email protected]",
            "name": "  ",
            "sex": "gril"
        }
    ],
    "msg": "success!"
}

msg = jsonpath.jsonpath(result, '$.msg')
print(msg)   #      ['success!']
names = jsonpath.jsonpath(result, '$..name')
print(names)   #      ['    ', '  ']
no = jsonpath.jsonpath(result, '$..    ')
print(no)   #         False

  
もし文章があなたに役に立つなら、いいねを押してください.支持してくれてありがとう.ソフトウェアテスト、インタフェーステスト、自動化テスト、パフォーマンステスト、継続的な統合、面接経験の交流.興味があれば902061117に入ることができます.グループ内には不定期に無料の資料リンクが配布されます.これらの資料は各技術サイトから収集され、整理されています.もし良い学習資料があれば、プライベートで私に話してもいいです.出典を明記してから、みんなに共有します.