PO模式是一種面向對象的編程思想,就是把要測試的功能按照頁面進行封裝,把每一個要測試的頁面看作一個PO對象進行封裝。在進行PO封裝的時候我們把每一個頁面拆分成三層(也就是要定義三個類),分別為:對象庫層、操作層、業務層。對象庫層用來定義頁面中都包含了哪些元素,以及封裝了定位這些元素的方法,對象庫層只做這一件事情。操作層用來定義對頁面中的元素要執行什么樣的操作,並封裝成方法;操作層會直接調用對象庫層來獲取元素。業務層用來定義頁面中都包含了哪些業務操作的功能,並封裝成對應的方法。業務層就是將操作層的一個或多個元素的操作組合成一個具體的業務功能。調用關系:業務層會調用操作層,操作層會調用對象庫層。
等這些業務代碼編寫完之后,再根據測試用例編寫對應的測試腳本,測試腳本需要調用業務層封裝好的方法組合成一個完整的測試用例。我們采用UnitTest來管理測試腳本,之所以使用UnitTest這個測試框架,是因為使用這些測試框架可以很方便的管理和維護很多很多的測試用例;並且提供了豐富的斷言方法,方便對用例執行的結果進行判斷;而且還可以非常方便的生成測試報告。
我們引入了數據驅動的思想,主要是為了實現測試腳本與測試數據的分離,方便對測試數據的維護。(測試數據直接保存在了JSON文件中)
我們還使用Python的logging日志模塊來收集日志,方便對執行失敗的測試用例進行問題的定位和排查。
另外,我們還把那些公共的、通用的操作封裝成工具類和方法,供其他代碼方便直接調用,比如:把獲取瀏覽器驅動對象的方法、獲取警告框信息的方法都定義成了工具類。
以上就是我們公司對自動化測試項目架構的設計。

- 安裝 selenium 包
- 安裝 parameterized 包
- 添加 HTMLTestRunner
- 封裝驅動工具類
- 封裝PO基類,定義 BasePage 和 BaseHandle
登錄頁:login_page.py首頁:index_page.py后台頁面(個人中心頁):home_page.py商品搜索頁:goods_search_page.py商品詳情頁:goods_detail_page.py購物車頁:cart_page.py下訂單頁:order_page.py訂單支付頁:order_pay_page.py我的訂單頁:my_order_page.py
import logging.handlers import os # 工程目錄 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) def init_log_config(): """ 初始化日志配置 """ # 日志輸出格式 fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(messag e)s" # 創建日志器 logger = logging.getLogger() logger.setLevel(logging.INFO) # 創建格式化器 formatter = logging.Formatter(fmt) # 輸出到控制台 sh = logging.StreamHandler() sh.setFormatter(formatter) logger.addHandler(sh) # 輸出到文件,每日一個文件 log_path = os.path.join(BASE_DIR, "log", "tpshop.log") fh = logging.handlers.TimedRotatingFileHandler(log_path, when='MIDNIGHT', interval=1 , backupCount=3) fh.setFormatter(formatter) logger.addHandler(fh)
report_file = "./report/report{}.html".format(time.strftime("%Y%m%d-%H%M%S")) with open(report_file, "wb") as f: runner = HTMLTestRunner(f, title="TPshop商城自動化測試報告", description="Win10.Fire fox") runner.run(suite)
