介面自動化框架
一、整個框架的目錄結構,本次內容著重講解測試用例類,只要掌握了測試用例類和介面測試用例怎麼寫就可以運用此框架。
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 介面自動化測試之介面資料依賴
在做自動化測試時,經常會對一整套業務流程進行一組介面上的測試,這時候介面之間經常會有資料依賴,那麼具體要怎麼實現這個依賴呢。思路如下 抽取之前介面的返回值儲存到全域性變數字典中。初始化介面請求時,解析請求頭部 請求引數等資訊中的全域性變數並進行替換。發出請求。核心 實現 抽取介面的返回值儲存到全域性...