天天看點

接口測試--requests基礎篇介紹安裝requestsrequests常用方法TEXT與JSON的比較圖檔類型

        Hi,看這!!!部落客的微信是qing_an_an,公衆号是Sea_Cha,歡迎一起入坑。

        前面一篇我們講了接口測試的理論加JSON的基本運用,,目前來說還是比較的簡單的。這一篇的基礎篇也還算簡單,我們一起來看看吧。

接口理論+JSON基礎

目錄

介紹

安裝requests

requests常用方法

基礎操作

GET請求

POST請求

TEXT與JSON的比較

圖檔類型

介紹

        requests是一個python的庫,通過簡單的api實作python對http請求的操作,多用于爬蟲或者接口測試。

        requests庫是用python編寫的,基于urllib庫做的二次封裝,采用Apache2 Licensed開源協 議的HTTP庫;相比urllib庫,requests庫更加友善,可以節約我們大量的工作,完全滿足 HTTP測試需求。

        requests支援HTTP連接配接保持(keep-alive)和連接配接池,支援使用cookie保持會話,支援文 件上傳,支援自動确定響應内容的編碼,支援國際化的 URL 和 POST 資料自動編碼。

        文字遊戲介紹到這。我看直接看正文!!!

安裝requests

        兩種方式:

                1、requests -i https://pypi.douban.com/simple

                        驗證是否安裝成功pip show requests

                2、直接在pycharm裡面導入import requests,把滑鼠移到上面去,點選install自己會下載下傳

requests常用方法

        這裡就一筆全部帶過了!!!

        1. requests.get('https://www.baidu.com/get') #GET請求

        2. requests.post('https://www.baidu.com/post') #POST請求

        3. requests.put('https://www.baidu.com//put') #PUT請求(送出修改全部的資料)

        4. requests.delete('https://www.baidu.com/delete') #DELETE請求

        5. requests.requests(method,url, **kwargs) 以上方法都可以由requests()方法實作的,是以我 們也可以說requests()方法是最基本的

        這裡也就是各種請求的運用,我們接下來一一看例題。

基礎操作

import requests

res = requests.get(url='https://baidu.com')
print("url",res.url)
print("狀态碼:",res.status_code)
print("文本響應内容",res.text)
print("預設編碼格式",res.encoding)
# 修改編碼格式
res.encoding='utf-8'
print("修改後的編碼格式",res.encoding)
           

GET請求

        在get請求後面加入數字與漢字

import requests

url='https://baidu.com'
res = requests.get(url,params='id=11001')
print(res.url)
           

        輸出的結果是http://www.baidu.com/?id=1001,也有另一種接入方法:

import requests

url='https://baidu.com'
data = {'id':1001}
res = requests.get(url,data)
print(res.url)
           

        你也可以接入多個參數,混合起來發送請求:

import requests

url='https://baidu.com'
data = {'id':'1001,1002','home':'深圳'}
res = requests.get(url,data)
print(res.url)
           

        我們得到的是這樣的一個位址:http://www.baidu.com/?id=1001%2C1002&home=%E6%B7%B1%E5%9C%B3,home後面我們接的是深圳,但是看起來像是亂碼了,其實不是亂碼,我們隻需要通過解析就能得到漢字,自行搜尋UrlEncode進行解碼就好。

        除此之外我們還可以換另外一種的寫法:

import requests

url='https://baidu.com'
data = {'id':'1001,1002','home':'深圳'}
res = requests.request('GET',url,params=data)
print(res.url)
           

POST請求

import requests
import json

url = 'http://api.test.zhulogic.com/designer_api/account/login_quick'
# 字典類型,需要轉換
d = {
    "phone":1234568,
    "code":1234,
    "unionid":"",
    "messageType":3,
    "channel":"zhulogic"
}
# 1、将字典d轉為json類型
json_d = json.dumps(d)
h = {'Content-Type':'application/json'}
res = requests.post(url,data=json_d,headers=h)
print(res.text)
           

        這裡可以換一種将字典轉為JSON類型的寫法,為什麼一定要替換,因為不替換會有夜歌error的報錯,具體是什麼寶報錯,可以自己試試。這裡的轉換就是:

res = requests.post(url,json=d,headers=h)
print(res.text)
           

        亦或者直接幹脆點跟get請求一樣:

import requests
import json

url = 'http://api.test.zhulogic.com/designer_api/account/login_quick'
# 字典類型,需要轉換
d = {
    "phone":12345678,
    "code":1234,
    "unionid":"",
    "messageType":3,
    "channel":"zhulogic"
}
res = requests.request('POST',url,json=d,headers=h)
print("狀态碼:",res.status_code)
print(res.text)
           

        這裡我們想看到什麼樣的資訊都可以列印,編碼格式,請求的位址,響應的狀态碼等,都是可以的。

TEXT與JSON的比較

        響應對象.json:返還類型字典,可以通過鍵名來擷取響應的值

        響應對象.text:返還類型為字元串,無法通過鍵名方式來擷取響應的值

        他們也有一個共同的特點就是長的比較像字典。但是取值的方式還是有明顯的不一樣的地方

import requests
import json

url = 'http://api.test.zhulogic.com/designer_api/account/login_quick'
d = {
    "phone":12345678,
    "code":1234,
    "unionid":"",
    "messageType":3,
    "channel":"zhulogic"
}
h = {'Content-Type':'application/json'}
res = requests.request('POST',url,json=d,headers=h)
print(res.text)
print(res.json())
print(type(res.text))   # 字元串類型
print(type(res.json())) # 字典類型
# 取值比較
print("TEXT:",res.text[1:3])  # 切片,很不友善
print("JSON:",res.json()['message'])
           

        這樣就能很明顯的看出兩者的不一樣了,看看結果:

{"status_code":400,"message":"請輸入正确的手機号碼","data":null}
{'status_code': 400, 'message': '請輸入正确的手機号碼', 'data': None}
<class 'str'>
<class 'dict'>
TEXT: "s
JSON: 請輸入正确的手機号碼
           

圖檔類型

        這裡就比較的特殊了。需要用到另一個方法content,我們直接通路百度的圖檔:https://www.baidu.com/img/flexible/logo/pc/result.png

import requests
import json

res = requests.get('https://www.baidu.com/img/flexible/logo/pc/result.png')
print(res.text)
           

        這樣通路出來的都是亂碼,比如:�PNGTŵ��w��E !�� "Y�J�啥的,一堆亂碼。但是你用了content就不一樣了,可以解析成一堆位元組碼。

import requests
import json

res = requests.get('https://www.baidu.com/img/flexible/logo/pc/result.png')
print(res.content)
           

         如果沒複制錯的話,解析出來就是這樣的了。

b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xca\x00\x00\x00B\x08\x06\x00\x00\x00\x16\x86I\x1d\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x19\x93IDATx\x01\xed]\r|T\xc5\xb5
           

        這樣看着沒個圖檔的樣子,我們給儲存一下。以二進制的方式儲存在目前的目錄下。

import requests
import json

res = requests.get('https://www.baidu.com/img/flexible/logo/pc/result.png')
with open('baidu.png','wb') as f:
    f.write(res.content)