Python+requests+unittest執(zhí)行接口自動(dòng)化測試詳情
1、安裝requests、xlrd、json、unittest庫
<1>pip 命令安裝:
pip install requests
pip install xlrd
pip install json
pip install unittest
2、創(chuàng)建六類Python Package
利用Page Object Model 設(shè)計(jì)理念創(chuàng)建六類Python Package(也可根據(jù)項(xiàng)目要求具體實(shí)施)

3、創(chuàng)建一個(gè)Base_Page.py
先在base包里創(chuàng)建一個(gè)Base_Page.py

<1>導(dǎo)入模塊,并創(chuàng)建Base類,封裝各類請求方法
import requests #導(dǎo)入requests模塊
class Base():
def method_post(self,url,params = None,data = None,headers = None,files = None):
return requests.post(url = url,params = params,data = data,headers = headers,files = files)
def method_get(self,url,params = None,data = None,headers = None,files = None):
return requests.get(url = url,params = params,data = data,headers = headers,files = files)
def method_put(self,url,params = None,data = None,headers = None,files = None):
return requests.put(url = url,params = params,data = data,headers = headers,files = files)
def method_delete(self,url,params = None,data = None,headers = None,files = None):
return requests.delete(url = url,params = params,data = data,headers = headers,files = files因?yàn)槊恳粋€(gè)請求都會(huì)有params參數(shù)或是data參數(shù),但是不可能兩個(gè)都存在,所以這里用了None,依次類推
<2>適配于接口用例執(zhí)行,讀取Excel表時(shí),將各類請求做判斷,當(dāng)符合哪一種時(shí),就去執(zhí)行哪一種
def requests_type(self,method,url,params = None,data = None,headers = None,files = None):
if method =='post' or method =='POST':
return self.method_post(url = url,params = params,data = data,headers = headers,files = files)
elif method =='get' or method =='GET':
return self.method_get(url = url,params = params,data = data,headers = headers,files = files)
elif method =='put' or method =='PUT':
return requests.put(url = url,params = params,data = data,headers = headers,files = files)
elif method =='delete' or method =='DELETE':
return requests.delete(url = url,params = params,data = data,headers = headers,files = files)<3> 將幾種請求做簡單調(diào)試,調(diào)試通了,那么我們就可以進(jìn)行下一項(xiàng)

也可以對需要拿到cookie的接口進(jìn)行封裝方法保存:
def Get_Login_cookie(self,data):
res = self.method_post(url = "請求網(wǎng)址",data = data)
return {"userId":str(res.json()['result']['userId']),"sessionId":res.json()['result']['sessionId']}之后我們要將base頁驗(yàn)證的這些代碼做清除,否則的話永遠(yuǎn)都是調(diào)的這些接口
4、創(chuàng)建common類
再common類下創(chuàng)建commons.py文件,并創(chuàng)建common類

<1> 封裝日志方法
這里我添加了一個(gè)data包,用于存放xlrd表,以及html報(bào)告存放路徑、log日志存放路徑
log_path = r'D:\PycharmProjects\自動(dòng)化接口\自動(dòng)化接口測試\report\logs'
report_html = r'D:\PycharmProjects\自動(dòng)化接口\自動(dòng)化接口測試\report\html'
read_xlrd = r'D:\PycharmProjects\自動(dòng)化接口\自動(dòng)化接口測試\data'
class Common():
#封裝日志方法
def get_logs(self,path = log_path):
import logging,time
logs = logging.getLogger()
logs.setLevel(logging.DEBUG)
path = path+'/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.log'
write_file = logging.FileHandler(path,'a+',encoding='utf-8')
write_file.setLevel(logging.DEBUG)
set_logs = logging.Formatter('%(asctime)s - %(filename)s - %(funcName)s - %(levelname)s - %(message)s')
write_file.setFormatter(set_logs)
pycharm_text = logging.StreamHandler()
pycharm_text.setFormatter(set_logs)
logs.addHandler(write_file)
logs.addHandler(pycharm_text)
return logs<2> 封裝讀取Excel表方法,把他轉(zhuǎn)換成字典形式,方便json格式讀取
# 讀取Excel表方法,方便后續(xù)讀取接口用例數(shù)據(jù)
def ReadExcelTypeDict(self,file_name,path = read_xlrd):
path = path+'/' + file_name
import xlrd
work_book = xlrd.open_workbook(path) # 打開Excel表
sheets = work_book.sheet_names() # 獲取所有的sheets頁
DatasList = []
for sheet in sheets:
sheets = work_book.sheet_by_name(sheet)
nrows = sheets.nrows
for i in range(0,nrows):
values = sheets.row_values(i)
DatasList.append(values)
title_list = DatasList[0]
content_list = DatasList[1:]
new_list = []
for content in content_list:
dic = {}
for i in range(len(content)):
dic[title_list[i]] = content[i]
new_list.append(dic)
return new_list #最終返回為字典形式 有鍵和值為什么要轉(zhuǎn)換格式呢?
這里就涉及到了怎么設(shè)計(jì)一個(gè)自動(dòng)化接口用例

用例的參數(shù)值要用json格式寫入,不要有空格
預(yù)期結(jié)果的出參也要用json格式寫入
不要有' '值都要用" "包起來
<3>封裝一個(gè)生成HTML報(bào)告方法
# 封裝一個(gè)HTML報(bào)告方法
def GetHtmlResult(self,suite,title,path = report_html):
import HTMLTestReportCN,time
path = path + '/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.html'
with open(path,'wb+') as f:
run = HTMLTestReportCN.HTMLTestRunner(stream=f,description='用戶相關(guān)接口測試報(bào)告',tester='小白',title = title)
run.run(suite)其余還有需要補(bǔ)充的可以繼續(xù)添加,我這里三個(gè)基本夠用
5、讀取Excel數(shù)據(jù)表聯(lián)合使用
在case包下創(chuàng)test用例,并調(diào)用我們在base頁封裝好的請求api以及common中的讀取Excel數(shù)據(jù)表聯(lián)合使用
<1>創(chuàng)建test_login.py

<2> 導(dǎo)入unittest、common類下的commons類、ddt數(shù)據(jù)驅(qū)動(dòng)、Base下的base_page頁
import unittest import ddt import 自動(dòng)化接口測試.common.commons as common from 自動(dòng)化接口測試.base.Base_Page import Base
<3> 搭建unittest框架內(nèi)部,并填充方法
import unittest
import ddt
import 自動(dòng)化接口測試.common.commons as common
from 自動(dòng)化接口測試.base.Base_Page import Base
r = common.Common().ReadExcelTypeDict('cezxhi .xlsx') # 拿到具體的Excel表數(shù)據(jù)
@ddt.ddt #導(dǎo)入ddt模塊
class TestLogin(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None: # setupclass類方法 全部用例開始前執(zhí)行一次
cls.logs = common.Common().get_logs() # 導(dǎo)入日志方法
cls.logs.debug('開始寫入接口自動(dòng)化測試用例')
@classmethod
def tearDownClass(cls) -> None:
cls.logs.debug('自動(dòng)化接口用例結(jié)束')
def setUp(self) -> None:
self.logs.debug('開始本條接口用例')
def tearDown(self) -> None:
self.logs.debug('結(jié)束本條用例')
@ddt.data(*r) # 引入ddt模塊,讀取拿到的數(shù)據(jù)
def test_logins(self,pars): # 用例方法名開頭必須已test pars參數(shù)為接收的表數(shù)據(jù)值
import json #導(dǎo)入json模塊
dic = json.loads(pars['body參數(shù)值']) # 將Excel數(shù)據(jù)中的參數(shù)值轉(zhuǎn)變?yōu)閖son格式
url = pars['接口地址'] # 拿到請求url
yuqi = pars['預(yù)期結(jié)果'] # 拿到預(yù)期結(jié)果
fs = pars['請求方式'] # 拿到請求方式
result = Base().requests_type(method = fs,url = url,data = dic) # 填充base頁的請求api
self.assertEqual(result.text,yuqi) # 進(jìn)行斷言 看用例是否通過<4> 執(zhí)行用例后生成測試報(bào)告:
if __name__ == '__main__':
load = unittest.TestLoader().loadTestsFromTestCase(TestLogin) #使用loader加載方式 來找尋所有已test開頭的用例
suite = unittest.TestSuite([load,])
common.Common().GetHtmlResult(suite,'登錄測試用例')<5> copy當(dāng)前要執(zhí)行的腳本路徑,添加到運(yùn)行方式為python里




最后我們r(jià)un一下

控制臺(tái)是這樣的

為什么會(huì)有400呢?因?yàn)橛幸恍┙涌谑钱惓5?,比如url錯(cuò)誤的,少傳入?yún)?shù)、空參,所以會(huì)出錯(cuò),常理之中
<6> 看下生成的測試報(bào)告
在pycharm中是這樣的

然后我們copy下他的路徑到瀏覽器中查看


根據(jù)我追蹤的信息,第一條失敗是因?yàn)閟essionId是可以變的,每一次的值都是不一樣,在這里也希望大家能夠找到BUG,并妥善處理好每一個(gè)問題。
到此這篇關(guān)于Python+requests+unittest執(zhí)行接口自動(dòng)化測試詳情的文章就介紹到這了,更多相關(guān)Python接口測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python3+Requests+Excel完整接口自動(dòng)化測試框架的實(shí)現(xiàn)
- 利用Python如何實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)的接口自動(dòng)化測試
- python接口自動(dòng)化測試之接口數(shù)據(jù)依賴的實(shí)現(xiàn)方法
- Python http接口自動(dòng)化測試框架實(shí)現(xiàn)方法示例
- Python接口自動(dòng)化測試的實(shí)現(xiàn)
- Python+unittest+requests+excel實(shí)現(xiàn)接口自動(dòng)化測試框架
- Python實(shí)現(xiàn)http接口自動(dòng)化測試的示例代碼
- python使用pytest接口自動(dòng)化測試的使用
- Python接口自動(dòng)化測試框架運(yùn)行原理及流程
- python接口自動(dòng)化測試數(shù)據(jù)和代碼分離解析
- Python+Requests+PyTest+Excel+Allure?接口自動(dòng)化測試實(shí)戰(zhàn)
- python使用requests+excel進(jìn)行接口自動(dòng)化測試的實(shí)現(xiàn)
相關(guān)文章
Python語法def語句及復(fù)雜用法實(shí)例探究
在 Python 中,def?是用于定義函數(shù)的關(guān)鍵字,本文將深入介紹def的用法和特點(diǎn),詳細(xì)說明如何定義函數(shù)、傳遞參數(shù)、返回值以及更復(fù)雜的用法2024-01-01
Matplotlib實(shí)戰(zhàn)之折線圖繪制詳解
折線圖是一種用于可視化數(shù)據(jù)變化趨勢的圖表,它可以用于表示任何數(shù)值隨著時(shí)間或類別的變化,本文主要介紹了如何利用Matplotlib實(shí)現(xiàn)折線圖的繪制,感興趣的可以了解下2023-08-08
Python調(diào)用PC攝像頭實(shí)現(xiàn)掃描二維碼
PC攝像機(jī)掃描二維碼的應(yīng)用場景很廣泛,可以應(yīng)用于各種需要快速掃描、識(shí)別和管理的場景,本文就來具體講講如何用Python實(shí)現(xiàn)這一功能吧2023-05-05
python實(shí)現(xiàn)對象列表根據(jù)某個(gè)屬性排序的方法詳解
這篇文章主要介紹了python實(shí)現(xiàn)對象列表根據(jù)某個(gè)屬性排序的方法,結(jié)合具體實(shí)例形式詳細(xì)分析了Python對象列表遍歷、排序的兩種常見操作技巧,需要的朋友可以參考下2019-06-06
Flask框架學(xué)習(xí)筆記之使用Flask實(shí)現(xiàn)表單開發(fā)詳解
這篇文章主要介紹了Flask框架學(xué)習(xí)筆記之使用Flask實(shí)現(xiàn)表單開發(fā),結(jié)合實(shí)例形式較為詳細(xì)的分析了flask框架表單模板定義、數(shù)據(jù)提交等相關(guān)操作技巧,需要的朋友可以參考下2019-08-08
Python實(shí)戰(zhàn)項(xiàng)目用PyQt5制作漫畫臉GUI界面
PyQt5 是用來創(chuàng)建Python GUI應(yīng)用程序的工具包。作為一個(gè)跨平臺(tái)的工具包,PyQt可以在所有主流操作系統(tǒng)上運(yùn)行,本文主要介紹了如何用PyQt5制作漫畫臉的GUI界面2021-10-10
python 自動(dòng)化將markdown文件轉(zhuǎn)成html文件的方法
這篇文章主要介紹了python 自動(dòng)化將markdown文件轉(zhuǎn)成html文件的方法的相關(guān)資料,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09

