一、通過代碼,實現Jmeter
1、項目要放在虛擬環境里面,解釋器要使用虛擬環境的
上面是虛擬環境,下面是系統環境。2選一
venv目錄
?
?查看當前虛擬環境已存在的依賴包
2、安裝Requests依賴包?
1)安裝命令
pip install requests
?
如果是mac電腦需要注意,python2是使用pip命令。python3 是使用 pip3 命令
2) 安裝完之后,查看安裝的版本
pip show requests
或者使用 pip list 去看,但是如果包太多,list內容就太多了?
3)requests對應的方法有13個參數?
接口響應碼及對應的含義:3:重定向
2:成功
1:響應正確
4:客戶端問題
5:服務器問題
?
3、編寫代碼
注意:Requests 是用Python語言編寫HTTP庫,專門用于發于請求的庫注意:
params 一般就是拼接在url當中(問號后面的參數)
Requests對應的方法中,有13參數。
http請求和https請求沒有什么區別,只是https多了SSL證書,如果你們證書驗證不通過,你們可以嘗試把 verity= False
1、get請求
獲取對應的響應數據
獲取對應的響應數據:res.方法# 1. 獲取對應的請求URL
# print(res.url)# 2. 獲取對應響應數據---并且以文本信息顯示
# print(res.text)# 3. 獲取對應響應數據---并且以JSON格式顯示,如果你的數據非Json格式則會報錯
# print(res.json()) # 用案例三可以看到效果# 4. 獲取對應響應數據---并且以字節方式顯示,會自動為你解碼 gzip 和 deflate 壓縮
# print(res.content)# 5. 獲取響應的狀態碼
# print(res.status_code)# 6. 獲取對應的響應頭 ,數據顯示是什么格式由:'Content-Type': 'text/html; 決定
# print(res.headers)
?獲取對應的請求數據
# 獲取對應的請求數據:res.request.方法# 1、對應的請求方法
# print(res.request.method)# 2、對應的請求的url
# print(res.request.url)# 3、對應的請求的頭部
# print(res.request.headers)
1)以文本打印的方式,將請求的文本信息打印出來
import requestsurldata = "http://shop-xo.hctestedu.com/"r = requests.get(urldata) # 直接傳urldata (位置傳參)# 獲取對象的文本信息
print(r.text)
運行結果?
2) Params,請求的參數是拼接在問好后面
下面get里面的兩個url不同。前一個紫色的是 get請求的參數,后面的黑色的,是請求地址的變量
3)查看請求的url?,params參數直接拼接在URL里面
# params 參數應用,直接拼在鏈接里面urldata = "https://www.baidu.com/s?wd=hello"r = requests.get(urldata)#打印請求的url
print(r.url)
4)?查看請求的url?,params參數不拼接在URL里面,而是使用公共參數
# # params 參數應用,通過變量方式使用urldata = "https://www.baidu.com/s"paramsdata = {"wd": "hello11"}r = requests.get(url=urldata,params=paramsdata)print(r.url)
?2、post請求
1)普通的表單提交
import requests# 案例 : 登錄案例
# 分析: 四要素 :請求url 請求方法(POST) 請求數據 響應數據# requests默認的post請求數據方式是:'Content-Type': 'application/x-www-form-urlencoded'url = "http://shop-xo.hctestedu.com?s=api/user/login"
public_data = {"application": "app", "application_client_type": "weixin"}
data = {"accounts": "xxx", "pwd": "xxx", "type": "username"}res = requests.post(url=url, params=public_data, data=data)# ----------------------------------------
# 1. 獲取對應的請求URL
print(res.url)# 2. 獲取對應的文本信息
# print(res.text)# 3. 獲取請求頭
print(res.request.headers)
結果?
2) Json表單的提交:
方法一:json提交數據直接
# 方法一:json提交數據直接:json = 請求數據
url = "http://shop-xo.hctestedu.com?s=api/user/login"
public_data = {"application": "app", "application_client_type": "weixin"}
data = {"accounts": "hami", "pwd": "123456", "type": "username"}res = requests.post(url=url, params=public_data, json=data)# ----------------------------------------
# 1. 獲取對應的請求URL
print(res.url)
# # 2. 獲取對應的文本信息
# print(res.text)
# # 3. 獲取請求頭
# print(res.request.headers)
?
方法二:設置請求頭為json格式
(字典是數據類型,JSON是數據格式.字典不是JSON類型)
# 方法二:設置請求頭為json格式
url = "http://shop-xo.hctestedu.com?s=api/user/login"
public_data = {"application": "app", "application_client_type": "weixin"}#下面是自己手寫header
header = {'Content-Type': 'application/json; charset=utf-8'}# data在這個位置,它只是一個字典(字典是數據類型,JSON是數據格式.字典不是JSON類型),而我們需要進行處理變成字符串格式。
data = {"accounts": "hami", "pwd": "123456", "type": "username"}# 下面轉化為JSON,是將 dict 轉換為 string
new_data = json.dumps(data)res = requests.post(url=url, params=public_data, headers=header, data=new_data)# ----------------------------------------
# # 1. 獲取對應的請求URL
# print(res.url)
# # 2. 獲取對應的文本信息
# print(res.text)
# # 3. 獲取請求頭
# print(res.request.headers)
?
3)上傳圖片
3.1)上傳圖片,需要使用一個輕量級的WEB框架,Flask,創建了一個應用程序,去保存圖片文件。
pip install flask
下面這部分代碼相當于服務端,處理圖片上傳和存儲邏輯?
3.2)上傳文件
下面的代碼,相當于前端,去上傳圖片
import requests# 分析: 四要素 :請求url 請求方法(POST) 請求數據 響應數據#這個是老師自己寫的一個上傳圖片的接口,服務器不一定還能再用了
url = "http://127.0.0.1:5000/upload"
data = {"image": open("20240223220740.png", "rb")}res = requests.post(url=url, files=data)# ----------------------------------------
# 1. 獲取對應的請求URL
print(res.url)
# 2. 獲取對應的文本信息
# print(res.text) # unicode編碼
print(res.json())
# 3. 獲取響應頭
print(res.headers)
# 4. 獲取請求頭
print(res.request.headers)
?面試點
接口請求的時候,如何一直保持會話:# 總結:如果說工作當中有需要保持會話,不能直接用requests去發送請求
# 需要實例化一個session的請求對象,發送請求(在這一個會話里面,后續其他請求都用session對象進行發送即可)# 面試題: session\token\cookies\簽名 區別:
token是請求參數
cookie 、session是保持會話# 核心點:都是用來鑒權 (一般用哪種,這個不一定,看開發)
# 1. token 一般就是一個請求參數,放在請求頭 (時效性\也有可能是其它名字)。開發用算法生成的
# 2. 存儲位置不同 :cookie存儲在客戶端,session存儲在服務器端。
# 3. 大小限制不同 :cookie有大小限制,而session沒有大小限制。
# 4. 安全隱患不同 :cookie存在安全隱患,通過攔截或本地文件找得到存儲在其中的信息。
# 5. 時效性不同 :cookie有到期時間,而session只在用戶關閉瀏覽器時消失。
3、接口斷言
# 斷言:期望結果和實際結果進行對比# assert 表達式,信息# 如果說正確的話不會有什么提示,錯誤的話,會有異常信息assert 1 == 1, "因為是正確的,所以這行提示不會打印"assert 1 == 2, "兩者不等于的報錯提示"
斷言成功--不會打印斷言提示
?斷言失敗--才會打印斷言提示
綠色的是斷言的值,藍色的才是提示信息