數據存儲在別的地方的數據庫中,我想在我的電腦上看到數據。如何從別的設備上把數據拿過來,然後做一定的處理,放在我的界面上展示出來呢?
接口是個中間橋梁,幫你把數據從數據庫裡拿出來,順便處理再一下返回給你。
前提是你主動向我請求這個數據。
1.它是誰?向誰請求數據?----地址接口地址。
得知道對方是誰。打電話的時候,要知道對方的電話號碼,才能將號碼撥出去。
2.事情的類型:請求的方法(get,post)
3.找它什麼事兒?請求數據。
4.得到答復。返回數據。
關注的是什麼?數據。數據的正確性。請求數據與返回數據的一個匹配性。
1)發送數據。
2)驗證數據。
#1.准備了測試數據
import requests #http -- get post
#地址 ----用這個數據之前需要先申請一下。
url="https://api.apishop.net/common/dogFamily/queryDogListByKeyword"
#字典
req_datas={"apiKey":"w6XRBKH974efb492355fef8073aa1cd3eb819932694d6a5","keyword":"金毛"}
#2.調用了post請求,發送一個http請求。並得到響應結果。
#函數 -實現了功能
res=requests.post(url,req_datas)
print(res)
#3.獲取響應的狀態碼和返回數據。
#狀態碼、消息頭 、返回數據
#狀態碼
print(res.status_code)
#返回數據
# print(res.text)
print(res.json())
# 斷言:斷言狀態碼,斷言返回數據裡面的某個字段。
#jsonpath ==
#正則表達式。
##############################用例二#######################
print("========測試用例二=============")
#1.准備了測試數據
import requests #http -- get post
#地址
url="https://api.apishop.net/common/dogFamily/queryDogListByKeyword"
#字典
req_datas={"apiKey":"w6XRBKH974efb492355fef8073aa1cd3eb819932694d6a5","keyword":"###"}
#2.調用了post請求,發送一個http請求。並得到響應結果。
#函數 -實現了功能
res=requests.post(url,req_datas)
print(res)
#3.獲取響應的狀態碼和返回數據。
#狀態碼、消息頭 、返回數據
#狀態碼
print(res.status_code)
#返回數據
# print(res.text)
print(res.json())
#### 流程是一樣的,只是數據(url+請求數據)不一樣。-----流程和數據分離開。
#### 准備一個流程,多組數據。
運行結果
總結:
利用requests庫發送請求分為:
1.准備測試數據:接口url地址、請求類型、請求數據。
2.調用get/post:根據請求類型來決定調用哪個方法。
3.通過res.text
獲取響應數據。
流程是一樣的,只是數據(url+請求數據)不一樣。-----流程和數據分離開。
必會1
必會2
代碼裡面的表單名稱要與Excel裡面的表單名稱一致。
sample.xlsx
文件目錄結構
python代碼在excel中讀取出來的數據默認都是字符串。 用eval()
這個函數可以將字符串轉換成字典。
但是請求的數據是json格式,json格式中有一個Null,這個東西,python是不認識的。python認識的是None。如果json字符串中有個Null,eval()
是沒有辦法把Null轉成None。
有一個json庫來解決這個轉換問題,json庫不需要額外安裝,直接引入就可以了。如果json字符串中有個Null,會自動將它轉換成None。可以將json字符串轉換成python的字典。
req_datas=json.loads(datas)
# 函數:功能。拿到測試數據,發送http請求,獲取響應結果。
# 定義函數、類的時候不能與python的自帶的函數重名。因為名字一樣,代碼運行後會先從你定義的函數下面找內容,找不到就報錯了。
import json
import requests
def myRequests(url ,method ,datas):
# 判斷請求類型
if method =="get":
res =requests.get(url,datas)
else:
res =requests.post(url,datas)
print(res.text)
'''
返回數據的格式不用設置,默認返回的是個字符串。
服務器返回來的都是字符串,無論它的數據格式是json、xml、html,
對於客戶端來說,拿到的首先是字符串的格式。其次想轉成json、xml、html,
調用對應的庫轉換就可以了。
'''
# ##用例一
# url1 ="https://api.apishop.net/common/dogFamily/queryDogListByKeyword"
# datas ={"apiKey" :"w6XRBKH974efb492355fef8073aa1cd3eb819932694d6a5","keyword":"金毛"}
# method ="post"
# myRequests(url1 ,method ,datas)
#
#
# ##用例二
# print("=======測試用例2=====")
#
# datas_2 ={"apiKey" :"w6XRBKH974efb492355fef8073aa1cd3eb819932694d6a5","keyword":88}
# method ="post"
# myRequests(url1 ,method ,datas_2)
#
# ##用例三
# print("==========測試用例3============")
#
# url2="https://api.apishop.net/common/dogFamily/queryDogInfo"
# datas_3 ={"apiKey" :"w6XRBKH974efb492355fef8073aa1cd3eb819932694d6a5","petID":8}
# method_3 ="post"
# myRequests(url2 ,method_3 ,datas_3)
from openpyxl import load_workbook
#加載測試文件
wb=load_workbook("sample.xlsx")
#找到測試數據所在的表單
sh=wb["Sheet1"]
#獲取某個單元格的值,第二行第二列
#第二行數據
# url=sh.cell(row=2,column=2).value
# method=sh.cell(row=2,column=3).value
# datas=sh.cell(row=2,column=4).value
# print("url:",url,"method:",method,"datas:",datas)
# myRequests(url, method, datas)
#第三行數據
# url=sh.cell(row=3,column=2).value
# method=sh.cell(row=3,column=3).value
# datas=sh.cell(row=3,column=4).value
# print("url:",url,"method:",method,"datas:",datas)
# myRequests(url, method, datas)
#測試數據有多少行
rows=sh.max_row #[1,2,3,4]
#range(4) #[1,2,3]
#range(起始值,終點值) range(2,5) [2,3,4]
#for循環實現遍歷---遍歷行號。
for item in range(2,rows+1):
#拿到第一行的行號
print(item)
#獲取每一行的請求數據、地址、請求方法。
url=sh.cell(row=item,column=2).value
method=sh.cell(row=item,column=3).value
datas=sh.cell(row=item,column=4).value
print("url:",url,"method:",method,"datas:",datas)
#將datas轉換成字典。默認從excel中讀取出來的是字符串。
#將json字符串轉換成python字典。
req_datas=json.loads(datas)
#發送一次接口請求。
myRequests(url, method, req_datas)
運行結果