python接口自動化5-Json數據處理

2022-01-02 從零開始學自動化測試

前言

有些post的請求參數是json格式的,這個前面第二篇post請求裡面提到過,需要導入json模塊處理。

一般常見的接口返回數據也是json格式的,我們在做判斷時候,往往只需要提取其中幾個關鍵的參數就行,這時候就需要json來解析返回的數據了。


一、json模塊簡介

1.Json簡介:Json,全名 JavaScript Object Notation,是一種輕量級的數據交換格式,常用於http請求中

2.可以用help(json),查看對應的源碼注釋內容

Encoding basic Python object hierarchies::
    
        >>> import json
        >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
        '["foo", {"bar": ["baz", null, 1.0, 2]}]'
        >>> print json.dumps("\"foo\bar")
        "\"foo\bar"
        >>> print json.dumps(u'\u1234')
        "\u1234"
        >>> print json.dumps('\\')
        "\\"
        >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
        {"a": 0, "b": 0, "c": 0}
        >>> from StringIO import StringIO
        >>> io = StringIO()
        >>> json.dump(['streaming API'], io)
        >>> io.getvalue()
        '["streaming API"]'



二、Encode(python->json)

1.首先說下為什麼要encode,python裡面bool值是True和False,json裡面bool值是true和false,並且區分大小寫,這就尷尬了,明明都是bool值。

在python裡面寫的代碼,傳到json裡,肯定識別不了,所以需要把python的代碼經過encode後成為json可識別的數據類型。

2.舉個簡單例子,下圖中dict類型經過json.dumps()後變成str,True變成了true,False變成了fasle

3.以下對應關係表是從json模塊的源碼裡面爬出來的.python的數據類,經過encode成json的數據類型,對應的表如下
     |  | Python              | JSON          |
     |  +===================+===============+
     |  | dict                  | object        |
     |  +---- ++
     |  | list, tuple          | array         |
     |  +----++
     |  | str, unicode      | string        |
     |  +----++
     |  | int, long, float  | number        |
     |  +----++
     |  | True                | true          |
     |  +----++
     |  | False             | false         |
     |  +----++
     |  | None              | null          |
     |  +----++


三、decode(json->python)

1.以第三篇的登錄成功結果:{"success":true}為例,我們其實最想知道的是success這個欄位返回的是True還是False

2.如果以content字節輸出,返回的是一個字符串:{"success":true},這樣獲取後面那個結果就不方便了

3.如果經過json解碼後,返回的就是一個字典:{u'success': True},這樣獲取後面那個結果,就用字典的方式去取值:result2["success"]

4.同樣json數據轉化成python可識別的數據,對應的表關係如下

|  ++----+
     |  | JSON               | Python            |
     |  +===============+===================+
     |  | object             | dict              |
     |  ++----+
     |  | array               | list              |
     |  ++----+
     |  | string              | unicode           |
     |  ++----+
     |  | number (int)    | int, long         |
     |  ++----+
     |  | number (real)   | float             |
     |  ++----+
     |  | true                | True              |
     |  ++----+
     |  | false               | False             |
     |  ++----+
     |  | null                 | None              |
     |  ++----+


四、案例分析

1.比如打開快遞網:http://www.kuaidi.com/,搜索某個單號,判斷它的狀態是不是已籤收

2. 實現代碼如下


五、參考代碼:

# coding:utf-8
import requests

url = "http://www.kuaidi.com/index-ajaxselectcourierinfo-1202247993797-yunda.html"
headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
           }  # get方法其它加個ser-Agent就可以了

s = requests.session()
r = s.get(url, headers=headers,verify=False)
result = r.json()
data = result["data"]   # 獲取data裡面內容
print data
print data[0]         # 獲取data裡最上面有個
get_result = data[0]['context']  # 獲取已籤收狀態
print get_result


if u"籤收" in get_result:
    print "快遞單已籤收成功"
else:
    print "未籤收"


對python接口自動化有興趣的,可以加python接口自動化QQ群:226296743

也可以關注下我的個人公眾號:



相關焦點

  • 接口自動化框架5:requests之get、post
    收錄於話題 #接口自動化框架我們的代碼只列印了返回內容的部分信息,其實還可以獲取其他信息,具體的可以百度一下。get請求嘗試了,現在來post吧,同樣在requests的官網看看有沒有post的蹤跡。
  • Python 處理 JSON 我選擇 ujson 和 orjson
    在 Python 使用用  json.dumps(data) 時突然發現特別慢,data 本身不大,但是一個包含很多元素的列表,所以促使本人尋找一個替代的 JSON 處理庫。大概對比了一個 ujson(UtltraJSON), python-rapidjson(RapidJSON) 和 Python 自帶的 json 庫。
  • Python接口測試實戰丨如何實現特殊字符集的自動化測試?
    在當前網際網路產品更新迭代的快節奏下,回歸測試的時間被嚴重壓縮,在金融領域和其他網際網路應用場景下,支付、轉帳、清算往往是核心功能,為了確保資金安全和快速到帳,接口在對用戶名、帳戶名中的特殊字符的正確處理顯得尤為重要。
  • Python處理音頻文件的實用姿勢
    想要用計算機捕捉聲音,就得把連續信息轉為離散的數據,這個過程就是信號的「模數轉化」。處理過程中最關鍵的參數就是「採樣率」,即每秒鐘用多少份數據表達聲音信號。「反相」是一種信號處理基本方式,對聲音波中相位數據的操作。
  • 大家一般用什麼工具測試HTTP和json接口?
    歷程以前webservice接口,用soapUI可視化界面測試;到了Restful興起的時候測試json接口我就開始用Python編寫。下面列舉幾個市面上會提到的工具:Postman。Apifox。測試接口這裡我以Python程式語言為例,進行一個post接口請求。是不是很簡單,就能模擬請求,以及得到響應的信息。然後你如果要變成自動化測試,那麼你自己加斷言,判斷預期結果和實際結果是否一致就可以了。
  • 盤點Python中4種讀取json文件和提取json文件內容的方法
    前幾天有粉絲在群裡問了一個json文件處理的問題。看上去他只需要follower和ddate這兩個欄位下的對應的值。我們知道json是一種常見的數據傳輸形式,所以對於爬取數據的數據解析,json的相關操作是比較重要的,能夠加快我們的數據提取效率。
  • Python網頁爬蟲&文本處理&科學計算&機器學習&數據挖掘兵器譜(轉)
    Github主頁:https://github.com/grangier/python-goose二、Python文本處理工具集從網頁上獲取文本數據之後,依據任務的不同,就需要進行基本的文本處理了,譬如對於英文來說,需要基本的tokenize,對於中文,則需要常見的中文分詞,進一步的話,無論英文中文,還可以詞性標註,句法分析
  • Selenium2+python自動化45-18種定位方法(find_elements)
    前八種是大家都熟悉的,經常會用到的1.id定位:find_element_by_id(self, id_)2.name定位:find_element_by_name(self, name)3.class定位:find_element_by_class_name(self, name)4.tag定位:find_element_by_tag_name(self, name)5.
  • 文本複述,中文文本數據增強
    /configs/lasertagger_config.json--output_dir=./output/models/wikisplit_experiment_name--init_checkpoint=.
  • Python玩數據入門必備系列(2):vs code 寫 Python
    因此我決定寫幾篇 Python 數據處理分析必備的入門知識系列文章,以幫助有需要的小夥伴們更好入門。)中,直接用滑鼠把該文件夾拖放到 vs code 界面中,即可快速打開此目錄。>滑鼠點一下左下角,還可以選擇其他的 Python 環境,說白了,就是用不同的 python.exe 來執行你的代碼:- 可以看到,我有7個 Python 環境>
  • python入門第十三課:文件的讀寫與分析介紹,異常處理和代碼重構
    接來下繼續學習更多應用操作,比如文件操作、數據存儲、異常處理等,這些技巧能讓我們快速的處理大量的數據,讓程序更加健壯。5、文件的路徑也可以使用絕對或相對路徑,比如用絕對路徑:c:\hello\testfile.txt。
  • 如何使用 Python 構建自己的 AI 個人助理
    python中的這個包從維基百科中提取所需的數據。4) ecapture — 該模塊用於從您的相機捕捉圖像5) datetime——這是python中的一個內置模塊,它適用於日期和時間6) os——這個模塊是python中的一個標準庫,它提供了與作業系統交互的功能7) time——時間模塊幫助我們顯示時間8) Web 瀏覽器——這是python 中的一個內置包。
  • 用 Python 找出了拉黑 QQ 空間屏蔽我的大人物
    準備工作python環境:python3.7.4第三方庫環境:requestslxmlthreadpoolselenium利用selenium模擬登陸獲取cookie並保存到本地def search_cookie(): if not __import__('os').path.exists('cookie_dict.txt'): get_cookie_json() with open('cookie_dict.txt', 'r') as f: cookie=json.load(f) return cookie
  • Python:給你們安排一波VIP音樂,看我是如何不充會員也能下載的
    這是要用到的模塊1、requests2、prettytable這是使用的環境1、python  3.82、pycharm 2021.2大致流程思路一、分析網站(思路分析)1、搜索歌曲功能key=%E5%91%A8%E6%9D%B0%E4%BC%A6&pn=1&rn=302、下載歌曲功能明確 免費的音樂怎麼下載 我們才會明白 付費的音樂是怎麼來的二、搜索功能代碼實現1、向 目標網站 發送網絡請求2、獲取數據3、提取數據 (歌曲名稱 歌手名稱 專輯名稱)4、格式化列印數據三、下載歌曲實現
  • Python使用技巧最終篇(乾貨收藏)
    使用最佳的反序列化方式下面比較了eval, cPickle, json方式三種對相應字符串反序列化的效率,可見json比cPickle快近3倍,比eval快20多倍。import jsonimport cPicklea = range(10000)s1 = str(a)s2 = cPickle.dumps(a)s3 = json.dumps(a)%timeit -n 100 x = eval(s1)%timeit -n 100 x = cPickle.loads(s2
  • Python常用庫大全
    python-nameparser – 把一個人名分解為幾個獨立的部分。 python-user-agents – 瀏覽器 user agent 解析器。 sqlparse – 一個無驗證的 SQL 解析器。 特殊文本格式處理一些用來解析和操作特殊文本格式的庫。通用 tablib – 一個用來處理中表格數據的模塊。
  • Python到底能幹什麼
    如:Gmail、Youtube、知乎、豆瓣 2)自動化運維:自動化處理大量的運維任務3)數據分析師:快速開發快速驗證,分析數據得到結果4)遊戲開發者:一般是作為遊戲腳本內嵌在遊戲中5)自動化測試:編寫為簡單的實現腳本,運用在Selenium/lr中,實現自動化。6)網站開發:藉助django,flask框架自己搭建網站。
  • 人生苦短,我用Python
    2017年python排第一也無可爭議,比較AI第一語言,在當下人工智慧大數據大火的情況下,python無愧第一語言的稱號,至於C、C++、java都是萬年的老大哥了,在代碼量比較方面,小編相信java肯定是完爆其它語言的。