Time will tell(時間會證實一切).css
最近博主一直紮根於把碎片化的知識熔鍊爲整套知識體系的過程當中。Python語言、selenium、unittest框架、HTMLTestRunner框架這些都有所瞭解,也寫了不少腳本去作項目的功能測試。但仍是感受到有些零零散散,串不起來。python
這幾天在各大博客論壇一直逛該,而且在嘗試着本身搭一個自動化測試框架,到了今天,終於初見成效。web
過程當中不斷地修修改改,這篇文章主要撿點核心的部分來講,談談本身的搭建思路。我的淺見,歡迎提議。面試
大概地講下每一個模塊下的類實現的一些方法:瀏覽器
一、configcookie
||-config.yml 配置文件,主要存放一些全局配置變量,如:框架
(1)截圖、報告、驅動存放路徑;學習
(2)發送郵件使用到的發件人郵箱及登陸密碼(由於發送郵件通常用於自動發送測試報告,因此發件人比較固定);測試
(3)繞過登陸驗證碼要寫入的cookies信息ui
||-config.py 包含讀取配置文件方法和一些全局參數
二、data
||-存放一些數據文件
!!-generator 一個生成各種型隨機數據的類,裏面包含生成隨機漢字、指定位數的數字、字符串的方法,能夠減小造測試數據的工做量
三、driver
||-存放瀏覽器驅動
四、log
||-logger.py 封裝的日誌類,輸出不一樣級別的日誌信息到指定的日誌文件裏
五、report
||-HTMLTestRunner.py 生成一個HTML格式的網頁報告
六、test
||-pageObject 存放各個頁面的元素、操做
||-test_suit 存放用例
七、utils
||-common 封裝經常使用方法
||——base_page 頁面基本操做(如前進、後退、關閉、切換窗口、彈窗處理、元素定位、點擊、輸入、截圖等)
||-file_reader 封裝各類數據文件讀取方法,實現腳本參數化
||——csv_reader.py 讀取csv文件,支持逐行或逐列讀取數據
||——excel_reader.py 讀取excel文件
||——yaml_reader.py 讀取yml文件,配置文件讀取就是調用這個類中的get_data()方法
接下來主要講經常使用方法的封裝。
其實封裝這些方法主要是爲了完善各類平常操做的日誌信息寫入及異常處理。前進、後退、關閉、點擊、輸入這些都沒什麼特別的,主要就是調用driver的方法實現,再加上日誌信息寫入和一些異常處理便可。
着重講一下切換窗口、日誌信息寫入、彈窗處理及元素定位三個方法。
一、切換窗口
分三種狀況——當前有1/2/>2個窗口
①只有一個窗口,沒法切換
②有兩個窗口,直接切換到當前窗口外的另外一窗口
③有兩個以上窗口,遍歷每一個窗口,直到切換到的窗口是目標窗口(須要靠傳入參數判斷)爲止
If len(driver.window_handles)==1: #不作任何操做,輸入警告日誌信息 elif len(driver.window_handles)==2: driver.switch_to_window(‘另外一窗口句柄’) else: For window in driver.window_handles: driver.switch_to_window(window) If 當前窗口是目標窗口: Break
二、日誌信息寫入
在每個封裝好的操做類裏面,針對各類操做,寫入對應日誌信息。例如用經常使用方法類來講明
logger = Logger('BasePage').get_logger() If len(driver.window_handles)==1: Logger.warning(「當前只打開了一個窗口,沒法切換!」) elif len(driver.window_handles)==2: driver.switch_to_window(‘另外一窗口句柄’) Logger.info(‘切換到另外一窗口’) else: For window in driver.window_handles: driver.switch_to_window(window) If 當前窗口是目標窗口: Break
三、彈窗處理(主要針對alert和confirm彈窗)
首先須要判斷彈窗是否出現?(使用EC.alert_is_present())
-Y 獲取彈窗提示信息,與傳入的預期提示信息比較,判斷信息是否正確?
-Y 點擊確認按鈕,關閉彈窗
-N 寫入錯誤日誌,提示信息有誤,並截圖,點擊確認按鈕,關閉彈窗
-N 不需處理,寫入日誌,無彈窗
四、元素定位
這裏主要是使用find_element()的方法,傳入參數格式爲(By.方法,’表達式’)
使用find_element()方法須要導入By模塊(from selenium.webdriver.common.by import By)
方法可選值:id、xpath、link text、partial link text、name、tag name、class name、css selector
五、最後
稍微提一下這個框架裏的PageObject思想。
PageObject(頁面對象),簡單點說就是把界面定位和業務操做分開。這個框架主要是把UI自動化分爲三層:對象庫層、操做層和業務層。
在pageObject文件夾下的各個page類,至關因而對象庫層,主要存放各個頁面的元素
Base_Page類至關因而操做層,再由各個page類繼承Base_Object類來實現頁面的一些基本操做。最後testcase中的各個用例類,相似業務層,並使用unittest框架組裝並批量執行測試用例。
絮叨
對接口、自動化、軟件測試零基礎入門、python全棧、面試題感興趣能夠加入咱們175317069一塊兒學習,羣內會有不按期測試資料連接發放喔。