整個框架的開發及調通是在3月27日晚上22點完成,如下:
這篇文章真的是拖了太久了,久到我居然把程式碼部分完成後,徹底給忘了,這記性,真的是年紀大了!
紀錄檔可以很好輔助我們定位問題,範例程式碼如下:
class LogUtils:
def __init__(self, log_path=log_path):
"""
通過python自帶的logging模組進行封裝
"""
self.logfile_path = log_path
# 建立紀錄檔物件logger
self.logger = logging.getLogger(__name__)
# 設定紀錄檔級別
self.logger.setLevel(level=logging.INFO)
# 設定紀錄檔的格式
formatter = logging.Formatter('%(asctime)s - %(filename)s [line:%(lineno)d] - %(levelname)s: %(message)s')
"""在log檔案中輸出紀錄檔"""
# 紀錄檔檔名稱顯示一天的紀錄檔
self.log_name_path = os.path.join(self.logfile_path, "log_%s" % time.strftime('%Y_%m_%d')+".log")
# 建立檔案處理程式並實現追加
self.file_log = logging.FileHandler(self.log_name_path, 'a', encoding='utf-8')
# 設定紀錄檔檔案裡的格式
self.file_log.setFormatter(formatter)
# 設定紀錄檔檔案裡的級別
self.file_log.setLevel(logging.INFO)
# 把紀錄檔資訊輸出到檔案中
self.logger.addHandler(self.file_log)
# 關閉檔案
self.file_log.close()
"""在控制檯輸出紀錄檔"""
# 紀錄檔在控制檯
self.console = logging.StreamHandler()
# 設定紀錄檔級別
self.console.setLevel(logging.INFO)
# 設定紀錄檔格式
self.console.setFormatter(formatter)
# 把紀錄檔資訊輸出到控制檯
self.logger.addHandler(self.console)
# 關閉控制檯紀錄檔
self.console.close()
def get_log(self):
return self.logger
這裡我用的是Excel
,範例如下:
範例程式碼如下:
class ExcelUtils(object):
@staticmethod
def get_element_Data():
"""
通過pandas讀取excel中的資料,返回字典對映
"""
data_list = pd.read_excel(excel_path).values.tolist() # reading file
dict_elements = {}
for data in data_list:
dict_elements[data[0]] = data[1] + "," + data[2]
return dict_elements
可能評論區會有人說用yml、json、csv
做資料來源會更好,我不認同!
為什麼用Excel
做資料來源?
yml、json
是啥你怎麼辦,可以學,沒錯(網際網路時代時間成本太昂貴了),不是不可能遇到,是因為最不可控的是使用者人群,不是嗎?框架的一開始設計很重要,所以整體的設計要清晰明瞭。
感動自己的實現不重要,而是被團隊需要的實現,才會顯得自己重要!
這裡主要用於處理,元素物件和原生API的封裝,部分程式碼範例如下圖:
在action
層寫測試用例,範例程式碼如下:
class PageAction(BasePage):
def order(self, taste: str):
"""
根據口味選餐
:param taste:
:return:
"""
# 將第一個五花肉石鍋拌飯加入購物車
self.element_click("將第一個五花肉石鍋拌飯加入購物車")
# 選擇口味
self.element_click(taste)
# 確定選擇
self.element_click("確定選擇")
# 共選擇份數
total = self.get_elementText("共選擇份數")
return total
呼叫action
層,執行測試用例,範例程式碼如下:
# -*- coding: utf-8 -*-
"""
# @Time : 2023/03/20 20:55
# @Author : longrong.lang
# @FileName: order_test.py
# @Software: PyCharm
# @Blog :https://www.cnblogs.com/longronglang/
# @Motto:ABC(Always Be Coding)
"""
import minium
from action.page_action import PageAction
@minium.ddt_class
class OrderTest(minium.MiniTest):
"""
測試登入功能
"""
pageAction = None
@minium.ddt_case(
{"taste": "蒜香味", "count": " 1 "},
{"taste": "姜蔥味", "count": " 1 "},
{"taste": "鹽焗味", "count": "3"}
)
def test_Order(self, value):
try:
self.pageAction = PageAction(self.mini, self.page)
total = self.pageAction.order(value["taste"])
self.assertEqual(total, value["count"])
except AssertionError as err:
self.pageAction.screen_shot()
self.fail(err)
覺得minium
的測試報告顏值還可以,還可以看到歷史的,感覺還不錯,如下:
失敗有截圖還有紀錄檔:
B站看執行效果:
https://www.bilibili.com/video/BV1Dk4y147Sn
到此,關於minium
系列暫時告一段路了,感謝大家對我的支援,覺得我的文章對您有幫助,請幫忙轉發!
我是六哥,後面還會陸續更新其他教學文章,還請繼續關注我!
優秀不夠,你是否無可替代
軟體測試交流QQ群:721256703,期待你的加入!!
歡迎關注我的微信公眾號:軟體測試君