requests
- 接口自動化測試
- requests庫
- 基本實現請求-GET
- 基本實現請求-POST
- 基本實現請求-補充
- session
- Cookie和Session
- 案例
- params
接口自動化測試
概念程序驅動代替人工驅動去實現接口測試
實現方式
- 測試工具(jmeter, postman, …)
- 編碼工具(python, java, …)
比較
- 工具
- 優點: 1.不需要編程基礎 2.功能都是封裝好的, 直接調用
- 缺點: 不靈活
- 編碼
- 優點: 靈活
- 缺點: 1.需要編程基礎 2.功能需要自實現, 效率偏低
requests庫
概念 requests 庫是使用 python 編寫的, 可以調用該庫的函數直接向服務器發送 http 請求, 并接收響應
角色定位 jmeter 中的 http 請求
安裝
# 命令行輸入命令并回車
pip install requests
需要有網絡
校驗
# 命令行輸入命令并回車
pip list
基本實現請求-GET
"""需求: 編寫 python 代碼, 訪問案例的查詢接口 (/sa/listarea)流程: 三要素1.根據 url 定位接口資源2.提交測試數據3.發送請求, 接收并處理響應結果
"""
# 導包
import requests
# 一行代碼搞定
response = requests.get("http://localhost:8081/sa/listarea")
# 打印結果
print("狀態碼:", response.status_code)
print("響應體:", response.text)
基本實現請求-POST
"""需求: 編寫 python 代碼, 訪問案例的新增接口 (/sa/addarea)
"""
# 導包
import requests
# 三要素
data = {"areaName": "中發白", "priority": "123"}
response = requests.post("http://localhost:8081/sa/addarea", data=data)
print("狀態碼:", response.status_code)
print("響應體:", response.text)
基本實現請求-PUT
"""需求: 編寫 python 代碼, 訪問案例的修改接口 (/sa/modifyarea)
"""
# 導包
import requests
# 三要素
# data = {"areaName": "中發白", "priority": "123"}
myJson = {"areaId": "40","areaName": "東南西北中發白","priority": "888"
}
response = requests.put("http://localhost:8081/sa/modifyarea", json=myJson)
print("狀態碼:", response.status_code)
print("響應體:", response.text)
基本實現請求-DELETE
"""需求: 編寫 python 代碼, 訪問案例的刪除接口 (/sa/removearea)
"""
# 導包
import requests
# 三要素
response = requests.delete("http://localhost:8081/sa/removearea", params={"areaId": "40"})
print("狀態碼:", response.status_code)
print("響應體:", response.text)
基本實現請求-補充
四種操作的代碼結構基本一致
區別
-
函數名不同
-
提交測試數據的參數名不同
-
get/delete 使用 params
-
post/put 使用 data/json
data 提交鍵值對格式數據
json 提交JSON格式數據
-
為什么
- get/delete 請求格式: 提交的數據在請求行
- post/put 請求格式: 提交的數據在請求體
基本實現響應-response 響應由行頭體三部分組成, 解析也是圍繞行頭體解析
"""需求: 響應由行頭體三部分組成, 需要用requests 相關實現解析響應中的行頭體
"""
import requests
response = requests.get("http://www.baidu.com")
# 行解析
print("URL:", response.url)
print("狀態碼:", response.status_code)
print("-"*80)
# 頭獲取
print("獲取所有響應頭:", response.headers)
print("獲取所有cookie:", response.cookies)
print("獲取所有編碼集:", response.encoding)
print("-"*80)
# 體獲取
print("以文本的方式獲取響應體:", response.text) # 服務器傳過來的是文本信息, 如 html 文檔
# print("以二進制的方式獲取響應體:", response.content) # 服務器傳過來的是圖片/視頻/音頻等非文本數據
# print("以JSON的方式獲取響應體:", response.json()) # 服務器傳過來的是json格式數據, 調用該方法以json語法解析數據
登錄實現思路cookie
# 核心知識點: 關聯
# 獲取登錄接口響應的 cookie, 提取出來作為查詢訂單接口要提交的參數
import requests
# 訪問接口1: 訪問登錄接口
response1 = requests.post("login接口", data={"username": "xxx", "password": "yyy"})
# 獲取 cookie, 再獲取 cookie 中的 xxID 形式類似于{"xxID": "zzz"}
id = response1.cookies.get("xxID")
# 訪問接口2: 訂單查詢接口
requests.get("查詢訂單接口", cookies={"xxID": id})
session
import requests
# 獲取 session 對象
mySession = requests.Session()
# 請求1: 使用 session 登錄
#requests.post(...)
response1 = mySession.post("login接口", data={"username": "xxx", "password": "yyy"})
# 請求2: 使用 session 獲取訂單
response2 = mySession.get("查詢訂單接口")
Cookie和Session
都是用于在Web應用程序中跟蹤用戶狀態的機制,但它們之間有一些關鍵區別。
Cookie:
1.定義:Cookie是在用戶計算機上存儲的小型文本文件,由服務器發送到用戶的瀏覽器,并保存在瀏覽器的文件系統中。
2.用途:主要用于在客戶端(用戶的瀏覽器)和服務器之間傳遞信息,以跟蹤和識別用戶。通常,Cookie包含有關用戶的會話信息、偏好設置或其他數據。
3.特點:
a.被存儲在用戶的本地計算機上,因此可以在不同的頁面和會話之間持久存在。
b.可以設置過期時間,可以是會話級別的(瀏覽器關閉時刪除)或持久性的(在指定的時間后過期)。
c.由于存儲在客戶端,Cookie可以在用戶訪問網站時發送給服務器,從而識別用戶并提供個性化的體驗。
Session:
1.定義:Session是在服務器上創建的唯一會話標識符,用于跟蹤用戶在網站上的活動狀態。
2.用途:主要用于在服務器端存儲用戶的狀態信息,以便在用戶訪問網站的不同頁面時保持用戶的狀態和數據。
3.特點:
a.存儲在服務器上,通常以內存中的數據結構或數據庫中的條目的形式存在。
b.每個會話都有一個唯一的會話標識符(Session ID),通過該標識符可以在用戶請求之間識別用戶。
c.由于存儲在服務器上,Session數據對客戶端不可見,因此相對于Cookie更安全。
d.通常,Session會在用戶關閉瀏覽器或一段時間后過期,具體取決于服務器的配置。
總結:
1.Cookie存儲在客戶端,而Session存儲在服務器端。
2.Cookie通常用于識別和跟蹤用戶,而Session用于在用戶訪問期間保持狀態和數據。
3.Cookie的生命周期由客戶端控制,而Session的生命周期由服務器控制。
4.Cookie對客戶端可見,可以在不同的頁面和會話之間持久存在,而Session對客戶端不可見,只能通SessionID來識別用戶。
5.Cookie通常用于存儲較小的數據,而Session可以存儲更大量的數據。
案例
需求
使用 requests庫調用 tpshop登錄功能的相關接口, 完成登錄操作, 登錄成功后獲取 “我的訂單” 頁面(其實就是訪問訂單列表接口)
相關接口:
1.獲取驗證碼:http://localhost/index.php?m=Home&c=User&a=verify GET(此接口返回驗證碼 和 cookie)
2.登錄:http://localhost/index.php?m=Home&c=User&a=do_login POST參數: {"username":"xxxxx","password":"yyyy","verify_code":"zzzz"},非 JSON 提交
3.我的訂單:http://localhost/Home/Order/order_list.html GET
cookie
import requests
# 1.獲取驗證碼, 并獲得 cookie 中的 PHPSESSID
response1 = requests.get("http://localhost/index.php?m=Home&c=User&a=verify")
print(response1.status_code)
print(response1.cookies)
id = response1.cookies.get("PHPSESSID")
print(id)
print("-"*80)
# 2.登錄, 并提交cookie
data = {"username": "17150312012", "password": "123456", "verify_code": "8888"}
cookie = {"PHPSESSID": id}
response2 = requests.post("http://localhost/index.php?m=Home&c=User&a=do_login", data=data, cookies=cookie)
print(response2.status_code)
print(response2.text)
print("-"*80)
# 3.獲取訂單, 需要再次提交 cookie
response3 = requests.get("http://localhost/Home/Order/order_list.html", cookies=cookie)
print(response3.status_code)
print(response3.text)
session
import requests
# 創建 session 對象
session = requests.Session()
# 1.獲取驗證碼(隱式獲取cookie)
response1 = session.get("http://localhost/index.php?m=Home&c=User&a=verify")
print(response1.status_code)
print("-"*80)
# 2.登錄
data = {"username": "17150312012", "password": "123456", "verify_code": "8888"}
response2 = session.post("http://localhost/index.php?m=Home&c=User&a=do_login", data=data)
print(response2.status_code)
print(response2.text)
print("-"*80)
# 3.獲取訂單
response3 = session.get("http://localhost/Home/Order/order_list.html")
print(response3.status_code)
print(response3.text)
params
- URL 參數:在Web開發中,“params” 可能指的是通過 URL 傳遞的參數。例如,在以下URL中,“params”部分指的是參數:
https://example.com/api?param1=value1¶m2=value2
- 函數參數:在編程中,特別是在函數或方法中,“params”通常是指傳遞給函數或方法的參數。例如,在Python中定義一個函數時可以指定參數,然后在調用函數時傳遞這些參數。
- HTTP 請求參數:在Web開發中,“params” 可能指的是在 HTTP 請求中發送的參數。這些參數可以是通過 URL 查詢字符串傳遞的,也可以是通過 POST 請求體發送的。
- 數據庫查詢參數:在數據庫查詢中,“params” 通常指的是用于過濾、排序或限制結果的參數。這些參數可以是通過 SQL 查詢語句的參數化查詢傳遞的。