Python 之介面自動化測試框架完整搭建

2021-10-12 09:33:04 字數 4439 閱讀 4086

介面自動化框架

一、整個框架的目錄結構,本次內容著重講解測試用例類,只要掌握了測試用例類和介面測試用例怎麼寫就可以運用此框架。

common目錄

1.contants是處理專案路徑模組,本專案路徑全部採取相對路徑(這樣做的好處是copy到任意地方可以直接執行,不用擔心會路徑報錯)

2.handle_data處理excel用例中需要替換的引數,用來儲存臨時變數,和需要替換的excel用例中需要替換的字串(注意存放臨時變數時int型別應轉換成str型別存放)

3.handle_db是連線資料庫(mysql)處理需要進行資料庫校驗的模組,封裝了三個方法,分別是:獲取到查詢的第一條資料、獲取到查詢的所有資料、獲取查詢到的資料條數

4.handle_request是用來傳送請求的(支援cookie和token)

5.handle_webservice是用來傳送webservice型別介面的請求(用到的比較少可以忽略此模組)

6.myconfig是讀取和寫入配置檔案的模組

7.mylogger是輸出日誌模組,用來呼叫**執行的時候哪些資訊需要寫入日誌中,方便自己除錯和找出介面錯誤資訊,**需要就直接呼叫

8.readexcel讀取excel用例資料的模組

9.send_email是傳送測試報告郵件模組

comf配置檔案

1.日誌等級和測試報告名稱,專案位址,賬號,和資料庫連線資訊修改的地方

data存放excel用例資料

1.ddt資料驅動的

2.htmltestrunner生成測試報告的模組

log存放日誌

檢視日誌,日誌是輪轉的

reports存放測試報告

在此資料夾下檢視報告

testcases存放用例類的模組

所有的測試用例類必須放在此模組

run.py測試執行程式

整個專案只需要執行此模組就可以

二、下面我們來詳細介紹下excel中介面用例該怎麼寫

這裡注意下介面傳入引數data裡的用例1和用例2中的mobile_phone的傳參為什麼是#phone#,為什麼不傳入具體手機號,因為傳入具體的手機號,測試用例只能執行一次,需要手動修改這裡的測試用例資料在進行執行比較。那我們該採用什麼辦法呢,在**裡面隨機生成手機號進行替換(後面**中會指出),怎麼替換呢首先判斷每條用例資料中是否有#phone#,如果有就用生成的隨機手機號進行替換,反之,就直接將介面引數傳入介面中進行請求,獲取結果

還需要注意的是將表單名稱進行修改,如上圖中的下方,名稱隨意取

講完了excel用例,介面用例類怎麼寫(python基礎語法就不多說)我們只講介面的excel用例資料讀取,請求介面,在進行斷言,預期結果和實際結果進行比對

#傳入excel用例所在的路徑和表單名

excel=read_excel(url_dir,"register")

#讀取用例資料

cases=excel.read_data()

@data(*cases)

def test_register(self,case):

# ------第一步:準備用例資料------------

# 獲取請求的引數

# 增加判斷,這裡判斷是否有請求的引數需要替換

if "#phone#"in case["data"]:

# 生成手機號

phone=self.random_phone()

# 進行替換

case["data"]=case["data"].replace("#phone#",phone)

data=eval(case["data"])

# 獲取請求的方法

method=case["method"]

# 獲取請求的位址(配置檔案中讀取的路徑+excel中的讀取路徑做拼接)

url=conf.get("url_project","url")+case["url"]

# 獲取當前用例所在行

row=case["case_id"]+1

# 獲取請求頭(配置檔案中讀取請求頭)

headers=eval(conf.get("url_project","headers"))

# 獲取預期結果

expected=eval(case["expected"])

# ------第二步:傳送請求到介面,獲取實際結果--------

#傳送請求(傳入url、請求方法、請求引數,請求頭、)

#獲取實際結果鄭州哪個**醫院好

res=res1.json()

# -------第三步:比對預期結果和實際結果-----

try:

#斷言介面返回的code和預期結果中的code是否一致

self.assertequal(eval(expected["code"]),res["code"])

#斷言介面返回的msg和預期結果中的msg是否一致

self.assertequal(expected["msg"],res["msg"])

#判斷如果請求成功就到處資料庫中去查詢是否有該資料

if res["msg"]=="ok":

# 去資料庫查詢當前賬號是否存在

sql = "select * from futureloan.member where mobile_phone ={}".format(phone)

# 獲取資料庫中有沒有該使用者資訊,(用handle_db封裝好的方法)

count=self.db.count(sql)

# 對資料庫中返回的資料做斷言,判斷資料庫中是否有一條資料

self.assertequal(1,count)

except assertionerror as e :

#回寫結果到excel中的result列

self.excel.write_data(row=row,column=8,value="未通過")

#列印到控制台

print("預期結果:{}".format(expected))

print("實際結果;{}".format(res))

#將錯誤資訊列印到日誌

log.info("用例:{}--------->未通過".format(case["title"]))

log.error(e)

#如果有錯誤資訊丟擲錯誤資訊

raise e

else:

#回寫結果到excel中的result列

self.excel.write_data(row=row,column=8,value="通過")

log.info("用例:{}--------->通過".format(case["title"]))

#隨機生成手機號方法

@staticmethod

def random_phone():

phone="188"

for i in range(8):

phone+=str(random.randint(0,9))

return phone

**中部分問題

1.上面的url_dir是已經拼接好的路徑匯入進來的,在contants下url_dir裡修改

2.請求位址前半部分讀取conf.ini檔案中的url(建議將介面中相同的請求位址放在此地方,這樣就不用每次在excel中url裡寫入完整的介面位址)

3.請求頭存放在conf.ini檔案的headers用字典的方式存放

4.資料庫校驗部分需要先連線資料庫,在conf.ini配置檔案中填寫host主機,user使用者,password密碼,port埠號(注:這裡只支援,mysql資料庫)

請注意:框架中有許多的第三方庫需要自己安裝

用例類和excel用例寫好後執行run.py檔案

在reports檢視測試報告

python介面自動化測試

為了監控線上的介面是否正常執行,所以想寫乙個smoke test.這個檔案希望能夠實現從檔案讀取url和引數,然後傳送請求,校驗返回code 200的功能。1.首先採取哪種方式存放url和請求引數 excel?csv?ini?用csv比較好,相容性也比較好 那我們使用csv吧。todo 考慮放在資料...

python介面自動化測試

介面自動化測試之連線資料庫 安裝環境 window7 python3.7 資料庫mysql 遠端連線 步驟內容 1.連線資料庫 2.建立游標 3.sql語句 4.獲取元組資訊 連線資料庫 查詢出來的資料都是以元組的形式返回的 sql select from t user where id 5 查詢多...

python 介面自動化測試之介面資料依賴

在做自動化測試時,經常會對一整套業務流程進行一組介面上的測試,這時候介面之間經常會有資料依賴,那麼具體要怎麼實現這個依賴呢。思路如下 抽取之前介面的返回值儲存到全域性變數字典中。初始化介面請求時,解析請求頭部 請求引數等資訊中的全域性變數並進行替換。發出請求。核心 實現 抽取介面的返回值儲存到全域性...