1.使用Python-requests包進行接口測試# 加載包
import requests
# 百度搜索的接口,搜索的內(nèi)容為requests
url = "http://www.baidu.com/s?wd=requests"
# 發(fā)送請求,將服務器返回的響應放到變量r中
r = requests.get(url)
# 打印文本格式的響應
print(r.text)
# 對結果進行斷言,判斷關鍵字在不在結果中
# assert "Requests: HTTP for Humans?" in r.text
# 對金融項目注冊接口的測試
# get請求的參數(shù)拼接到URL后面 ?key=value&key=value&key=value 的格式
url = "http://192.168.2.36:8089/futureloan/mvc/api/member/register?mobilephone=12345&pwd=12345"
r = requests.get(url)
print(r.text)
print(r.json()) # 如果響應體是json格式的內(nèi)容,使用r.json()
print(r.json()['code']) # r.json()后可以當做字典使用
assert r.json()['code'] == "20108"
assert r.json()['msg'] == "密碼長度必須為6~18"
# get請求的參數(shù),使用params 傳遞
url = "http://192.168.2.36:8089/futureloan/mvc/api/member/register?"
cs = {
"mobilephone": "18220820775",
"pwd": "12345",
"regname": "hello"
}
# params 參數(shù)不能寫錯,只能是requests中定義好的參數(shù)名
r = requests.get(url, params=cs)
print(r.text)
assert r.json()['code'] == "20108"
assert r.json()['msg'] == "密碼長度必須為6~18"
print("狀態(tài)碼", r.status_code)
print("狀態(tài)原因", r.reason)
print("響應頭", r.headers)
print("cookies", r.cookies)
print("文本格式的響應體", r.text)
print("請求頭", r.request.headers)
# 心知天氣查詢接口的測試
url = "https://api.seniverse.com/v3/weather/now.json?key=Sh-LsrOsCyo4vp8Tp&location=xian"
r = requests.get(url)
print(r.json())
# 西安
print(r.json()['results'][0]['location']['name'], end = "當前的溫度:")
# 溫度
print(r.json()['results'][0]['now']['temperature'])
# 獲取用戶列表
url = "http://192.168.2.36:8089/futureloan/mvc/api/member/list"
r = requests.get(url)
print(r.json())
print(r.request.headers) # {'User-Agent': 'python-requests/2.25.1'
# 設置 User-Agent , 偽裝成是瀏覽器發(fā)的請求
hds = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"
}
r = requests.grinet(url, headers=hds)
print(r.json())
print(r.request.headers)2.用requests 發(fā)送 post 請求 1.data傳參,傳的是表單格式的參數(shù)
2.json傳參,傳的是json格式的參數(shù)
具體用data還是json傳參,要看接口是如何實現(xiàn)的 金融登錄接口url = "http://192.168.2.36:8089/futureloan/mvc/api/member/login"
cs = {
"mobilephone": "18220820775",
"pwd": "123456789",
}
# 用data傳參
r = requests.post(url, data=cs)
print(r.text)
# 請求頭中,'Content-Type': 'application/x-www-form-urlencoded'
print(r.request.headers)
# 用json 傳參
r = requests.post(url, json=cs)
print(r.text) # 手機號碼不能為空,這個接口不支持用json 傳參,參數(shù)未識別出來
# 請求頭中,'Content-Type': 'application/json'
print(r.request.headers)
3.接口測試的網(wǎng)站, 用戶發(fā)送請求,該網(wǎng)站把收到的請求# 組裝成json格式的響應,返回給用戶
# /post 是post方法
# /get 是get方法
# delete 是delete 方法
url = "http://www.httpbin.org/post"
cs = {
"user": "admin",
"email": "[email protected]"
}
path = "c:/test.txt"
with open(path, mode='r') as f :
fs = {
# "files" 上傳接口的參數(shù)名,是接口定義的
"files1": (path, f), # 二元組: (文件名稱,文件對象)
"files2": (path, f, "text/plain") # 三元組 文件名,文件對象,文件類型)
}
r = requests.post(url, data=cs, files=fs)
print(r.text)
4.手動設置Cookie # 沒有登錄的情況下,訪問接口,會跳轉到登錄頁面
url = "https://www.bagevent.com/account/dashboard"
r = requests.get(url)
print(r.text)
# 使用界面登錄后,服務器返回的cookie信息,訪問該接口,返回登統(tǒng)計頁面錄后的
hds = {
"Cookie": '_ga=GA1.2.898728043.1615965992; _gid=GA1.2.872824269.1615965992; Hm_lvt_1fc37bec18db735c69ebe77d923b3ab9=1615965992; __auc=13ad1c891783f1445b1a072ed33; sdktoken=68edd18e335220d175f0bf64b259c6f5; uid=ef965a462d80fd4d62c3d118fe742e20; nickName=undefined; avatar=undefined; MEIQIA_TRACK_ID=1psK7g7yqqODa45WOXfKCti4C9P; BAGSESSIONID=02afdf9b-261c-4436-b259-4ddd02e0ca52; JSESSIONID=79B179498FBB86DE1EDDBB623F22A614; __asc=c76a6638178441def3c8c64462f; MEIQIA_VISIT_ID=1pv512xOjWnzNuo9ihmWU9LF9Pa; Hm_lpvt_1fc37bec18db735c69ebe77d923b3ab9=1616050526; _gat=1; BAG_EVENT_TOKEN_=02de735f68204d51009e7edda78e58c13a3fcdd1; BAG_EVENT_CK_KEY_="[email protected]"; BAG_EVENT_CK_TOKEN_=2440f5d17af838308ba4b390db81af38'
}
r = requests.get(url, headers=hds)
print(r.text)
5.自動管理cookie的機制,創(chuàng)建一個session = requests.session(), 自動維護cookie信息s = requests.session() # 創(chuàng)建session
print("登錄之前的cookie信息:", s.cookies)
#百格登錄的接口
url = "https://www.bagevent.com/user/login"
cs = {
"access_type": 1,
"loginType": 1,
"emailLoginWay": 0,
"account": "[email protected] ",
"password": "qq2780487875",
"remindmeBox": "on",
"remindme": 1
}
r = s.post(url, data=cs) #用session 發(fā)送請求
assert "<title>百格活動 - 賬戶總覽</title>" in r.text
print("登錄之后的cookie信息:", s.cookies)
6.timeout 參數(shù) , 設置請求的超時 1. 接口執(zhí)行耗時比較久,默認的超時時間內(nèi)執(zhí)行不完.比如上傳一個2G的大文件
2. 接口性能要求,接口在xx ms內(nèi)返回結果. 超過xx ms,認為性能不符合要求# 淘寶查詢手機號歸屬地的接口
# tcc.taobao.com/cc/json/mobile_tel_segment.htm
url = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=180122345678"
# 該接口是否能在200毫秒返回結果
for i in range(10):
try:
r = requests.get(url, timeout=0.2)
# print(r.text)
print(r.status_code)
except Exception as e:
print(e)
|