接口測試 -- requests

requests是python實現的最簡單易用的HTTP庫python

官網地址:http://cn.python-requests.org/zh_CN/latest/android

1、環境安裝正則表達式

cmd -> pip install requests,安裝完成後輸入pip list能夠看到requests即表明安裝成功json

2、get請求服務器

1. 未攜帶參數cookie

# 第一步:導入包
import requests
# 第二步:發送get請求
urlstr = 'https://www.wanandroid.com/blog/show/2'
r = requests.get(url=urlstr) # r = response
# 第三步:獲取結果
print(r.text)

注意:狀態碼200只能說明這個接口訪問的服務器地址是對的,並不能說明功能OK,通常要查看響應的內容,r.text是返回文本信息函數

2. 攜帶參數 -- 參數單獨寫工具

# 導入包
import requests
# 發送get請求
urlstr = 'https://www.wanandroid.com/article/query'
param = {'k':'Android'} # 參數
r = requests.get(url=urlstr,params=param)
# 獲取結果
print(r.text)
print(r.status_code)

3. 攜帶參數 -- 參數直接放在url中post

import requests
# 發送get請求,將參數直接攜帶在url中
urlstr = 'https://www.wanandroid.com/article/query?key=Android'
r = requests.get(url=urlstr)
# 獲取結果
print(r.text)
print(r.status_code) # 打印出狀態碼
print(r.headers) # 打印出header信息

4.多個參數格式:編碼

param = {"key1": "value1", "key2": "value2", "key3": "value3"}

5.content

百度首頁若是用r.text會發現獲取到的內容有亂碼,由於百度首頁響應內容是gzip壓縮的(非text文本)

若是是在fiddler工具亂碼,是能夠點擊後解碼的,在代碼裏面能夠用r.content這個方法,content會自動解碼 gzip 和deflate壓縮

代碼:

import requests
r = requests.get('https://www.baidu.com')

print(r.url)
print(r.encoding) # 編碼
print(r.content) # 獲取返回內容(自動解碼gzip)
print(r.headers)
print(r.cookies)

6.response -- 返回內容還有其它更多信息

-- r.status_code     #響應狀態碼

-- r.content         #字節方式的響應體,會自動爲你解碼 gzip 和 deflate 壓縮

-- r.headers         #以字典對象存儲服務器響應頭,可是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則返回None

-- r.json()          #Requests中內置的JSON解碼器,處理後對應Python的dict

-- r.url             # 獲取url

-- r.encoding        # 編碼格式

-- r.cookies         # 獲取response返回的cookie

-- r.raw             #返回原始響應體

-- r.text            #字符串方式的響應體,會自動根據響應頭部的字符編碼進行解碼

-- r.raise_for_status() #失敗請求(非200響應)拋出異常

3、發送post請求

1. 用help函數查看相關注釋和案例內容

import requests
help(requests)

① 查看python發送get和post請求的案例

② 發送post請求(json形式)

post的body是json類型,有兩種方法來傳遞json數據
第一種:先導入json模塊,用dumps方法轉化成json格式

import requests,json
# 發送請求
urlstr = 'http://httpbin.org/post'
payload = {'qq羣名':'selenium+jmeter+loadrunner','qq羣號':'106014970'}
# 經過json.dumps方法將python字符串轉化成json類型
payload = json.dumps(payload)
# 發送請求
r = requests.post(url=urlstr,data=payload)
# 獲取結果
print(r.text)
# 返回爲json類型,既能夠經過r.json方法來查看結果
print(r.json())

第二種:使用json參數默認處理成json格式進行傳遞

import requests,json
# 發送post請求
urlstr = 'http://httpbin.org/post'
payload = {'qq羣名':'selenium+jmeter+loadrunner','qq羣號':'106014970'}
# 發送請求,接口請求爲json數據,經過json=自動將python對象轉變爲json類型
r = requests.post(url=urlstr,json=payload)
# 獲取結果
print(r.text)
# 返回爲json類型,便可以經過r.json方法來查看結果
print(r.json())

最後返回結果,傳到data裏

2. 發送post請求 -- 表單形式

① 登陸接口

# 導入包
import requests
# 發送post請求
urlstr = 'https://www.wanandroid.com/user/login'
# 參數
data = {'username':'annieliang','password':'123456'}
r = requests.post(url=urlstr,data=data)
# 獲取結果(與fiddler中抓到的請求一致)
print(r.text)
print(type(r.json())) # 查看類型
# 經過dict-key來訪問對應的值
print(r.json())
print(r.json()['errorCode'])
print(r.json()['data']['username'])
運行結果爲:
{"data":{"admin":false,"chapterTops":[],"collectIds":[-1],"email":"","icon":"","id":22395,"password":"","token":"","type":0,"username":"annieliang"},"errorCode":0,"errorMsg":""}
<class 'dict'>
{'errorMsg': '', 'errorCode': 0, 'data': {'password': '', 'admin': False, 'type': 0, 'collectIds': [-1], 'icon': '', 'token': '', 'chapterTops': [], 'username': 'annieliang', 'email': '', 'id': 22395}}
0
annieliang

②判斷登陸成功 -- 能夠抓取頁面上的關鍵元素,好比:帳號名稱,註銷按鈕,而後經過正則表達式提出這2個關鍵字

import requests
# 發送post請求
urlstr = 'https://www.wanandroid.com/user/login'
# 參數
payload = {'username':'annieliang','password':'123456'}
# 第二步:發送請求
r = requests.post(url=urlstr,data=payload)
# 第三步:獲取結果(與fiddler中抓到的請求一致)
print(r.text)
# 查看類型後爲字典類型,r.json將response中返回的json處理成了dict
print(type(r.json()))
# 經過dict-key來訪問對應的值
print(r.json()['data']['username'])
# 判斷是否登陸成功(username是不是username)
# 判斷返回的json數據是否有登陸的用戶名或經過正則來獲取
if r.json()['data']['username'] == payload['username']:
print('登陸成功!')
運行結果爲:
{"data":{"admin":false,"chapterTops":[],"collectIds":[-1],"email":"","icon":"","id":22395,"password":"","token":"","type":0,"username":"annieliang"},"errorCode":0,"errorMsg":""
<class 'dict'>
annieliang
登陸成功!

4、攜帶header和cookie參數發送請求

1.以玩Android登陸爲例,抓包查看請求頭,header爲Python的字典類型,因此能夠支持dict類型的全部操做方式添加header信息,能夠直接定義{},也能夠經過dict[key]的方式添加

# 導入包
import requests
# 發送get請求
urlstr = 'https://www.wanandroid.com/blog/show/2'

header = {'User-Agent':'Mozzilla/5.0'}
cookie = {'JSESSIONID':'3E08EBE7538380CE432C7FEA74244011'}

r = requests.get(url=urlstr,headers=header)
# 獲取結果
print(r.text)
print(r.headers)
print(r.cookies)

fiddler抓包獲得header和cookie信息:

5、正則表達式(待補充)

 

6、os包的用法-path(待補充)

相關文章
相關標籤/搜索