一、1.首先學習接口自動化需要具備的知識:
(1)python基礎知識:
掌握數據類型:字符串、列表、字典、數值及函數、類和面向對象編程的思想
(2)學習requests庫
(3)讀取測試用例需要用到Excel,所以還需要掌握python的openpyxl或者xlrd去封裝獲取數據的方法
(4)unittest單元測試
(5)loging日志模塊的封裝
(6)jenkins做持續集成
2.接口自動化框架的實現思路
(1)首先我們需要封裝一個requests的方法支持‘post’、‘get’請求方式(code):

(2)有了請求接口的方法了之后需要寫測試用例用到了unittest class Test_Login(unittest.TestCase):
# def __init__(self,methodName,url,method,expected,data=None):
# super(Test_Login,self).__init__(methodName)
# self.methodName = methodName
# self.url = url
# self.method = method
# self.data = data
# self.expected = expected
def setUp(self) -> None:
print('>>>>>>>>>開始了')
self.re = HttpRequests()
def tearDown(self) -> None:
print('>>>>>>>>>>>結束了')
@data(*test_data)
def test_login_01(self,item):
'''
賬號密碼正確登錄
:return:
'''
# res = self.re.run_method(self.url,self.method,self.data,getattr(Get_data,'cookie')) # 第一種方法 通過初始化取值
res = self.re.run_method(item['url'],item['request_method'],eval(item['data']),getattr(Get_data,'cookie')) # 第二種方法 通過ddt取值
# res = self.re.run_method(test_data['url'],'post',test_data['data'],getattr(Get_data,'cookie')) # 調試用的數據
if res.cookies:
setattr(Get_data,'cookie',res.cookies) # 反射
try:
# self.assertEqual(res['message'],self.expected,'測試未通過')
self.assertEqual(item['expected'],res.json()['message'],'測試未通過')
except AttributeError as e:
print("出錯啦: %s" % e)
如上代碼采用了ddt讀取測試數據的方式所以我們需要封裝一個讀取數據的類我們用openpyxl模塊
unittest:
setUp(self)、tearDown(self):測試用例執行前后的初始化工作
self.assertEqual:用來斷言預期結果與實際結果
3.封裝讀取測試數據的方法openpyxl
首先我們在Do_Excel里面初始化傳參file_name(文件名), sheet_name(工作表名):
接下來又分別封裝了兩個方法:get_header(self)、get_data(self)
get_header()這個方法用來讀取我們測試用例的標題行

get_data(self)這個方法用於獲取我們的所有行並根據行對應的列取值:i,j代表行、列
4.現在我們能夠通過從Excel中獲取數據了獲取后的數據是:[{"key":"value"},{"key":"value"}]列表里面嵌套了字典
現在有兩種方法進行數據的讀取,第一種方法是:上面第二步的ddt方式讀取測試數據
另外一種方法是:需要將unittest測試用例類Test_Login用超繼承的方式super()來初始化並保留父類的方法
class Test_Login(unittest.TestCase):
def __init__(self,methodName,url,method,expected,data=None):
super(Test_Login,self).__init__(methodName)
self.methodName = methodName
self.url = url
self.method = method
self.data = data
self.expected = expected
5.創建一個run.py運行所有測試用例:
# 導入測試用例類
from run_method.Test_login import Test_Login
# 導入Excel方法
from run_method.do_excel import Do_Excel
# 導入單元測試unittest
import unittest
test_data = Do_Excel('python_data.xlsx','py').get_data() # 從Excel讀取測試數據
suit = unittest.TestSuite()
suit.addTest(Test_Login('test_login_01',item['url'],item['request_method'],item['expected'],eval(item['data'])))
suit.addTest(Test_Login('test_login_02'))
run = unittest.TextTestRunner()
run.run(suit)
6.以上基本實現了用例從Excel中讀取后來運行測試用例,接下來該實現用例報告的生成了這時候我們需要引入HTMLTestRunner這個文件:
修改上面的run.py文件:
test_data = Do_Excel('python_data.xlsx','py').get_data() # 從Excel讀取測試數據
suit = unittest.TestSuite()
suit.addTest(Test_Login('test_login_01',item['url'],item['request_method'],item['expected'],eval(item['data'])))
suit.addTest(Test_Login('test_login_02'))
with open('./report.html','wb') as f:
run = HTMLTestRunner(stream=f,
title='login測試用例',
description='登錄測試報告',
verbosity=2
)
run.run(suit)
這樣簡單的一個接口自動化框架已實現后續還會遇到數據依賴的問題,剛剛學到這塊等學完在做筆記
養成良好的筆記習慣有助於復習及加深熟練,測試路程任重而道遠,盼君與我一路同行共同進步

