python接口測試

一房揭、requests庫
二、pandas庫
三晌端、接口示例

前言
本文檔講述使用python requests庫請求接口捅暴、以excel表格的方式維護測試用例

一、requests庫

1咧纠、環(huán)境準備

1蓬痒、在已安裝python3條件下,在cmd窗口中漆羔,輸入以下命令進行安裝:

pip install requests

圖片.png

出現(xiàn)提示:Successfully installed requests-2.22.0梧奢,說明已安裝成功。
2、查看安裝結(jié)果:

pip show requests
圖片.png

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表格

表格如下:


圖片.png
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属瓣、接口測試示例

圖片.png

測試用例test.xlsx:


圖片.png

執(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)

測試報告


測試報告.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市魂迄,隨后出現(xiàn)的幾起案子粗截,更是在濱河造成了極大的恐慌,老刑警劉巖捣炬,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熊昌,死亡現(xiàn)場離奇詭異,居然都是意外死亡湿酸,警方通過查閱死者的電腦和手機婿屹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來推溃,“玉大人昂利,你說我怎么就攤上這事√玻” “怎么了蜂奸?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長硬萍。 經(jīng)常有香客問我扩所,道長,這世上最難降的妖魔是什么襟铭? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任碌奉,我火速辦了婚禮短曾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赐劣。我一直安慰自己嫉拐,他們只是感情好,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布魁兼。 她就那樣靜靜地躺著婉徘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咐汞。 梳的紋絲不亂的頭發(fā)上盖呼,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音化撕,去河邊找鬼几晤。 笑死,一個胖子當著我的面吹牛植阴,可吹牛的內(nèi)容都是我干的蟹瘾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼掠手,長吁一口氣:“原來是場噩夢啊……” “哼憾朴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喷鸽,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤众雷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后做祝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砾省,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年剖淀,在試婚紗的時候發(fā)現(xiàn)自己被綠了纯蛾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纤房。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡纵隔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炮姨,到底是詐尸還是另有隱情捌刮,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布舒岸,位于F島的核電站绅作,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛾派。R本人自食惡果不足惜俄认,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一个少、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧眯杏,春花似錦夜焦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至萎津,卻和暖如春卸伞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锉屈。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工荤傲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颈渊。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓弃酌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親儡炼。 傳聞我的和親對象是個殘疾皇子妓湘,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354