一房揭、requests庫
二、pandas庫
三晌端、接口示例
前言
本文檔講述使用python requests庫請求接口捅暴、以excel表格的方式維護測試用例
一、requests庫
1咧纠、環(huán)境準備
1蓬痒、在已安裝python3條件下,在cmd窗口中漆羔,輸入以下命令進行安裝:
pip install requests
出現(xiàn)提示:
Successfully installed requests-2.22.0
梧奢,說明已安裝成功。2、查看安裝結(jié)果:
pip show requests
3、引用方式
在python中捌袜,requests庫的引用方式很簡單呐矾,使用import requests
使用requests庫請求接口如下:
import requests
r = requests.get('https://api.github.com/events')
print(r)
上述代碼中:
(1)import requests表示引用python requests庫
(2)get表示接口請求方式
(3)https://api.github.com/events
表示接口地址
(4)最后把請求結(jié)果賦值給變量r,并打印
2呼猪、headers/參數(shù)傳遞
import requests
url = "https://xxx/xxx-api/api/common/login"
payload = '{"username": "13916166492", "password": "111111", "rememberMe": false, "language": "zh_CN", "source": "ts"}'
headers = {'Content-Type': "application/javascript"}
response = requests.post(url, data=payload, headers=headers)
print(response.text)
上述代碼中:
(1)payload為請求參數(shù)朵锣,無則不寫
(2)headers為請求頭浇垦,無則不寫
3蹦锋、接口響應(yīng)
1兆沙、獲取響應(yīng)碼
import requests
url = "https://xxx/xxx-api/api/common/login"
payload = '{"username": "13916166492", "password": "111111", "rememberMe": false, "language": "zh_CN", "source": "ts"}'
headers = {'Content-Type': "application/javascript"}
response = requests.post(url, data=payload, headers=headers)
print(response.status_code)
python中使用status_code
獲取響應(yīng)狀態(tài)碼
2、獲取響應(yīng)數(shù)據(jù)
響應(yīng)數(shù)據(jù)類型為字符串:
import requests
url = "https://xxx/xxx-api/api/common/login"
payload = '{"username": "13916166492", "password": "111111", "rememberMe": false, "language": "zh_CN", "source": "ts"}'
headers = {'Content-Type': "application/javascript"}
response = requests.post(url, data=payload, headers=headers)
print(response.text)
響應(yīng)數(shù)據(jù)類型為字典:
import requests
url = "https://xxx/xxx-api/api/common/login"
payload = '{"username": "13916166492", "password": "111111", "rememberMe": false, "language": "zh_CN", "source": "ts"}'
headers = {'Content-Type': "application/javascript"}
response = requests.post(url, data=payload, headers=headers).json()
print(type(response))
3莉掂、獲取/引用cookie
(1)獲取cookie
import requests
url = "https://xxx/xxx-api/api/common/login"
payload = '{"username": "13916166492", "password": "111111", "rememberMe": false, "language": "zh_CN", "source": "ts"}'
headers = {'Content-Type': "application/javascript"}
response = requests.post(url, data=payload, headers=headers)
get_cookies = requests.utils.dict_from_cookiejar(response.cookies)
print(get_cookies)
python中使用requests.utils.dict_from_cookiejar(response.cookies)
獲取cookies
(2)使用cookies
import requests
url = "https://xxx/xxx-api/api/common/login"
payload = '{"username": "13916166492", "password": "111111", "rememberMe": false, "language": "zh_CN", "source": "ts"}'
headers = {'Content-Type': "application/javascript"}
res = requests.post(url, data=payload, headers=headers)
get_cookies = requests.utils.dict_from_cookiejar(res.cookies)
# print(get_cookies)
url_ = 'https://xxx/xxx-api/api/news/home?channelId=360&pageSize=20'
r = requests.get(url_, cookies=get_cookies)
print(r)
4葛圃、設(shè)置請求超時
import requests
url = "https://xxx/xxx-api/api/common/login"
payload = '{"username": "13916166492", "password": "111111", "rememberMe": false, "language": "zh_CN", "source": "ts"}'
headers = {'Content-Type': "application/javascript"}
res = requests.post(url, data=payload, headers=headers, timeout=3)
print(res)
在requests請求中使用timeout設(shè)置請求超時時間
官方文檔:http://2.python-requests.org/zh_CN/latest/user/quickstart.html#post
二、pandas庫
使用python pandas庫讀憎妙、寫入表格來讀取接口請求信息装悲,通過寫入表格來記錄請求結(jié)果
1、安裝
cmd窗口中輸入pip install pandas
進行安裝
2尚氛、pandas讀取excel表格
表格如下:
import pandas as pd
# 讀
data = pd.read_excel('1.xlsx')
# 查看所有的值
print(data.values)
# 查看第一行的值
print(data.values[0])
# 查看某一列所有的值
print(data['user'].values)
# 新增列
data['sex'] = None
# 新增行
data.loc[3] = ['name5', 231, '男']
# 刪除行:axis=0
data = data.drop([0, 1], axis=0)
# 刪除列:axis=1
data.drop('sex', axis=1)
讀取excel并以字典的形式展示輸出結(jié)果:
import pandas as pd
# 讀取測試用例Excel文件
def read_csv_file(file_path):
df = pd.read_excel(file_path)
df.fillna("", inplace=True) # 填充表格中失卻的值
test_data = []
# 獲取行號的索引诀诊,并對其進行遍歷
for i in df.index.values:
# 根據(jù)i來獲取每一行指定的數(shù)據(jù) 并利用to_dict轉(zhuǎn)成字典
row_data = df.loc[i, ['user', 'pwd']].to_dict()
test_data.append(row_data)
print("最終獲取到的數(shù)據(jù)是:", test_data)
file_path = '1.xlsx'
read_csv_file(file_path)
3、pandas寫入excel表格
import pandas as pd
# 生成表格名稱
name_xls = 'demo.xlsx'
# 要寫入的表格的內(nèi)容
data = {'usr': ['name01', 'name002', 'name003'], 'age': [15, 16, 17], 'sex': ['boy', 'girl', 'girl']}
# 寫入表格
df = pd.DataFrame(data)
df.to_excel(name_xls, sheet_name="表格", index=False, header=True) # index:索引阅嘶, header:表頭
import pandas as pd
# 寫入指定表格
# name_xls = 'demo.xlsx'
writer = pd.ExcelWriter('demo.xlsx')
# 要寫入的表格的內(nèi)容
data = {'usr': ['name04', 'name006', 'name007', 'name009'], 'age': [15, 16, 17, 18], 'sex': ['boy', 'boy', 'girl', 'girl']}
# 寫入表格
df = pd.DataFrame(data)
df.to_excel(writer, '表格2')
writer.save()
表格中追加內(nèi)容:
import pandas as pd
# 寫入指定表格
# name_xls = 'demo.xlsx'
writer = pd.ExcelWriter('demo.xlsx')
# 要寫入的表格的內(nèi)容
data = {'usr': ['name04', 'name006', 'name007', 'name009'], 'age': [15, 16, 17, 18], 'sex': ['boy', 'boy', 'girl', 'girl'], 'addre': ['北京', '天津', '上海', '杭州']}
# 寫入表格
df = pd.DataFrame(data)
df.to_excel(writer, '表格2')
writer.save()
3属瓣、接口測試示例
測試用例test.xlsx:
執(zhí)行文件api_test_execl.py:
import sys
import time
from os.path import dirname, abspath
current_path = dirname(dirname(abspath(__file__))).replace("\\", '/')
print(current_path)
sys.path.append(current_path)
import requests
import pandas as pd
# post請求
def request_api_post_form(url, headers, data):
response = requests.post(url, headers=eval(headers), data=data, timeout=5)
return response.text
# GET 請求
def request_api_get(url, headers, data):
response = requests.get(url, headers=eval(headers), params=data, timeout=5)
return response.text
# 讀取測試用例excel文件
def read_csv_file():
df = pd.read_excel(current_path + '/api_test/test.xlsx')
df.fillna("", inplace=True)
test_data = []
# 獲取行號的索引,并對其進行遍歷
for i in df.index.values:
# 根據(jù)i來獲取每一行指定的數(shù)據(jù) 并利用to_dict轉(zhuǎn)成字典
row_data = df.loc[i, ['interface_name', 'headers', 'domain_name', 'addre', 'data', 'request_type', 'Actual_results']].to_dict()
test_data.append(row_data)
# print("最終獲取到的數(shù)據(jù)是:", test_data)
return test_data
data = {"interface_name": [], "headers": [], "domain_name": [], "addre": [], "data": [], "request_type": [], "Actual_results": [], "response": [], "result": []}
for i in read_csv_file():
url = str(i['domain_name']) + str(i['addre'])
try:
if i['request_type'] == 'get':
response_result = request_api_get(url, i['headers'], i['data'])
elif i['request_type'] == 'post':
response_result = request_api_post_form(url, i['headers'], i['data'])
else:
print("請檢查接口的請求方式Q度帷抡蛙!")
# print("response_result:", response_result)
for j in ("interface_name", "headers", "domain_name", "addre", "data", "request_type", "Actual_results"):
data[j].append(i[j])
data["response"].append(response_result)
if i['Actual_results'] in response_result:
resul = 'SUCCESS'
else:
resul = 'FAIL'
data["result"].append(resul)
except Exception as err:
print("請檢查 " + i['interface_name'] + "接口: " + i['addre'])
raise err
# 生成報告名稱
now_time = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
report_name_xls = f'/測試報告-{str(now_time)}.xlsx' # 生成Execl命名
# 生成報告
report_path = current_path + "/api_test/report" + report_name_xls
df = pd.DataFrame(data)
df.to_excel(report_path, sheet_name="報告", index=False, header=True)
測試報告