前言
整個框架的開發及調通是在3月27日晚上22點完成,如下:
這篇文章真的是拖了太久了,久到我居然把代碼部分完成后,徹底給忘了,這記性,真的是年紀大了!
框架的設計開發
1、框架搭建設計要素
- 日志&測驗步驟
- 報告&失敗截圖
- 組態檔&資料源設計
- 公共函式&API封裝
- 測驗資料&引數化、解耦
- 測驗套件&測驗用例設計、組裝
2、工程結構
3、日志
日志可以很好輔助我們定位問題,示例代碼如下:
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
4、資料源
這里我用的是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是啥你怎么辦,可以學,沒錯(互聯網時代時間成本太昂貴了),不是不可能遇到,是因為最不可控的是使用者人群,不是嗎?
框架的一開始設計很重要,所以整體的設計要清晰明了,
感動自己的實作不重要,而是被團隊需要的實作,才會顯得自己重要!
5、基礎層
這里主要用于處理,元素物件和原生API的封裝,部分代碼示例如下圖:
6、測驗用例
在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)
7、測驗報告
覺得minium的測驗報告顏值還可以,還可以看到歷史的,感徑訓不錯,如下:
失敗有截圖還有日志:
B站看運行效果:
https://www.bilibili.com/video/BV1Dk4y147Sn
寫在最后
到此,關于minium系列暫時告一段路了,感謝大家對我的支持,覺得我的文章對您有幫助,請幫忙轉發!
我是六哥,后面還會陸續更新其他教程文章,還請繼續關注我!
優秀不夠,你是否無可替代
軟體測驗交流QQ群:721256703,期待你的加入!!
歡迎關注我的微信公眾號:軟體測驗君

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/549482.html
標籤:Python
