日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在之前的的章節已經簡單介紹了如何斷言接口的響應值,在實際工作過程中,json 的響應內容往往十分復雜,面對復雜的 json 響應體,主要通過 JSONPath 解決。JSONPath 提供了強大的 JSON 解析功能,使用它自帶的類似 XPath 的語法,可以更便捷靈活的用來獲取對應的 JSON 內容。

環境準備

Python/ target=_blank class=infotextkey>Python 版本安裝

pip install jsonpath

JAVA 版本安裝

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.6.0</version>
</dependency>

https://qrcode.ceba.ceshiren.com/link?from=toutiao&name=toutiao&project_id=qrcode&author=anlinger

XPath 和 JSONPath 語法

下表是 XPath 和 JSONPath 語法進行對比,這兩者的定位方式,有著非常多的相似之處:

 

image1020×1134 41.3 KB

比如同樣一個字段,XPath 中的語法是:

/store/book[0]/title

JSONPath 的語法是:

$.store.book[0].title
$['store']['book'][0]['title']

下面是一組 json 結構,分別通過 JSONPath 和 XPath 的方式提取出來

{
  "store": {
    "book": [
      {
        "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      {
        "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      {
        "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      {
        "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}

下表列出了 XPath 與 JSONPath 的對比:

 

1034×1044 44.6 KB

更多內容請訪問:
https://goessner.NET/articles/JsonPath

https://qrcode.ceba.ceshiren.com/link?from=toutiao&name=toutiao&project_id=qrcode&author=anlinger

實戰練習

以下是 測試人生 | 從外包菜鳥到測試開發,薪資一年翻三倍,連自己都不敢信!(附面試真題與答案) 這個接口的正常響應值(因響應篇幅過長,刪除了部分內容):

{
  'post_stream': {
    'posts': [
      {
        'id': 17126,
        'name': '思寒',
        'username': 'seveniruby',
        'avatar_template': '/user_avatar/ceshiren.com/seveniruby/{size}/2_2.png',
        'created_at': '2020-10-02T04:23:30.586Z',
        'cooked': '<p>一直以來的平均漲薪率在30%以上,這次刷新的記錄估計要保持好幾年了</p>',
        'post_number': 6,
        'post_type': 1,
        'updated_at': '2020-10-02T04:23:48.775Z',
        'reply_to_post_number': None,
        'reads': 651,
        'readers_count': 650,
        'score': 166.6,
        'yours': False,
        'topic_id': 6950,
        'topic_slug': 'topic',
        'display_username': '思寒',
        'primary_group_name': 'python_12',
        ...省略...
      },
    ],
  },
  'timeline_lookup': ,
  'suggested_topics':,
  'tags': [
    '精華帖',
    '測試開發',
    '測試求職',
    '外包測試'
  ],
  'id': 6950,
  'title': '測試人生 | 從外包菜鳥到測試開發,薪資一年翻三倍,連自己都不敢信!(附面試真題與答案)',
  'fancy_title': '測試人生 | 從外包菜鳥到測試開發,薪資一年翻三倍,連自己都不敢信!(附面試真題與答案)',

}

接下來則需要實現一個請求,斷言以上的響應內容中 name 字段為’思寒’所對應的 cooked 包含"漲薪"

Python 演示代碼

JSONPath 斷言

import requests
from jsonpath import jsonpath
r = requests.get("https://ceshiren.com/t/topic/6950.json").json()
result = jsonpath(r, "$..posts[?(@.name == '思寒')].cooked")[1]
assert "漲薪" in result

Java 演示代碼

JSONPath 斷言

import com.jayway.jsonpath.JsonPath;
import org.junit.jupiter.api.Test;
import java.util.List;
import static io.restassured.RestAssured.given;
public class jsonTest {

    @Test
    void jsonTest() {
        //獲取響應信息,并轉成字符串類型
        String res = given().when().
                get("https://ceshiren.com/t/topic/6950.json")
                .then().extract().response().asString();
        //通過jsonpath表達式提取需要的字段
        List<String> result = JsonPath.read(res, "$..posts[?(@.name == '思寒')].cooked");
        // 斷言驗證
        assert result.get(1).contains("漲薪");
    }
}


https://qrcode.ceba.ceshiren.com/link?from=toutiao&name=toutiao&project_id=qrcode&author=anlinger

分享到:
標簽:json
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定